diff --git a/.project b/.project
new file mode 100644
index 0000000..fb7f963
--- /dev/null
+++ b/.project
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.vaadin.addons.aggregator</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/about.html b/about.html
new file mode 100644
index 0000000..64c0598
--- /dev/null
+++ b/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 1, 2016</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/epl-v10.html b/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/jenkins.build.config.xml b/jenkins.build.config.xml
new file mode 100644
index 0000000..466c9ba
--- /dev/null
+++ b/jenkins.build.config.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
+-->
+<!--#======================================================================= -->
+<!--# Module specific parameters for the Jenkins Job 						 -->
+<!--#======================================================================= -->
+
+<jenkins>
+	<jenkins.build.technologystack />
+	<settings>${user.home}/.m2/settingsMirrors.xml</settings>
+	<!-- DO NOT EDIT BELOW THIS LINE -->
+        <jenkins.build.dependencies>
+                <jenkins.build.dependency>org.eclipse.osbp.releng.maven</jenkins.build.dependency>
+        </jenkins.build.dependencies>
+</jenkins>
diff --git a/license.html b/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/license.html
@@ -0,0 +1,164 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the 
+Eclipse Public License Version 1.0
+   ("EPL").  A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, 
+documentation and other files maintained in the Eclipse Foundation 
+source code
+   repository ("Repository") in software modules ("Modules") and made 
+available as downloadable archives ("Downloads").</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to 
+facilitate delivering, extending, and upgrading the Content.  Typical 
+modules may include plug-ins ("Plug-ins"), plug-in fragments 
+("Fragments"), and features ("Features").</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&#8482; ARchive) in a directory named "plugins".</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or 
+Fragments and associated material.  Each Feature may be packaged as a 
+sub-directory in a directory named "features".  Within a Feature, files 
+named "feature.xml" may contain a list of the names and version numbers 
+of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features ("Included 
+Features"). Within a Feature, files named "feature.xml" may contain a 
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be 
+contained in files named "about.html" ("Abouts"). The terms and 
+conditions governing Features and
+Included Features should be contained in files named "license.html" 
+("Feature Licenses").  Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is 
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process.  If the Feature contains Included Features, the 
+Feature Update License should either provide you with the terms and 
+conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be 
+found in the "license" property of files named "feature.properties" 
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the 
+terms and conditions (or references to such terms and conditions) that 
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER 
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND 
+CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, 
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions 
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, 
+examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager ("Provisioning Technology") for the purpose of 
+allowing users to install software, documentation, information and/or
+   other materials (collectively "Installable Software"). This 
+capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about 
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning 
+Technology
+   in accordance with the Specification. By using Provisioning 
+Technology in such a manner and making it available in accordance with 
+the
+   Specification, you further acknowledge your agreement to, and the 
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur ("Provisioning Process") in 
+which a user may execute the Provisioning Technology
+       on a machine ("Target Machine") with the intent of installing, 
+extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology 
+may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user 
+the terms and conditions that govern the use of the Installable
+       Software ("Installable Software Agreement") and such Installable 
+Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable 
+Software Agreement must inform the user of the terms and conditions that
+ govern
+       the Installable Software and must solicit acceptance by the end 
+user in the manner prescribed in such Installable Software Agreement. 
+Upon such
+       indication of agreement by the user, the provisioning Technology 
+will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use, 
+and/or re-export to
+   another country, of encryption software. BEFORE using any encryption 
+software, please check the country's laws, regulations and policies 
+concerning the import,
+   possession, or use, and re-export of encryption software, to see if 
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/.project b/org.eclipse.osbp.vaadin.addons.absolutelayout/.project
new file mode 100644
index 0000000..f33826b
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/.project
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.vaadin.addons.absolutelayout</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.vaadin.integration.eclipse.widgetsetBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.vaadin.integration.eclipse.addonStylesBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>com.vaadin.integration.eclipse.widgetsetNature</nature>
+		<nature>org.apache.ivyde.eclipse.ivynature</nature>
+		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/LICENSE.txt b/org.eclipse.osbp.vaadin.addons.absolutelayout/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/META-INF/MANIFEST.MF b/org.eclipse.osbp.vaadin.addons.absolutelayout/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c01b4d9
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/META-INF/MANIFEST.MF
@@ -0,0 +1,31 @@
+Manifest-Version: 1.0
+Bnd-LastModified: 1491902092179
+Build-Jdk: 1.8.0_91
+Built-By: mollik
+Bundle-ActivationPolicy: lazy
+Bundle-Description: A parent POM aimed to set up the build of general Ma
+ ven based projects.
+Bundle-DocURL: http://www.eclipse.org/osbp
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.vaadin.addons.absolutelayout
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-SymbolicName: org.eclipse.osbp.vaadin.addons.absolutelayout
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Created-By: Apache Maven Bundle Plugin
+Export-Package: org.eclipse.osbp.vaadin.addons.absolutelayout;version="0
+ .9.0",org.eclipse.osbp.vaadin.addons.absolutelayout.client;version="0.9
+ .0",org.eclipse.osbp.vaadin.addons.absolutelayout.public.oabsolutelayou
+ t;version="0.9.0"
+Import-Package: com.vaadin.annotations;version="[7.5.7,7.7.0)",com.vaadi
+ n.client.communication;version="[7.5.7,7.7.0)",com.vaadin.client.ui.dd;
+ version="[7.5.7,7.7.0)",com.vaadin.server;version="[7.5.7,7.7.0)",com.v
+ aadin.ui;version="[7.5.7,7.7.0)",javax.servlet.annotation;resolution:=o
+ ptional;version="[3.0,4)",org.eclipse.osbp.vaadin.addons.absolutelayout
+ .client;version="[0.9,1)",org.junit
+Require-Bundle: com.vaadin.server;bundle-version="[7.5.7,7.7.0)",com.vaa
+ din.client;bundle-version="[7.5.7,7.7.0)",com.vaadin.shared;bundle-vers
+ ion="[7.5.7,7.7.0)",org.jsoup;bundle-version="[1.8.3,1.8.4)",dragdropla
+ youts.osgi;bundle-version="[1.1.3,1.1.4)"
+Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
+Tool: Bnd-3.2.0.201605172007
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/META-INF/git.properties b/org.eclipse.osbp.vaadin.addons.absolutelayout/META-INF/git.properties
new file mode 100644
index 0000000..5eccd6e
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/META-INF/git.properties
@@ -0,0 +1,14 @@
+#Generated by Git-Commit-Id-Plugin
+#Tue Apr 11 11:17:32 CEST 2017
+git.remote.origin.url=ssh\://compex@10.1.13.14/osbpgit/org.eclipse.osbp.vaadin.addons.git
+git.closest.tag.name=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39
+git.commit.id.describe-short=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39-dirty
+git.commit.time=02.02.2017 @ 18\:04\:55 MEZ
+git.commit.message.full=remove the feature from build
+git.commit.message.short=remove the feature from build
+git.commit.id.abbrev=90dd482
+git.branch=OSBP-initial-commit-2-Eclipse-4-luna
+git.closest.tag.commit.count=0
+git.commit.id.describe=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39-dirty
+git.commit.id=90dd482e5bc78cd1a404d12445cebc868ee417b0
+git.tags=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.absolutelayout.launch b/org.eclipse.osbp.vaadin.addons.absolutelayout/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.absolutelayout.launch
new file mode 100644
index 0000000..040f8f6
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.absolutelayout.launch
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.osbp.vaadin.addons.absolutelayout"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;org.eclipse.osbp.vaadin.addons.absolutelayout&quot;/&gt;&#10;&lt;/runtimeClasspathEntry&gt;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.eclipse.osbp.vaadin.addons.absolutelayout/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.eclipse.osbp.vaadin.addons.absolutelayout/sample&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.eclipse.osbp.vaadin.addons.absolutelayout/test&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.codeserver.CodeServer"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="org.eclipse.osbp.vaadin.addons.absolutelayout.AbsoluteLayoutWidgetset"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.osbp.vaadin.addons.absolutelayout"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xss8M -Xmx512M -XX:MaxPermSize=512M"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="/Users/florianpirchner/Work/dev/osbp_client/git/org.eclipse.osbp.vaadin.addons/org.eclipse.osbp.vaadin.addons.absolutelayout"/>
+</launchConfiguration>
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/epl-v10.html b/org.eclipse.osbp.vaadin.addons.absolutelayout/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/ivy.xml b/org.eclipse.osbp.vaadin.addons.absolutelayout/ivy.xml
new file mode 100644
index 0000000..b9bf25a
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/ivy.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0"?>
+<!DOCTYPE ivy-module [
+	<!ENTITY vaadin.version "7.5.7">
+]> 
+<ivy-module version="2.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
+	<info organisation="com.example" module="v7proj" />
+	<configurations>
+		<!-- The default configuration, which should be deployed to the server -->
+		<conf name="default" />
+		<!-- A configuration only needed when compiling the widget set. Should 
+			not be deployed to the server -->
+		<conf name="widgetset-compile" />
+		<!-- A configuration used in compilation of server side classes only.
+			Should be deployed to the server -->
+		<conf name="nodeploy" />
+	</configurations>
+	<dependencies defaultconf="default" defaultconfmapping="default->default">
+		<!-- The core server part of Vaadin -->
+		<dependency org="com.vaadin" name="vaadin-server" rev="&vaadin.version;" />
+ 
+		<!-- Vaadin themes -->
+		<dependency org="com.vaadin" name="vaadin-themes" rev="&vaadin.version;" />
+
+		<!-- Push support -->
+		<dependency org="com.vaadin" name="vaadin-push" rev="&vaadin.version;" />
+
+		<!-- Servlet 3.0 API -->
+		<dependency org="javax.servlet" name="javax.servlet-api" rev="3.0.1" conf="nodeploy->default" />
+
+		<!-- TestBench 4 -->
+		<dependency org="com.vaadin" name="vaadin-testbench-api" rev="latest.release" conf="nodeploy -> default" />
+
+		<!-- Precompiled DefaultWidgetSet -->
+		<dependency org="com.vaadin" name="vaadin-client-compiled"
+			rev="&vaadin.version;" />
+
+		<!-- Vaadin client side, needed for widget set compilation -->
+		<dependency org="com.vaadin" name="vaadin-client" rev="&vaadin.version;"
+			 conf="widgetset-compile->default" />
+
+		<!-- Compiler for custom widget sets. Should not be deployed -->
+		<dependency org="com.vaadin" name="vaadin-client-compiler"
+			rev="&vaadin.version;" conf="widgetset-compile->default" />
+
+		<dependency org="org.vaadin.addons" name="dragdroplayouts" rev="1.2.2" />
+		
+	</dependencies>
+</ivy-module>
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/ivysettings.xml b/org.eclipse.osbp.vaadin.addons.absolutelayout/ivysettings.xml
new file mode 100644
index 0000000..9c0f653
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/ivysettings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ivysettings>
+	<settings defaultResolver="default" />
+	<resolvers>
+		<chain name="default">
+			<!-- Public Maven repository -->
+			<ibiblio name="public" m2compatible="true" />
+
+			<!-- Vaadin Add-on repository -->
+			<ibiblio name="vaadin-addons" usepoms="true" m2compatible="true"
+				root="http://maven.vaadin.com/vaadin-addons" />
+
+			<!-- Vaadin snapshots repository -->
+			<ibiblio name="vaadin-snapshots" usepoms="true" m2compatible="true"
+				root="https://oss.sonatype.org/content/repositories/vaadin-snapshots" />
+			<!-- Repository used for Vaadin modified smartsprites library -->
+			<dual name="custom-smartsprites">
+				<filesystem name="smartsprites-ivy">
+					<ivy pattern="${basedir}/ivymodule/[module]-ivy-[revision].xml" />
+				</filesystem>
+				<url name="smartsprites-artifact">
+					<artifact
+						pattern="http://dev.vaadin.com/svn/versions/6.8/build/smartsprites/lib/[artifact](-[revision]).[ext]" />
+				</url>
+			</dual>
+		</chain>
+	</resolvers>
+	<modules>
+		<!-- Vaadin patched SmartSprites -->
+		<module organisation="com.carrotsearch" name="smartsprites"
+			revision="0.2.3-itmill" resolver="custom-smartsprites" />
+	</modules>
+
+
+</ivysettings>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/license.html b/org.eclipse.osbp.vaadin.addons.absolutelayout/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/license.html
@@ -0,0 +1,164 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the 
+Eclipse Public License Version 1.0
+   ("EPL").  A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, 
+documentation and other files maintained in the Eclipse Foundation 
+source code
+   repository ("Repository") in software modules ("Modules") and made 
+available as downloadable archives ("Downloads").</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to 
+facilitate delivering, extending, and upgrading the Content.  Typical 
+modules may include plug-ins ("Plug-ins"), plug-in fragments 
+("Fragments"), and features ("Features").</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&#8482; ARchive) in a directory named "plugins".</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or 
+Fragments and associated material.  Each Feature may be packaged as a 
+sub-directory in a directory named "features".  Within a Feature, files 
+named "feature.xml" may contain a list of the names and version numbers 
+of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features ("Included 
+Features"). Within a Feature, files named "feature.xml" may contain a 
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be 
+contained in files named "about.html" ("Abouts"). The terms and 
+conditions governing Features and
+Included Features should be contained in files named "license.html" 
+("Feature Licenses").  Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is 
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process.  If the Feature contains Included Features, the 
+Feature Update License should either provide you with the terms and 
+conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be 
+found in the "license" property of files named "feature.properties" 
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the 
+terms and conditions (or references to such terms and conditions) that 
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER 
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND 
+CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, 
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions 
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, 
+examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager ("Provisioning Technology") for the purpose of 
+allowing users to install software, documentation, information and/or
+   other materials (collectively "Installable Software"). This 
+capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about 
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning 
+Technology
+   in accordance with the Specification. By using Provisioning 
+Technology in such a manner and making it available in accordance with 
+the
+   Specification, you further acknowledge your agreement to, and the 
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur ("Provisioning Process") in 
+which a user may execute the Provisioning Technology
+       on a machine ("Target Machine") with the intent of installing, 
+extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology 
+may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user 
+the terms and conditions that govern the use of the Installable
+       Software ("Installable Software Agreement") and such Installable 
+Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable 
+Software Agreement must inform the user of the terms and conditions that
+ govern
+       the Installable Software and must solicit acceptance by the end 
+user in the manner prescribed in such Installable Software Agreement. 
+Upon such
+       indication of agreement by the user, the provisioning Technology 
+will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use, 
+and/or re-export to
+   another country, of encryption software. BEFORE using any encryption 
+software, please check the country's laws, regulations and policies 
+concerning the import,
+   possession, or use, and re-export of encryption software, to see if 
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/pom.xml b/org.eclipse.osbp.vaadin.addons.absolutelayout/pom.xml
new file mode 100644
index 0000000..24eaf9f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/pom.xml
@@ -0,0 +1,185 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
+-->
+
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.eclipse.osbp.releng.maven</groupId>
+		<artifactId>org.eclipse.osbp.releng.maven.parent.mbp</artifactId>
+		<version>0.9.0-SNAPSHOT</version>
+		<relativePath />
+	</parent>
+
+	<groupId>org.eclipse.osbp.vaadin.addons</groupId>
+	<artifactId>org.eclipse.osbp.vaadin.addons.absolutelayout</artifactId>
+	<packaging>bundle</packaging>
+
+	<dependencies>
+		<dependency>
+			<groupId>com.vaadin</groupId>
+			<artifactId>vaadin-server</artifactId>
+			<version>${vaadin.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.vaadin</groupId>
+			<artifactId>vaadin-client</artifactId>
+			<version>${vaadin.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>javax.servlet-api</artifactId>
+			<version>3.0.1</version>
+		</dependency>
+		<dependency>
+			<groupId>org.eclipse.osbp.dependencies</groupId>
+			<artifactId>org.eclipse.osbp.dependencies.bundle.vaadin.addon.dragdroplayouts</artifactId>
+			<version>1.1.3-SNAPSHOT</version>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<sourceDirectory>${basedir}/src</sourceDirectory>
+
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-resources-plugin</artifactId>
+				<configuration>
+					<encoding>UTF-8</encoding>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.0</version>
+				<configuration>
+					<encoding>UTF-8</encoding>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<extensions>true</extensions>
+				<configuration>
+					<instructions>
+						<Bundle-Name>OSBP Addon for Vaadin: Absolute Layout</Bundle-Name>
+						<Bundle-SymbolicName>org.eclipse.osbp.vaadin.addons.absolutelayout</Bundle-SymbolicName>
+                        <Bundle-Version>0.9.0.{osgi-version-qualifier}</Bundle-Version>
+						<Require-Bundle>com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
+							com.vaadin.client;bundle-version="[7.5.7,7.7.0)",
+							com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
+							org.jsoup;bundle-version="[1.8.3,1.8.4)",
+							dragdroplayouts.osgi;bundle-version="[1.1.3,1.1.4)"
+						</Require-Bundle>
+						<Import-Package>
+							com.vaadin.*;version="[7.5.7,7.7.0)",
+							!fi.jasoft.*,
+                            javax.servlet.annotation;resolution:=optional,
+							*
+						</Import-Package>
+						<Export-Package>
+							!LICENSE,!LICENSE.txt,!THIRD-PARTY.txt,!NOTICE,!README.txt,!VERSION.txt,!build.properties,
+							!VAADIN.*,
+							org.eclipse.osbp.vaadin.addons.*;version="0.9.0"
+						</Export-Package>
+						<Include-Resource>{maven-resources},LICENSE.txt,epl-v10.html</Include-Resource>
+						<_nouses>true</_nouses>
+					</instructions>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-source-plugin</artifactId>
+				<version>2.2.1</version>
+				<executions>
+					<execution>
+						<id>attach-sources</id>
+						<goals>
+							<goal>jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+		<pluginManagement>
+			<plugins>
+
+				<!--This plugin's configuration is used to store Eclipse m2e settings 
+					only. It has no influence on the Maven build itself. -->
+				<plugin>
+					<groupId>org.eclipse.m2e</groupId>
+					<artifactId>lifecycle-mapping</artifactId>
+					<version>1.0.0</version>
+					<configuration>
+						<lifecycleMappingMetadata>
+							<pluginExecutions>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>
+											org.apache.maven.plugins
+										</groupId>
+										<artifactId>
+											maven-dependency-plugin
+										</artifactId>
+										<versionRange>
+											[2.0.0,)
+										</versionRange>
+										<goals>
+											<goal>
+												copy-dependencies
+											</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore></ignore>
+									</action>
+								</pluginExecution>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>com.vaadin</groupId>
+										<artifactId>
+											vaadin-maven-plugin
+										</artifactId>
+										<versionRange>
+											[7.0-SNAPSHOT,)
+										</versionRange>
+										<goals>
+											<goal>compile</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore></ignore>
+									</action>
+								</pluginExecution>
+							</pluginExecutions>
+						</lifecycleMappingMetadata>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+		<!-- This is needed for the sources required by the client-side compiler 
+			to be included in the produced JARs -->
+		<resources>
+			<resource>
+				<directory>src</directory>
+			</resource>
+		</resources>
+
+	</build>
+
+</project>
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/sample/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutUI.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/sample/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutUI.java
new file mode 100644
index 0000000..24a29c5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/sample/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutUI.java
@@ -0,0 +1,229 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+
+package org.eclipse.osbp.vaadin.addons.absolutelayout;
+
+import javax.servlet.annotation.WebServlet;
+
+import com.vaadin.annotations.Theme;
+import com.vaadin.annotations.VaadinServletConfiguration;
+import com.vaadin.data.Property;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.server.VaadinServlet;
+import com.vaadin.ui.AbsoluteLayout.ComponentPosition;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Panel;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+
+import fi.jasoft.dragdroplayouts.client.ui.LayoutDragMode;
+import fi.jasoft.dragdroplayouts.drophandlers.DefaultAbsoluteLayoutDropHandler;
+
+/**
+ * The Class AbsoluteLayoutUI.
+ */
+@SuppressWarnings("serial")
+@Theme("valo")
+public class AbsoluteLayoutUI extends UI {
+
+	/**
+	 * The Class Servlet.
+	 */
+	@WebServlet(value = "/*", asyncSupported = true)
+	@VaadinServletConfiguration(productionMode = false, ui = AbsoluteLayoutUI.class, widgetset = "org.eclipse.osbp.vaadin.addons.absolutelayout.AbsoluteLayoutWidgetset")
+	public static class Servlet extends VaadinServlet {
+	}
+
+	/** The layout1. */
+	private AbsoluteLayout layout1;
+
+	/** The layout2. */
+	private AbsoluteLayout layout2;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.vaadin.ui.UI#init(com.vaadin.server.VaadinRequest)
+	 */
+	@Override
+	protected void init(VaadinRequest request) {
+
+		HorizontalLayout main = new HorizontalLayout();
+		main.setSpacing(true);
+		main.setMargin(true);
+		main.setSizeFull();
+
+		VerticalLayout buttons = new VerticalLayout();
+		main.addComponent(buttons);
+		
+		Button b = new Button("new", new Button.ClickListener() {
+			@Override
+			public void buttonClick(Button.ClickEvent event) {
+				TextField f = new TextField("Foo");
+				f.addStyleName("bar");
+				layout1.addComponent(f);
+			}
+		});
+		buttons.addComponent(b);
+		
+		Button allNew = new Button("all new", new Button.ClickListener() {
+			@Override
+			public void buttonClick(Button.ClickEvent event) {
+				layout1.removeAllComponents();
+				layout2.removeAllComponents();
+				
+				createLayout(layout1);
+				createLayout(layout2);
+			}
+		});
+		buttons.addComponent(allNew);
+		buttons.setWidth("120px");
+		
+		Panel p1 = new Panel();
+		p1.setSizeFull();
+		main.addComponent(p1);
+		main.setExpandRatio(p1, 1.0f);
+
+		HorizontalLayout h1 = new HorizontalLayout();
+		h1.setSpacing(true);
+		h1.setMargin(true);
+		h1.setSizeFull();
+		p1.setContent(h1);
+
+		layout1 = new AbsoluteLayout();
+		layout1.setSizeFull();
+		h1.addComponent(layout1);
+		h1.setExpandRatio(layout1, 1.0f);
+		layout1.setDragMode(LayoutDragMode.CLONE);
+		layout1.setDropHandler(new DefaultAbsoluteLayoutDropHandler());
+		layout1.setResizable(true);
+		layout1.setUseAlignments(true);
+		createLayout(layout1);
+		
+		Panel p2 = new Panel();
+		p2.setSizeFull();
+		main.addComponent(p2);
+		main.setExpandRatio(p2, 1.0f);
+		
+		HorizontalLayout h2 = new HorizontalLayout();
+		h2.setSpacing(true);
+		h2.setMargin(true);
+		h2.setSizeFull();
+		p2.setContent(h2);
+		
+		layout2 = new AbsoluteLayout();
+		layout2.setSizeFull();
+		h2.addComponent(layout2);
+		h2.setExpandRatio(layout2, 1.0f);
+		layout2.setDragMode(LayoutDragMode.CLONE);
+		layout2.setDropHandler(new DefaultAbsoluteLayoutDropHandler());
+		layout2.setResizable(true);
+		layout2.setUseAlignments(true);
+		createLayout(layout2);
+
+		setContent(main);
+	}
+
+	/**
+	 * Creates the layout.
+	 *
+	 * @param layout
+	 *            the main
+	 * @return the absolute layout
+	 */
+	private AbsoluteLayout createLayout(AbsoluteLayout layout) {
+
+		ComponentPosition pos = layout.new ComponentPosition();
+
+		final CheckBox resize = new CheckBox("resize");
+		resize.setImmediate(true);
+		resize.setValue(true);
+		setSizeFull(resize);
+		resize.addValueChangeListener(new Property.ValueChangeListener() {
+			@Override
+			public void valueChange(Property.ValueChangeEvent event) {
+				layout.setResizable(resize.getValue());
+			}
+		});
+		pos.setLeft(30f, Unit.PIXELS);
+		pos.setTop(30f, Unit.PIXELS);
+		layout.addComponent(resize, pos.getCSSString());
+
+		final CheckBox drag = new CheckBox("drag");
+		drag.setImmediate(true);
+		drag.setValue(true);
+		setSizeFull(drag);
+		drag.addValueChangeListener(new Property.ValueChangeListener() {
+			@Override
+			public void valueChange(Property.ValueChangeEvent event) {
+				if (drag.getValue()) {
+					layout.setDragMode(LayoutDragMode.CLONE);
+				} else {
+					layout.setDragMode(LayoutDragMode.NONE);
+				}
+			}
+		});
+		pos.setLeft(130f, Unit.PIXELS);
+		pos.setTop(30f, Unit.PIXELS);
+		layout.addComponent(drag, pos.getCSSString());
+
+		final CheckBox alignments = new CheckBox("alignments");
+		alignments.setImmediate(true);
+		alignments.setValue(true);
+		setSizeFull(alignments);
+		alignments.addValueChangeListener(new Property.ValueChangeListener() {
+			@Override
+			public void valueChange(Property.ValueChangeEvent event) {
+				layout.setUseAlignments(alignments.getValue());
+			}
+		});
+		pos.setLeft(230f, Unit.PIXELS);
+		pos.setTop(30f, Unit.PIXELS);
+		layout.addComponent(alignments, pos.getCSSString());
+
+		TextField text = new TextField("Type me");
+		pos.setLeft(120f, Unit.PIXELS);
+		pos.setTop(200f, Unit.PIXELS);
+		setSizeFull(text);
+		layout.addComponent(text, pos.getCSSString());
+
+		Button button2 = new Button("Click Me2");
+		pos.setLeft(300f, Unit.PIXELS);
+		pos.setTop(300f, Unit.PIXELS);
+		setSizeFull(button2);
+		layout.addComponent(button2, pos.getCSSString());
+
+		CheckBox checkbox = new CheckBox("Check me");
+		pos.setLeft(470f, Unit.PIXELS);
+		pos.setTop(390f, Unit.PIXELS);
+		setSizeFull(checkbox);
+		layout.addComponent(checkbox, pos.getCSSString());
+
+		return layout;
+	}
+
+	/**
+	 * Sets the size full.
+	 *
+	 * @param resize
+	 *            the new size full
+	 */
+	private void setSizeFull(final Component resize) {
+		// resize.setSizeFull();
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/VAADIN/addons/osbee/vaadin/addons/absolutelayout/styles.scss b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/VAADIN/addons/osbee/vaadin/addons/absolutelayout/styles.scss
new file mode 100644
index 0000000..cba72d5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/VAADIN/addons/osbee/vaadin/addons/absolutelayout/styles.scss
@@ -0,0 +1,63 @@
+@mixin osbee-absolutelayout {
+
+	.v-absolutelayout .o-alignmentLine {
+		// the color of the alignment line
+		background-color: green;
+	}
+
+	.o-absolutelayout{
+		// the amount of pixels, a snap to alignment lines is done
+		snap: 7;
+	}
+
+  .v-absolutelayout .v-absolutelayout-wrapper-o-resizable {
+    &.resizing {
+      overflow: visible;
+    }
+    .drag-overlay {
+      border: 1px solid red;
+      -webkit-box-sizing: border-box;
+      -moz-box-sizing: border-box;
+      box-sizing: border-box;
+      position: absolute;
+      z-index: 10;
+    }
+    .tlc, .te, .trc, .re, .brc, .be, .blc, .le {
+      background-color: transparent;
+      display: block;
+      overflow: visible;
+      position: absolute;
+    }
+    div.unused {
+      cursor: default !important;
+    }
+    .te {
+      cursor: ns-resize;
+      top: 0;
+      left: 0;
+      right: 0;
+      z-index: 6;
+    }
+    .re {
+      cursor: ew-resize;
+      top: 0;
+      right: 0;
+      bottom: 0;
+      z-index: 5;
+    }
+    .le {
+      cursor: ew-resize;
+      top: 0;
+      bottom: 0;
+      left: 0;
+      z-index: 5;
+    }
+    .be {
+      cursor: ns-resize;
+      right: 0;
+      bottom: 0;
+      left: 0;
+      z-index: 6;
+    }
+  }
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayout.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayout.java
new file mode 100644
index 0000000..24eb08a
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayout.java
@@ -0,0 +1,382 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+
+import org.eclipse.osbp.vaadin.addons.absolutelayout.client.OAbsoluteLayoutServerRpc;
+import org.eclipse.osbp.vaadin.addons.absolutelayout.client.OAbsoluteLayoutState;
+import org.eclipse.osbp.vaadin.addons.absolutelayout.client.OResizeLocation;
+
+import com.vaadin.shared.Connector;
+import com.vaadin.ui.Component;
+import com.vaadin.util.ReflectTools;
+
+import fi.jasoft.dragdroplayouts.DDAbsoluteLayout;
+import fi.jasoft.dragdroplayouts.client.ui.LayoutDragMode;
+
+/**
+ * OS.bee AbsoluteLayout. <br>
+ * This layout supports resizing its elements. And also supports drag and drop
+ * of elemens.
+ * <p>
+ * Only DragModes NONE and COPY are allowed
+ */
+@SuppressWarnings("serial")
+public class AbsoluteLayout extends DDAbsoluteLayout {
+
+	/** The rpc. */
+	private OAbsoluteLayoutServerRpc rpc = new OAbsoluteLayoutServerRpc() {
+		@Override
+		public void resized(Connector connector, int newWidth, int newHeight, int oldWidth, int oldHeight,
+				OResizeLocation location) {
+			internalResizeChild((Component) connector, newWidth, newHeight, oldWidth, oldHeight, location);
+
+			fireEvent(new ChildResizedEvent((Component) connector, newWidth, newHeight, oldWidth, oldHeight, location));
+		}
+	};
+
+	/**
+	 * Instantiates a new absolute layout.
+	 */
+	public AbsoluteLayout() {
+		registerRpc(rpc);
+	}
+
+	/* (non-Javadoc)
+	 * @see fi.jasoft.dragdroplayouts.DDAbsoluteLayout#getState()
+	 */
+	@Override
+	public OAbsoluteLayoutState getState() {
+		return (OAbsoluteLayoutState) super.getState();
+	}
+
+	/* (non-Javadoc)
+	 * @see fi.jasoft.dragdroplayouts.DDAbsoluteLayout#getState(boolean)
+	 */
+	@Override
+	protected OAbsoluteLayoutState getState(boolean markAsDirty) {
+		return (OAbsoluteLayoutState) super.getState(markAsDirty);
+	}
+
+	/**
+	 * Internal resize child.
+	 *
+	 * @param child the child
+	 * @param newWidth the new width
+	 * @param newHeight the new height
+	 * @param oldWidth the old width
+	 * @param oldHeight the old height
+	 * @param location the location
+	 */
+	protected void internalResizeChild(Component child, int newWidth, int newHeight, int oldWidth, int oldHeight,
+			OResizeLocation location) {
+		switch (location) {
+		case TOP_LEFT:
+			moveLeft(oldWidth - newWidth, child);
+		case TOP:
+			moveTop(oldHeight - newHeight, child);
+			break;
+		case TOP_RIGHT:
+			moveTop(oldHeight - newHeight, child);
+		case RIGHT:
+			moveRight(oldWidth - newWidth, child);
+			break;
+		case BOTTOM_RIGHT:
+			moveRight(oldWidth - newWidth, child);
+		case BOTTOM:
+			moveBottom(oldHeight - newHeight, child);
+			break;
+		case BOTTOM_LEFT:
+			moveBottom(oldHeight - newHeight, child);
+		case LEFT:
+			moveLeft(oldWidth - newWidth, child);
+			break;
+		default:
+			break;
+		}
+		child.setWidth(newWidth, Unit.PIXELS);
+		child.setHeight(newHeight, Unit.PIXELS);
+	}
+
+	/**
+	 * Adjusts the top position for the component when inside a
+	 * {@link com.vaadin.ui.AbsoluteLayout} and top position was set with
+	 * pixels.
+	 *
+	 * @param delta            the change of top position in pixels
+	 * @param child            the component that is inside the absolute layout
+	 */
+	protected void moveTop(int delta, Component child) {
+		ComponentPosition position = getPosition(child);
+		if (position.getTopValue() != null && position.getTopUnits().equals(Unit.PIXELS)) {
+			float newValue = (position.getTopValue() + delta);
+			if (newValue < 0) {
+				newValue = 0;
+			}
+			position.setTopValue(newValue);
+			setPosition(child, position);
+		} else {
+			// position bottom set, NOOP
+		}
+	}
+
+	/**
+	 * Adjusts the bottom position for the component when inside a
+	 * {@link com.vaadin.ui.AbsoluteLayout} and bottom position was set with
+	 * pixels.
+	 *
+	 * @param delta            the change of bottom position in pixels
+	 * @param child            the component that is inside the absolute layout
+	 */
+	protected void moveBottom(int delta, Component child) {
+		ComponentPosition position = getPosition(child);
+		if (position.getBottomValue() != null && position.getBottomUnits().equals(Unit.PIXELS)) {
+			float newValue = (position.getBottomValue() + delta);
+			if (newValue < 0) {
+				newValue = 0;
+			}
+			position.setBottomValue(newValue);
+			setPosition(child, position);
+		} else {
+			// position top used, NOOP
+		}
+	}
+
+	/**
+	 * Adjusts the right position for the component when inside a
+	 * {@link com.vaadin.ui.AbsoluteLayout} and right position was set with
+	 * pixels.
+	 *
+	 * @param delta            the change of right position in pixels
+	 * @param child the child
+	 */
+	protected void moveRight(int delta, Component child) {
+		ComponentPosition position = getPosition(child);
+		if (position.getRightValue() != null && position.getRightUnits().equals(Unit.PIXELS)) {
+			float newValue = (position.getRightValue() + delta);
+			if (newValue < 0) {
+				newValue = 0;
+			}
+			position.setRightValue(newValue);
+			setPosition(child, position);
+		} else {
+			// position left used, NOOP
+		}
+	}
+
+	/**
+	 * Adjusts the left position for the component when inside a
+	 * {@link com.vaadin.ui.AbsoluteLayout} and left position was set with
+	 * pixels.
+	 *
+	 * @param delta            the change of left position in pixels
+	 * @param child            the component that is inside the absolute layout
+	 */
+	protected void moveLeft(int delta, Component child) {
+		ComponentPosition position = getPosition(child);
+		if (position.getLeftValue() != null && position.getLeftUnits().equals(Unit.PIXELS)) {
+			float newValue = (position.getLeftValue() + delta);
+			if (newValue < 0) {
+				newValue = 0;
+			}
+			position.setLeftValue(newValue);
+			setPosition(child, position);
+		} else {
+			// position right set, NOOP
+		}
+	}
+
+	/**
+	 * True, if the children should be resizable.
+	 *
+	 * @return true, if is resizable
+	 */
+	public boolean isResizable() {
+		return getState(false).useResizing;
+	}
+
+	/**
+	 * True, if the children should be resizable.
+	 *
+	 * @param value the new resizable
+	 */
+	public void setResizable(boolean value) {
+		if (getState(false).useResizing != value) {
+			getState().useResizing = value;
+		}
+	}
+
+	/**
+	 * True, if alignments should be used.
+	 *
+	 * @return true, if is use alignments
+	 */
+	public boolean isUseAlignments() {
+		return getState(false).useAlignments;
+	}
+
+	/**
+	 * True, if alignments should be used.
+	 *
+	 * @param value the new use alignments
+	 */
+	public void setUseAlignments(boolean value) {
+		if (getState(false).useAlignments != value) {
+			getState().useAlignments = value;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see fi.jasoft.dragdroplayouts.DDAbsoluteLayout#setDragMode(fi.jasoft.dragdroplayouts.client.ui.LayoutDragMode)
+	 */
+	@Override
+	public void setDragMode(LayoutDragMode mode) {
+		if (mode != LayoutDragMode.NONE && mode != LayoutDragMode.CLONE) {
+			throw new IllegalArgumentException("Mode is not supported!");
+		}
+		super.setDragMode(mode);
+	}
+
+	/**
+	 * Add listener which is being notified if a child should be resized.
+	 *
+	 * @param listener the listener
+	 */
+	public void addChildResizedListener(ChildResizedListener listener) {
+		addListener(ChildResizedEvent.class, listener, ChildResizedListener.CHILD_RESIZED_METHOD);
+	}
+
+	/**
+	 * Removes listener which is being notified if a child should be resized.
+	 *
+	 * @param listener the listener
+	 */
+	public void removeChildResizedListener(ChildResizedListener listener) {
+		removeListener(ChildResizedEvent.class, listener);
+	}
+
+	/**
+	 * The Class ChildResizedEvent.
+	 */
+	public static class ChildResizedEvent extends Event {
+
+		/** The new width. */
+		private final int newWidth;
+		
+		/** The new height. */
+		private final int newHeight;
+		
+		/** The old width. */
+		private final int oldWidth;
+		
+		/** The old height. */
+		private final int oldHeight;
+		
+		/** The location. */
+		private final OResizeLocation location;
+
+		/**
+		 * Instantiates a new child resized event.
+		 *
+		 * @param source the source
+		 * @param newWidth the new width
+		 * @param newHeight the new height
+		 * @param oldWidth the old width
+		 * @param oldHeight the old height
+		 * @param location the location
+		 */
+		public ChildResizedEvent(Component source, int newWidth, int newHeight, int oldWidth, int oldHeight,
+				OResizeLocation location) {
+			super(source);
+			this.newWidth = newWidth;
+			this.newHeight = newHeight;
+			this.oldWidth = oldWidth;
+			this.oldHeight = oldHeight;
+			this.location = location;
+		}
+
+		/**
+		 * Gets the new width.
+		 *
+		 * @return the new width
+		 */
+		public int getNewWidth() {
+			return newWidth;
+		}
+
+		/**
+		 * Gets the new height.
+		 *
+		 * @return the new height
+		 */
+		public int getNewHeight() {
+			return newHeight;
+		}
+
+		/**
+		 * Gets the old width.
+		 *
+		 * @return the old width
+		 */
+		public int getOldWidth() {
+			return oldWidth;
+		}
+
+		/**
+		 * Gets the old height.
+		 *
+		 * @return the old height
+		 */
+		public int getOldHeight() {
+			return oldHeight;
+		}
+
+		/**
+		 * Gets the location.
+		 *
+		 * @return the location
+		 */
+		public OResizeLocation getLocation() {
+			return location;
+		}
+
+	}
+
+	/**
+	 * The listener interface for receiving childResized events.
+	 * The class that is interested in processing a childResized
+	 * event implements this interface, and the object created
+	 * with that class is registered with a component using the
+	 * component's <code>addChildResizedListener</code> method. When
+	 * the childResized event occurs, that object's appropriate
+	 * method is invoked.
+	 *
+	 * @see ChildResizedEvent
+	 */
+	public interface ChildResizedListener extends Serializable {
+		
+		/** The Constant CHILD_RESIZED_METHOD. */
+		public static final Method CHILD_RESIZED_METHOD = ReflectTools.findMethod(ChildResizedListener.class,
+				"childResized", ChildResizedEvent.class);
+
+		/**
+		 * Child resized.
+		 *
+		 * @param event the event
+		 */
+		void childResized(ChildResizedEvent event);
+	}
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutWidgetset.gwt.xml b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutWidgetset.gwt.xml
new file mode 100644
index 0000000..4699e48
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutWidgetset.gwt.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.5.1/distro-source/core/src/gwt-module.dtd">
+<module>
+	<inherits name="com.vaadin.DefaultWidgetSet" />
+
+	<!-- 
+	    Uncomment the following to compile the widgetset for one browser only. 
+		Multiple browsers can be specified as a comma separated list. The supported 
+		user agents at the moment of writing were: ie8,ie9,gecko1_8,safari,opera 
+		The value gecko1_8 is used for Firefox and safari is used for webkit based 
+		browsers including Google Chrome.
+   	   <set-property name="user.agent" value="safari" /> 
+
+        To enable SuperDevMode, uncomment this line. See https://vaadin.com/wiki/-/wiki/Main/Using%20SuperDevMode
+ 		for more information and instructions.
+			<set-configuration-property name="devModeRedirectEnabled" value="true" />
+		/> 
+	-->
+
+<!-- 	<add-linker name="xsiframe" /> -->
+<!-- 	<set-configuration-property name="devModeRedirectEnabled" value="true" /> -->
+
+	<inherits name="fi.jasoft.dragdroplayouts.DragDropLayoutsWidgetSet" />
+	
+	<stylesheet src="oabsolutelayout/styles.css" />
+	
+</module>
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/IOConstants.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/IOConstants.java
new file mode 100644
index 0000000..1083f19
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/IOConstants.java
@@ -0,0 +1,30 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+/**
+ * The Interface IOConstants.
+ */
+public interface IOConstants {
+	
+	/**
+	 * Divs for the resizing operations are marked with this css class.
+	 */
+	public static final String CSS_RESIZE_DIV = "o-resize-div";
+	
+	/**
+	 * Is used to define the snap css property in pixels. 
+	 */
+	public static final String CSS_SNAP_PROPERTY = "snap";
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutClientRpc.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutClientRpc.java
new file mode 100644
index 0000000..3a61e01
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutClientRpc.java
@@ -0,0 +1,37 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+import com.vaadin.shared.communication.ClientRpc;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface OAbsoluteLayoutClientRpc.
+ */
+public interface OAbsoluteLayoutClientRpc extends ClientRpc {
+
+	/**
+	 * True if alignments should be used. False otherwise.
+	 *
+	 * @param value the new use alignments
+	 */
+	public void setUseAlignments(boolean value);
+
+	/**
+	 * True if resizing should be used. False otherwise.
+	 *
+	 * @param value the new use resizing
+	 */
+	public void setUseResizing(boolean value);
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutConnector.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutConnector.java
new file mode 100644
index 0000000..a41e001
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutConnector.java
@@ -0,0 +1,104 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+import org.eclipse.osbp.vaadin.addons.absolutelayout.AbsoluteLayout;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.communication.RpcProxy;
+import com.vaadin.client.communication.StateChangeEvent;
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.ui.Connect;
+
+import fi.jasoft.dragdroplayouts.client.ui.absolutelayout.DDAbsoluteLayoutConnector;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class OAbsoluteLayoutConnector.
+ */
+@Connect(AbsoluteLayout.class)
+public class OAbsoluteLayoutConnector extends DDAbsoluteLayoutConnector implements OChildResizeListener {
+
+	/** The Constant serialVersionUID. */
+	private static final long serialVersionUID = -3501965859455838012L;
+
+	/** The rpc. */
+	OAbsoluteLayoutServerRpc rpc = RpcProxy.create(OAbsoluteLayoutServerRpc.class, this);
+	
+	/**
+	 * Instantiates a new o absolute layout connector.
+	 */
+	public OAbsoluteLayoutConnector() {
+		registerRpc(OAbsoluteLayoutClientRpc.class, new OAbsoluteLayoutClientRpc() {
+			private static final long serialVersionUID = 8264383260169834245L;
+
+			@Override
+			public void setUseAlignments(boolean value) {
+				getWidget().setUseAlignments(value);
+			}
+
+			@Override
+			public void setUseResizing(boolean value) {
+				getWidget().setUseResizing(value);
+			}
+		});
+	}
+
+	/* (non-Javadoc)
+	 * @see com.vaadin.client.ui.AbstractComponentConnector#createWidget()
+	 */
+	@Override
+	protected Widget createWidget() {
+		OAbsoluteLayoutWidget widget = GWT.create(OAbsoluteLayoutWidget.class);
+		widget.setResizeListener(this);
+		return widget;
+	}
+
+	/* (non-Javadoc)
+	 * @see fi.jasoft.dragdroplayouts.client.ui.absolutelayout.DDAbsoluteLayoutConnector#getWidget()
+	 */
+	@Override
+	public OAbsoluteLayoutWidget getWidget() {
+		return (OAbsoluteLayoutWidget) super.getWidget();
+	}
+
+	/* (non-Javadoc)
+	 * @see fi.jasoft.dragdroplayouts.client.ui.absolutelayout.DDAbsoluteLayoutConnector#getState()
+	 */
+	@Override
+	public OAbsoluteLayoutState getState() {
+		return (OAbsoluteLayoutState) super.getState();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.vaadin.client.ui.absolutelayout.AbsoluteLayoutConnector#onStateChanged(com.vaadin.client.communication.StateChangeEvent)
+	 */
+	@Override
+	public void onStateChanged(StateChangeEvent stateChangeEvent) {
+		super.onStateChanged(stateChangeEvent);
+
+		getWidget().setUseAlignments(getState().useAlignments);
+		getWidget().setUseResizing(getState().useResizing);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.osbp.vaadin.addons.absolutelayout.client.OChildResizeListener#resized(com.vaadin.shared.Connector, int, int, int, int, org.eclipse.osbp.vaadin.addons.absolutelayout.client.OResizeLocation)
+	 */
+	@Override
+	public void resized(Connector child, int newWidth, int newHeight, int oldWidth, int oldHeight,
+			OResizeLocation location) {
+		rpc.resized(child, newWidth, newHeight, oldWidth, oldHeight, location);
+	}
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutServerRpc.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutServerRpc.java
new file mode 100644
index 0000000..a3cc7a2
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutServerRpc.java
@@ -0,0 +1,38 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+import com.vaadin.shared.Connector;
+import com.vaadin.shared.communication.ServerRpc;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface OAbsoluteLayoutServerRpc.
+ */
+public interface OAbsoluteLayoutServerRpc extends ServerRpc {
+
+	/**
+	 * Is called if the given connector was resized. So the server layout needs
+	 * to update the position of the child.
+	 *
+	 * @param connector the connector
+	 * @param newWidth the new width
+	 * @param newHeight the new height
+	 * @param oldWidth the old width
+	 * @param oldHeight the old height
+	 * @param location the location
+	 */
+	void resized(Connector connector, int newWidth, int newHeight, int oldWidth, int oldHeight,
+			OResizeLocation location);
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutState.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutState.java
new file mode 100644
index 0000000..d267cdb
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutState.java
@@ -0,0 +1,30 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class OAbsoluteLayoutState.
+ */
+public class OAbsoluteLayoutState extends fi.jasoft.dragdroplayouts.client.ui.absolutelayout.DDAbsoluteLayoutState {
+
+	/** The Constant serialVersionUID. */
+	private static final long serialVersionUID = -138381612142479069L;
+
+	/** The use alignments. */
+	public boolean useAlignments;
+	
+	/** The use resizing. */
+	public boolean useResizing;
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutWidget.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutWidget.java
new file mode 100644
index 0000000..dfe0d3f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAbsoluteLayoutWidget.java
@@ -0,0 +1,953 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.EventTarget;
+import com.google.gwt.dom.client.NativeEvent;
+import com.google.gwt.dom.client.Style;
+import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.Event.NativePreviewEvent;
+import com.google.gwt.user.client.Event.NativePreviewHandler;
+import com.google.gwt.user.client.EventListener;
+import com.google.gwt.user.client.ui.Widget;
+import com.google.gwt.user.client.ui.WidgetCollection;
+import com.vaadin.client.ComponentConnector;
+import com.vaadin.client.Util;
+import com.vaadin.client.WidgetUtil;
+import com.vaadin.client.ui.dd.VDragEvent;
+
+import fi.jasoft.dragdroplayouts.client.ui.absolutelayout.VDDAbsoluteLayout;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Absolute layout widget that supports drag and drop, resizing and alignment.
+ */
+public class OAbsoluteLayoutWidget extends VDDAbsoluteLayout {
+
+	/** The Constant CLASSNAME. */
+	public static final String CLASSNAME = "o-absolutelayout";
+
+	/** The resize listener. */
+	protected OChildResizeListener resizeListener;
+
+	/** The use resizing. */
+	protected boolean useResizing;
+
+	/**
+	 * Instantiates a new o absolute layout widget.
+	 */
+	public OAbsoluteLayoutWidget() {
+		addStyleName(CLASSNAME);
+	}
+
+	/* (non-Javadoc)
+	 * @see fi.jasoft.dragdroplayouts.client.ui.absolutelayout.VDDAbsoluteLayout#postDropHook(com.vaadin.client.ui.dd.VDragEvent)
+	 */
+	@Override
+	protected boolean postDropHook(VDragEvent drag) {
+		boolean result = super.postDropHook(drag);
+
+		OAlignmentManager.get().updateDropDetails(drag);
+		OAlignmentManager.get().stop();
+
+		return result;
+	}
+
+	/* (non-Javadoc)
+	 * @see fi.jasoft.dragdroplayouts.client.ui.absolutelayout.VDDAbsoluteLayout#postEnterHook(com.vaadin.client.ui.dd.VDragEvent)
+	 */
+	@Override
+	protected void postEnterHook(VDragEvent drag) {
+		super.postEnterHook(drag);
+
+		updateDrag(drag);
+	}
+
+	/* (non-Javadoc)
+	 * @see fi.jasoft.dragdroplayouts.client.ui.absolutelayout.VDDAbsoluteLayout#postLeaveHook(com.vaadin.client.ui.dd.VDragEvent)
+	 */
+	@Override
+	protected void postLeaveHook(VDragEvent drag) {
+		super.postLeaveHook(drag);
+
+		updateDrag(drag);
+	}
+
+	/* (non-Javadoc)
+	 * @see fi.jasoft.dragdroplayouts.client.ui.absolutelayout.VDDAbsoluteLayout#postOverHook(com.vaadin.client.ui.dd.VDragEvent)
+	 */
+	@Override
+	protected void postOverHook(VDragEvent drag) {
+		super.postOverHook(drag);
+
+		updateDrag(drag);
+	}
+
+	/**
+	 * Updates the drag information and alignments.
+	 *
+	 * @param drag the drag
+	 */
+	private void updateDrag(VDragEvent drag) {
+		if (!OAlignmentManager.get().isActive()) {
+			OAlignmentManager.get().startDragAndDrop(this);
+		}
+		OAlignmentManager.get().updateAlignmentsForDrop(drag);
+	}
+
+	/**
+	 * True, if alignments should be used. False otherwise.
+	 *
+	 * @param useAlignments the new use alignments
+	 */
+	public void setUseAlignments(boolean useAlignments) {
+		OAlignmentManager.get().setUseAlignments(useAlignments);
+	}
+
+	/**
+	 * True, if resizing should be used. False otherwise.
+	 *
+	 * @param useResizing the new use resizing
+	 */
+	public void setUseResizing(boolean useResizing) {
+		this.useResizing = useResizing;
+
+		for (Widget child : getChildren()) {
+			if (child instanceof ResizableAbsoluteWrapper) {
+				ResizableAbsoluteWrapper wrapper = (ResizableAbsoluteWrapper) child;
+				wrapper.setResizable(useResizing);
+			}
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see com.google.gwt.user.client.ui.ComplexPanel#getChildren()
+	 */
+	public WidgetCollection getChildren() {
+		return super.getChildren();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.vaadin.client.ui.VAbsoluteLayout#add(com.google.gwt.user.client.ui.Widget)
+	 */
+	@Override
+	public void add(Widget child) {
+		ResizableAbsoluteWrapper wrapper = new ResizableAbsoluteWrapper(child);
+		super.add(wrapper, canvas);
+	}
+
+	/**
+	 * Returns true, if alignments are used. False otherwise.
+	 *
+	 * @return true, if is use alignments
+	 */
+	public boolean isUseAlignments() {
+		return OAlignmentManager.get().isUseAlignments();
+	}
+
+	/**
+	 * Sets the resize listener.
+	 *
+	 * @param resizeListener the new resize listener
+	 */
+	public void setResizeListener(OChildResizeListener resizeListener) {
+		this.resizeListener = resizeListener;
+	}
+
+	/**
+	 * The Class ResizeHandler.
+	 */
+	protected static class ResizeHandler implements EventListener {
+
+		/** The wrapper. */
+		protected final ResizableAbsoluteWrapper wrapper;
+
+		/** The start client x. */
+		protected int startClientX = 0;
+		
+		/** The start client y. */
+		protected int startClientY = 0;
+		
+		/** The start width. */
+		protected int startWidth = 0;
+		
+		/** The start height. */
+		protected int startHeight = 0;
+		
+		/** The resizing x. */
+		protected boolean resizingX;
+		
+		/** The revert x. */
+		protected boolean revertX;
+		
+		/** The revert y. */
+		protected boolean revertY;
+		
+		/** The resizing y. */
+		protected boolean resizingY;
+
+		/** The dragged element. */
+		// TODO remove me later -> Same as wrapper?
+		protected Element draggedElement;
+		
+		/** The waiting accept. */
+		protected boolean waitingAccept;
+		
+		/** The cancel listener registration. */
+		protected HandlerRegistration cancelListenerRegistration;
+		
+		/** The resize canceled. */
+		protected boolean resizeCanceled;
+
+		/** The keep aspect ratio. */
+		protected boolean keepAspectRatio;
+
+		/** The old width. */
+		protected int oldWidth;
+		
+		/** The old height. */
+		protected int oldHeight;
+		
+		/** The resize location. */
+		protected OResizeLocation resizeLocation;
+
+		/** The Constant locationToCursorMap. */
+		@SuppressWarnings("serial")
+		protected static final Map<OResizeLocation, String> locationToCursorMap = new HashMap<OResizeLocation, String>() {
+			{
+				// put(CResizeLocation.TOP_LEFT, "nwse-resize");
+				put(OResizeLocation.TOP, "ns-resize");
+				// put(CResizeLocation.TOP_RIGHT, "nesw-resize");
+				put(OResizeLocation.RIGHT, "ew-resize");
+				// put(CResizeLocation.BOTTOM_RIGHT, "nwse-resize");
+				put(OResizeLocation.BOTTOM, "ns-resize");
+				// put(CResizeLocation.BOTTOM_LEFT, "nesw-resize");
+				put(OResizeLocation.LEFT, "ew-resize");
+			}
+		};
+
+		/**
+		 * Instantiates a new resize handler.
+		 *
+		 * @param wrapper the wrapper
+		 */
+		public ResizeHandler(ResizableAbsoluteWrapper wrapper) {
+			this.wrapper = wrapper;
+		}
+
+		/* (non-Javadoc)
+		 * @see com.google.gwt.user.client.EventListener#onBrowserEvent(com.google.gwt.user.client.Event)
+		 */
+		@Override
+		public void onBrowserEvent(Event event) {
+			final EventTarget currentTarget = event.getCurrentEventTarget();
+			final Element target = currentTarget.cast();
+			final Element targetParent = target.getParentElement();
+			if (resizingX || resizingY || wrapper.getElement().equals(targetParent)
+					|| (targetParent != null && wrapper.getElement().equals(targetParent.getParentElement()))) {
+				switch (event.getTypeInt()) {
+				case Event.ONMOUSEMOVE:
+					onMouseMove(event);
+					break;
+				case Event.ONMOUSEDOWN:
+					onResizeStart(event, target);
+					break;
+				case Event.ONMOUSEUP:
+					onResizeEnd(event);
+					break;
+				default:
+					break;
+				}
+			} else if (resizeCanceled && event.getTypeInt() == Event.ONMOUSEUP) {
+				event.preventDefault();
+				event.stopPropagation();
+			}
+		}
+
+		/**
+		 * On mouse move.
+		 *
+		 * @param event the event
+		 */
+		protected void onMouseMove(Event event) {
+			if (!resizingX && !resizingY) {
+				return;
+			}
+
+			double height = -1.0;
+			double width = -1.0;
+
+			if (resizingY) {
+				int clientY = WidgetUtil.getTouchOrMouseClientY(event);
+				if (!isInVerticalBoundary(event)) {
+					// set the size to the edge of the boundary element
+					clientY = clientY < wrapper.getElement().getAbsoluteTop()
+							? (wrapper.getElement().getAbsoluteTop() + 2)
+							: (wrapper.getElement().getAbsoluteBottom() - 2);
+				}
+				int extraScrollHeight = wrapper.getElement() == null ? 0 : wrapper.getElement().getScrollTop();
+				height = startHeight + extraScrollHeight + (revertY ? startClientY - clientY : clientY - startClientY);
+				event.stopPropagation();
+			}
+
+			if (resizingX) {
+				int clientX = WidgetUtil.getTouchOrMouseClientX(event);
+				if (!isInHorizontalBoundary(event)) {
+					// set the size to the edge of the boundary element
+					clientX = clientX < wrapper.getElement().getAbsoluteLeft()
+							? (wrapper.getElement().getAbsoluteLeft() + 2)
+							: (wrapper.getElement().getAbsoluteRight() - 2);
+				}
+				int extraScrollWidth = wrapper.getElement() == null ? 0 : wrapper.getElement().getScrollLeft();
+				width = startWidth + extraScrollWidth + (revertX ? startClientX - clientX : clientX - startClientX);
+				event.stopPropagation();
+			}
+
+			if (keepAspectRatio && (height > -1.0 || width > 1.0)) {
+				final double wRatio = width / startWidth;
+				final double hRatio = height / startHeight;
+
+				if (height == -1.0) {
+					height = startHeight * wRatio;
+				} else if (width == -1.0) {
+					width = startWidth * hRatio;
+				} else {
+					if (wRatio < hRatio) {
+						height = startHeight * wRatio;
+					} else {
+						width = startWidth * hRatio;
+					}
+
+				}
+
+				wrapper.dragOverlayElement.getStyle().setHeight(height, Unit.PX);
+				wrapper.dragOverlayElement.getStyle().setWidth(width, Unit.PX);
+			}
+
+			if (height > -1.0) {
+				wrapper.dragOverlayElement.getStyle().setHeight(height, Unit.PX);
+			}
+			if (width > -1.0) {
+				wrapper.dragOverlayElement.getStyle().setWidth(width, Unit.PX);
+			}
+
+			// notify about resizing
+			wrapper.notifyResizing((int) width, (int) height, oldWidth, oldHeight, resizeLocation, draggedElement,
+					wrapper.dragOverlayElement);
+
+		}
+
+		/**
+		 * Checks if is in horizontal boundary.
+		 *
+		 * @param event the event
+		 * @return true, if is in horizontal boundary
+		 */
+		protected boolean isInHorizontalBoundary(Event event) {
+			if (wrapper.getParent().getElement() != null) {
+				int clientX = event.getClientX();
+				int right = wrapper.getParent().getElement().getAbsoluteRight() - 1;
+				int left = wrapper.getParent().getElement().getAbsoluteLeft() + 1;
+				return clientX > left && clientX < right;
+			}
+			return true;
+		}
+
+		/**
+		 * Checks if is in vertical boundary.
+		 *
+		 * @param event the event
+		 * @return true, if is in vertical boundary
+		 */
+		protected boolean isInVerticalBoundary(Event event) {
+			if (wrapper.getParent().getElement() != null) {
+				int clientY = event.getClientY();
+				int top = wrapper.getParent().getElement().getAbsoluteTop() + 1;
+				int bottom = wrapper.getParent().getElement().getAbsoluteBottom() - 1;
+				return clientY > top && clientY < bottom;
+			}
+			return true;
+		}
+
+		/**
+		 * Override cursor.
+		 *
+		 * @param location the location
+		 */
+		protected void overrideCursor(OResizeLocation location) {
+			String cursorValue = locationToCursorMap.get(location);
+			if (wrapper.getElement() != null) {
+				wrapper.getElement().getStyle().setProperty("cursor", cursorValue);
+			}
+			wrapper.dragOverlayElement.getStyle().setProperty("cursor", cursorValue);
+		}
+
+		/**
+		 * Stop cursor override.
+		 */
+		protected void stopCursorOverride() {
+			if (wrapper.getElement() != null) {
+				wrapper.getElement().getStyle().clearCursor();
+			}
+			wrapper.dragOverlayElement.getStyle().clearCursor();
+		}
+
+		/**
+		 * Mark boundary resizing.
+		 */
+		protected void markBoundaryResizing() {
+			if (wrapper.getElement() != null) {
+				wrapper.getElement().addClassName("resizing-child");
+			}
+		}
+
+		/**
+		 * Unmark boundary resizing.
+		 */
+		protected void unmarkBoundaryResizing() {
+			if (wrapper.getElement() != null) {
+				wrapper.getElement().removeClassName("resizing-child");
+			}
+		}
+
+		/**
+		 * Accept resize.
+		 *
+		 * @param accept the accept
+		 */
+		protected void acceptResize(boolean accept) {
+			if (waitingAccept) {
+				waitingAccept = false;
+				OAlignmentManager.get().updateResizedWidget(accept, oldWidth, oldHeight);
+				OAlignmentManager.get().stop();
+
+				resizingX = false;
+				resizingY = false;
+				draggedElement = null;
+				wrapper.dragOverlayElement.removeFromParent();
+				Style style = wrapper.dragOverlayElement.getStyle();
+				style.clearTop();
+				style.clearRight();
+				style.clearBottom();
+				style.clearLeft();
+				style.clearHeight();
+				style.clearWidth();
+				startClientX = 0;
+				startClientY = 0;
+				startHeight = 0;
+				startWidth = 0;
+
+				oldWidth = 0;
+				oldHeight = 0;
+				resizeLocation = null;
+
+				wrapper.getElement().removeClassName("resizing");
+			}
+		}
+
+		/**
+		 * On resize end.
+		 *
+		 * @param event the event
+		 */
+		protected void onResizeEnd(Event event) {
+			if (resizingX || resizingY) {
+				resizingX = false;
+				resizingY = false;
+				waitingAccept = true;
+
+				keepAspectRatio = false;
+
+				Event.releaseCapture(draggedElement);
+				event.stopPropagation();
+
+				stopCursorOverride();
+				unmarkBoundaryResizing();
+
+				acceptResize(true);
+			}
+		}
+
+		/**
+		 * On resize start.
+		 *
+		 * @param event the event
+		 * @param target the target
+		 */
+		protected void onResizeStart(Event event, Element target) {
+			if (!(resizingX || resizingY || waitingAccept)) {
+				resizeCanceled = false;
+				keepAspectRatio = false;
+				draggedElement = target;
+				// startWidth =
+				// WidgetUtil.getRequiredWidth(wrapper.getElement());
+				// startHeight =
+				// WidgetUtil.getRequiredHeight(wrapper.getElement());
+				startWidth = wrapper.getElement().getOffsetWidth();
+				startHeight = wrapper.getElement().getOffsetHeight();
+				if (target.equals(wrapper.topEdge) || target.equals(wrapper.bottomEdge)) {
+					resizeLocation = startVerticalResize(event, target);
+				} else if (target.equals(wrapper.leftEdge) || target.equals(wrapper.rightEdge)) {
+					resizeLocation = startHorizontalResize(event, target);
+				}
+				// else {
+				// resizeLocation = startDiagonalResize(event, target);
+				// }
+
+				// initialize the old values
+				oldWidth = wrapper.getElement().getOffsetWidth();
+				oldHeight = wrapper.getElement().getOffsetHeight();
+
+				wrapper.getElement().addClassName("resizing");
+				wrapper.getElement().appendChild(wrapper.dragOverlayElement);
+				Event.setCapture(draggedElement);
+				event.stopPropagation();
+
+				overrideCursor(resizeLocation);
+				markBoundaryResizing();
+				listenToKeyboard();
+
+				OAlignmentManager.get().startResize((OAbsoluteLayoutWidget) wrapper.getParent(), wrapper,
+						resizeLocation, wrapper.dragOverlayElement);
+			}
+		}
+
+		/**
+		 * Listen to keyboard.
+		 */
+		protected void listenToKeyboard() {
+			cancelListenerRegistration = Event.addNativePreviewHandler(new NativePreviewHandler() {
+
+				@Override
+				public void onPreviewNativeEvent(NativePreviewEvent event) {
+					if (event.getTypeInt() == Event.ONKEYDOWN && (resizingX || resizingY)) {
+						final int keyCode = event.getNativeEvent().getKeyCode();
+						if (keyCode == KeyCodes.KEY_ESCAPE) {
+							onResizeCancel(event.getNativeEvent());
+						} else if (keyCode == KeyCodes.KEY_SHIFT) {
+							keepAspectRatio = true;
+						}
+					} else if (event.getTypeInt() == Event.ONKEYUP && (resizingX || resizingY)) {
+						final int keyCode = event.getNativeEvent().getKeyCode();
+						if (keyCode == KeyCodes.KEY_SHIFT) {
+							keepAspectRatio = false;
+						}
+					}
+				}
+			});
+		}
+
+		/**
+		 * On resize cancel.
+		 *
+		 * @param event the event
+		 */
+		protected void onResizeCancel(NativeEvent event) {
+			if (cancelListenerRegistration != null) {
+				cancelListenerRegistration.removeHandler();
+			}
+			Event.releaseCapture(draggedElement);
+			event.stopPropagation();
+			event.preventDefault();
+
+			resizeCanceled = true;
+			waitingAccept = true;
+			acceptResize(false);
+
+			keepAspectRatio = false;
+
+			stopCursorOverride();
+			unmarkBoundaryResizing();
+		}
+
+		// protected CResizeLocation startDiagonalResize(Event event, Element
+		// target) {
+		// CResizeLocation resizeLocation;
+		// resizingX = true;
+		// resizingY = true;
+		//
+		// Style style = wrapper.dragOverlayElement.getStyle();
+		// startClientY = WidgetUtil.getTouchOrMouseClientY(event);
+		// style.setHeight(startHeight, Unit.PX);
+		// startClientX = WidgetUtil.getTouchOrMouseClientX(event);
+		// style.setWidth(startWidth, Unit.PX);
+		//
+		// if (target.equals(wrapper.topLeftCorner) ||
+		// target.equals(wrapper.topRightCorner)) {
+		// revertY = true;
+		// style.setBottom(0, Unit.PX);
+		// resizeLocation = target.equals(wrapper.topLeftCorner) ?
+		// CResizeLocation.TOP_LEFT
+		// : CResizeLocation.TOP_RIGHT;
+		// } else {
+		// revertY = false;
+		// style.setTop(0, Unit.PX);
+		// resizeLocation = target.equals(wrapper.bottomRightCorner) ?
+		// CResizeLocation.BOTTOM_RIGHT
+		// : CResizeLocation.BOTTOM_LEFT;
+		// }
+		// if (target.equals(wrapper.topLeftCorner) ||
+		// target.equals(wrapper.bottomLeftCorner)) {
+		// revertX = true;
+		// style.setRight(0, Unit.PX);
+		// } else {
+		// revertX = false;
+		// style.setLeft(0, Unit.PX);
+		// }
+		// return resizeLocation;
+		// }
+
+		/**
+		 * Start vertical resize.
+		 *
+		 * @param event the event
+		 * @param target the target
+		 * @return the o resize location
+		 */
+		protected OResizeLocation startVerticalResize(Event event, Element target) {
+			OResizeLocation resizeLocation;
+			resizingY = true;
+			Style style = wrapper.dragOverlayElement.getStyle();
+			startClientY = WidgetUtil.getTouchOrMouseClientY(event);
+			style.setHeight(startHeight, Unit.PX);
+
+			if (target.equals(wrapper.topEdge)) {
+				revertY = true;
+				style.setBottom(0, Unit.PX);
+				resizeLocation = OResizeLocation.TOP;
+			} else {
+				revertY = false;
+				style.setTop(0, Unit.PX);
+				resizeLocation = OResizeLocation.BOTTOM;
+			}
+			style.setLeft(0, Unit.PX);
+			style.setRight(0, Unit.PX);
+			return resizeLocation;
+		}
+
+		/**
+		 * Start horizontal resize.
+		 *
+		 * @param event the event
+		 * @param target the target
+		 * @return the o resize location
+		 */
+		protected OResizeLocation startHorizontalResize(Event event, Element target) {
+			OResizeLocation resizeLocation;
+			resizingX = true;
+			Style style = wrapper.dragOverlayElement.getStyle();
+			startClientX = WidgetUtil.getTouchOrMouseClientX(event);
+			style.setWidth(startWidth, Unit.PX);
+
+			if (target.equals(wrapper.leftEdge)) {
+				revertX = true;
+				style.setRight(0, Unit.PX);
+				resizeLocation = OResizeLocation.LEFT;
+			} else {
+				revertX = false;
+				style.setLeft(0, Unit.PX);
+				resizeLocation = OResizeLocation.RIGHT;
+			}
+			style.setTop(0, Unit.PX);
+			style.setBottom(0, Unit.PX);
+			return resizeLocation;
+		}
+
+	}
+
+	/**
+	 * The Class ResizableAbsoluteWrapper.
+	 */
+	public class ResizableAbsoluteWrapper extends AbsoluteWrapper {
+
+		/** The Constant O_RESIZABLE_STYLE_NAME. */
+		protected static final String O_RESIZABLE_STYLE_NAME = "o-resizable";
+
+		/** The Constant DEFAULT_DRAG_SIZE_PIXELS. */
+		protected static final int DEFAULT_DRAG_SIZE_PIXELS = 10;
+
+		// protected Element topLeftCorner;
+		// protected Element topRightCorner;
+		// protected Element bottomLeftCorner;
+		/** The top edge. */
+		// protected Element bottomRightCorner;
+		protected Element topEdge;
+		
+		/** The right edge. */
+		protected Element rightEdge;
+		
+		/** The bottom edge. */
+		protected Element bottomEdge;
+		
+		/** The left edge. */
+		protected Element leftEdge;
+		
+		/** The drag overlay element. */
+		protected Element dragOverlayElement;
+
+		/** The drag size pixels. */
+		protected int dragSizePixels;
+
+		/** The resizable. */
+		protected boolean resizable;
+		
+		/** The resize handler. */
+		protected ResizeHandler resizeHandler;
+
+		/**
+		 * Instantiates a new resizable absolute wrapper.
+		 *
+		 * @param child the child
+		 */
+		public ResizableAbsoluteWrapper(Widget child) {
+			super(child);
+
+			resizeHandler = new ResizeHandler(this);
+
+			child.addStyleName(O_RESIZABLE_STYLE_NAME);
+			// getElement().addClassName("resizable");
+
+			initDOM();
+			initListeners();
+			setResizeLocationSize(DEFAULT_DRAG_SIZE_PIXELS);
+		}
+
+		/**
+		 * Notify resized.
+		 *
+		 * @param width the width
+		 * @param height the height
+		 * @param oldWidth the old width
+		 * @param oldHeight the old height
+		 * @param location the location
+		 */
+		public void notifyResized(int width, int height, int oldWidth, int oldHeight, OResizeLocation location) {
+			ComponentConnector c = Util.findConnectorFor(getWidget());
+			resizeListener.resized(c, width, height, oldWidth, oldHeight, location);
+			OAlignmentManager.get().resetAlignments();
+		}
+
+		/**
+		 * Notify resizing.
+		 *
+		 * @param width the width
+		 * @param height the height
+		 * @param oldWidth the old width
+		 * @param oldHeight the old height
+		 * @param location the location
+		 * @param draggedElement the dragged element
+		 * @param dragOverlayElement the drag overlay element
+		 */
+		public void notifyResizing(int width, int height, int oldWidth, int oldHeight, OResizeLocation location,
+				Element draggedElement, Element dragOverlayElement) {
+			OAlignmentManager.get().updateAlignmentsForResize(draggedElement, dragOverlayElement);
+		}
+
+		/**
+		 * Notify resizing cancel.
+		 */
+		public void notifyResizingCancel() {
+			OAlignmentManager.get().resetAlignments();
+		}
+
+		/**
+		 * Inits the dom.
+		 */
+		protected void initDOM() {
+			// topLeftCorner = DOM.createDiv();
+			// topLeftCorner.addClassName("tlc");
+			// topLeftCorner.addClassName(ICConstants.RESIZE_DIV);
+			// topRightCorner = DOM.createDiv();
+			// topRightCorner.addClassName("trc");
+			// topRightCorner.addClassName(ICConstants.RESIZE_DIV);
+			// bottomLeftCorner = DOM.createDiv();
+			// bottomLeftCorner.addClassName("blc");
+			// bottomLeftCorner.addClassName(ICConstants.RESIZE_DIV);
+			// bottomRightCorner = DOM.createDiv();
+			// bottomRightCorner.addClassName("brc");
+			// bottomRightCorner.addClassName(ICConstants.RESIZE_DIV);
+
+			topEdge = DOM.createDiv();
+			topEdge.addClassName("te");
+			topEdge.addClassName(IOConstants.CSS_RESIZE_DIV);
+			rightEdge = DOM.createDiv();
+			rightEdge.addClassName("re");
+			rightEdge.addClassName(IOConstants.CSS_RESIZE_DIV);
+			bottomEdge = DOM.createDiv();
+			bottomEdge.addClassName("be");
+			bottomEdge.addClassName(IOConstants.CSS_RESIZE_DIV);
+			leftEdge = DOM.createDiv();
+			leftEdge.addClassName("le");
+			leftEdge.addClassName(IOConstants.CSS_RESIZE_DIV);
+
+			dragOverlayElement = DOM.createDiv();
+			dragOverlayElement.addClassName("drag-overlay");
+
+			// topEdge.appendChild(topLeftCorner);
+			// topEdge.appendChild(topRightCorner);
+
+			// bottomEdge.appendChild(bottomLeftCorner);
+			// bottomEdge.appendChild(bottomRightCorner);
+
+			setResizable(true);
+		}
+
+		/**
+		 * Inits the listeners.
+		 */
+		protected void initListeners() {
+			// Event.sinkEvents(topLeftCorner, Event.MOUSEEVENTS);
+			// Event.sinkEvents(topRightCorner, Event.MOUSEEVENTS);
+			// Event.sinkEvents(bottomLeftCorner, Event.MOUSEEVENTS);
+			// Event.sinkEvents(bottomRightCorner, Event.MOUSEEVENTS);
+			Event.sinkEvents(topEdge, Event.MOUSEEVENTS);
+			Event.sinkEvents(rightEdge, Event.MOUSEEVENTS);
+			Event.sinkEvents(bottomEdge, Event.MOUSEEVENTS);
+			Event.sinkEvents(leftEdge, Event.MOUSEEVENTS);
+		}
+
+		/**
+		 * Set the size of the resize locations in pixels. This will be the
+		 * width&amp;height for the corner locations, width for the left&amp;right
+		 * sides, and height for the top&amp;bottom sides.
+		 * <p>
+		 * Default size is {@value #DEFAULT_DRAG_SIZE_PIXELS}.
+		 *
+		 * @param resizeLocationSize the new resize location size
+		 */
+		public void setResizeLocationSize(int resizeLocationSize) {
+			if (dragSizePixels != resizeLocationSize) {
+				dragSizePixels = resizeLocationSize;
+				// topLeftCorner.getStyle().setHeight(resizeLocationSize,
+				// Unit.PX);
+				// topLeftCorner.getStyle().setWidth(resizeLocationSize,
+				// Unit.PX);
+				// topRightCorner.getStyle().setHeight(resizeLocationSize,
+				// Unit.PX);
+				// topRightCorner.getStyle().setWidth(resizeLocationSize,
+				// Unit.PX);
+				// bottomLeftCorner.getStyle().setHeight(resizeLocationSize,
+				// Unit.PX);
+				// bottomLeftCorner.getStyle().setWidth(resizeLocationSize,
+				// Unit.PX);
+				// bottomRightCorner.getStyle().setHeight(resizeLocationSize,
+				// Unit.PX);
+				// bottomRightCorner.getStyle().setWidth(resizeLocationSize,
+				// Unit.PX);
+
+				topEdge.getStyle().setHeight(resizeLocationSize, Unit.PX);
+				rightEdge.getStyle().setWidth(resizeLocationSize, Unit.PX);
+				bottomEdge.getStyle().setHeight(resizeLocationSize, Unit.PX);
+				leftEdge.getStyle().setWidth(resizeLocationSize, Unit.PX);
+
+				int negativeMargin = new BigDecimal(resizeLocationSize).divideToIntegralValue(new BigDecimal(2))
+						.negate().intValueExact();
+				// topLeftCorner.getStyle().setMarginLeft(negativeMargin,
+				// Unit.PX);
+				// topRightCorner.getStyle().setMarginRight(negativeMargin,
+				// Unit.PX);
+				// bottomRightCorner.getStyle().setMarginRight(negativeMargin,
+				// Unit.PX);
+				// bottomLeftCorner.getStyle().setMarginLeft(negativeMargin,
+				// Unit.PX);
+				topEdge.getStyle().setMarginTop(negativeMargin, Unit.PX);
+				rightEdge.getStyle().setMarginRight(negativeMargin, Unit.PX);
+				bottomEdge.getStyle().setMarginBottom(negativeMargin, Unit.PX);
+				leftEdge.getStyle().setMarginLeft(negativeMargin, Unit.PX);
+			}
+		}
+
+		/**
+		 * Trigger the resizable mode for the component.
+		 *
+		 * @param resizable the new resizable
+		 */
+		public void setResizable(boolean resizable) {
+			if (this.resizable != resizable) {
+				this.resizable = resizable;
+				if (resizable) {
+					enableResize(topEdge);
+					enableResize(leftEdge);
+					enableResize(rightEdge);
+					enableResize(bottomEdge);
+					getElement().addClassName(O_RESIZABLE_STYLE_NAME);
+				} else {
+					disableResize(topEdge);
+					disableResize(leftEdge);
+					disableResize(rightEdge);
+					disableResize(bottomEdge);
+					getElement().removeClassName(O_RESIZABLE_STYLE_NAME);
+				}
+			}
+		}
+
+		/**
+		 * Enable resize.
+		 *
+		 * @param element the element
+		 */
+		protected void enableResize(Element element) {
+			getElement().appendChild(element);
+			Event.setEventListener(element, resizeHandler);
+		}
+
+		/**
+		 * Disable resize.
+		 *
+		 * @param element the element
+		 */
+		protected void disableResize(Element element) {
+			getElement().removeChild(element);
+			Event.setEventListener(element, null);
+		}
+
+		/**
+		 * Is the component in resizable mode.
+		 *
+		 * @return the resizable
+		 */
+		public boolean getResizable() {
+			return resizable;
+		}
+
+		/* (non-Javadoc)
+		 * @see com.vaadin.client.ui.VAbsoluteLayout.AbsoluteWrapper#setWrapperStyleNames(java.lang.String[])
+		 */
+		public void setWrapperStyleNames(String... stylenames) {
+			List<String> styles = stylenames != null ? new ArrayList<String>(Arrays.asList(stylenames)) : new ArrayList<String>();
+			styles.add(O_RESIZABLE_STYLE_NAME);
+			super.setWrapperStyleNames(styles.toArray(new String[styles.size()]));
+		}
+
+		/* (non-Javadoc)
+		 * @see com.vaadin.client.ui.VAbsoluteLayout.AbsoluteWrapper#destroy()
+		 */
+		public void destroy() {
+			setResizable(false);
+
+			super.destroy();
+		}
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentManager.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentManager.java
new file mode 100644
index 0000000..11d10c3
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentManager.java
@@ -0,0 +1,536 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.eclipse.osbp.vaadin.addons.absolutelayout.client.OAlignmentOverlay.AlignmentsLocation;
+
+import com.google.gwt.core.client.Scheduler;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.ui.dd.VDragEvent;
+
+import fi.jasoft.dragdroplayouts.client.ui.Constants;
+
+// TODO: Auto-generated Javadoc
+/**
+ * This class handles alignments for drag and drop and resize operations.
+ */
+public class OAlignmentManager {
+
+	/** The manager. */
+	private static OAlignmentManager manager;
+
+	/** The alignments. */
+	protected Set<OAlignmentOverlay> alignments = new HashSet<>();
+	
+	/** The snap. */
+	protected int snap = 4;
+
+	/** The layout. */
+	private OAbsoluteLayoutWidget layout;
+	
+	/** The snap info. */
+	private OAlignmentSnapInfo snapInfo;
+	
+	/** The resizing widget. */
+	private OAbsoluteLayoutWidget.ResizableAbsoluteWrapper resizingWidget;
+	
+	/** The resizing overlay. */
+	private Element resizingOverlay;
+	
+	/** The resize location. */
+	private OResizeLocation resizeLocation;
+
+	/** The use alignments. */
+	private boolean useAlignments;
+
+	/**
+	 * Instantiates a new o alignment manager.
+	 */
+	private OAlignmentManager() {
+
+	}
+
+	/**
+	 * Gets the.
+	 *
+	 * @return the o alignment manager
+	 */
+	public static OAlignmentManager get() {
+		if (manager == null) {
+			manager = new OAlignmentManager();
+		}
+		return manager;
+	}
+
+	/**
+	 * Start.
+	 *
+	 * @param layout the layout
+	 */
+	protected void start(OAbsoluteLayoutWidget layout) {
+		this.layout = layout;
+	}
+
+	/**
+	 * Start drag and drop.
+	 *
+	 * @param layout the layout
+	 */
+	public void startDragAndDrop(OAbsoluteLayoutWidget layout) {
+		start(layout);
+	}
+
+	/**
+	 * Start resize.
+	 *
+	 * @param layout the layout
+	 * @param resizingWidget the resizing widget
+	 * @param resizeLocation the resize location
+	 * @param resizingOverlay the resizing overlay
+	 */
+	public void startResize(OAbsoluteLayoutWidget layout, OAbsoluteLayoutWidget.ResizableAbsoluteWrapper resizingWidget,
+			OResizeLocation resizeLocation, Element resizingOverlay) {
+		this.layout = layout;
+		this.resizingWidget = resizingWidget;
+		this.resizeLocation = resizeLocation;
+		this.resizingOverlay = resizingOverlay;
+
+		start(layout);
+	}
+
+	/**
+	 * Checks if is active.
+	 *
+	 * @return true, if is active
+	 */
+	public boolean isActive() {
+		return layout != null;
+	}
+
+	/**
+	 * Stop.
+	 */
+	public void stop() {
+		resetAlignments();
+		layout = null;
+		alignments.clear();
+		resizeLocation = null;
+		resizingWidget = null;
+		snapInfo = null;
+	}
+
+	/**
+	 * Update alignments for drop.
+	 *
+	 * @param drag the drag
+	 */
+	public void updateAlignmentsForDrop(final VDragEvent drag) {
+		if (!useAlignments) {
+			return;
+		}
+
+		Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
+			@Override
+			public void execute() {
+				resetSnap();
+				resetAlignments();
+
+				Map<String, Object> dropDetail = drag.getDropDetails();
+				if (!dropDetail.containsKey(Constants.DROP_DETAIL_RELATIVE_TOP)) {
+					return;
+				}
+				int top = (int) dropDetail.get(Constants.DROP_DETAIL_RELATIVE_TOP);
+				int left = (int) dropDetail.get(Constants.DROP_DETAIL_RELATIVE_LEFT);
+				int width = (int) dropDetail.get(Constants.DROP_DETAIL_COMPONENT_WIDTH);
+				int height = (int) dropDetail.get(Constants.DROP_DETAIL_COMPONENT_HEIGHT);
+
+				int topEdgeY = top;
+				int leftEdgeX = left;
+				int rightEdgeX = left + width;
+				int bottomEdgeY = top + height;
+
+				int snapCount = 0;
+				for (Widget child : layout.getChildren()) {
+					int childTop = child.getElement().getOffsetTop();
+					int childLeft = child.getElement().getOffsetLeft();
+					int childWidth = child.getElement().getOffsetWidth();
+					int childHeight = child.getElement().getOffsetHeight();
+
+					int childTopEdgeY = childTop;
+					int childLeftEdgeX = childLeft;
+					int childRightEdgeX = childLeft + childWidth;
+					int childBottomEdgeY = childTop + childHeight;
+
+					boolean isDraggedLeftOf = false;
+					boolean isDraggedToOf = false;
+					if (left < child.getAbsoluteLeft()) {
+						isDraggedLeftOf = true;
+					}
+
+					if (top < child.getAbsoluteTop()) {
+						isDraggedToOf = true;
+					}
+
+					AlignmentsLocation location = null;
+					// paired sides -> left to left,...
+					int top_top_EdgeYDelta = topEdgeY - childTopEdgeY;
+					int bottom_bottom_EdgeYDelta = bottomEdgeY - childBottomEdgeY;
+					int left_left_EdgeXDelta = leftEdgeX - childLeftEdgeX;
+					int right_right_EdgeXDelta = rightEdgeX - childRightEdgeX;
+					int top_bottom_EdgeYDelta = topEdgeY - childBottomEdgeY;
+					int bottom_top_EdgeYDelta = bottomEdgeY - childTopEdgeY;
+					int left_right_EdgeXDelta = leftEdgeX - childRightEdgeX;
+					int right_left_EdgeXDelta = rightEdgeX - childLeftEdgeX;
+
+					OAlignmentSnapInfo snapInfo = null;
+					if (isInsideSnapBounds(top_top_EdgeYDelta)) {
+						snapInfo = new OAlignmentSnapInfo(0, top_top_EdgeYDelta);
+						location = isDraggedLeftOf ? AlignmentsLocation.TOP_EDGE_TOLEFT
+								: AlignmentsLocation.TOP_EDGE_TORIGHT;
+					} else if (isInsideSnapBounds(left_left_EdgeXDelta)) {
+						snapInfo = new OAlignmentSnapInfo(left_left_EdgeXDelta, 0);
+						location = isDraggedToOf ? AlignmentsLocation.LEFT_EDGE_TOTOP
+								: AlignmentsLocation.LEFT_EDGE_TOBOTTOM;
+					} else if (isInsideSnapBounds(right_right_EdgeXDelta)) {
+						snapInfo = new OAlignmentSnapInfo(right_right_EdgeXDelta, 0);
+						location = isDraggedToOf ? AlignmentsLocation.RIGHT_EDGE_TOTOP
+								: AlignmentsLocation.RIGHT_EDGE_TOBOTTOM;
+					} else if (isInsideSnapBounds(bottom_bottom_EdgeYDelta)) {
+						snapInfo = new OAlignmentSnapInfo(0, bottom_bottom_EdgeYDelta);
+						location = isDraggedLeftOf ? AlignmentsLocation.BOTTOM_EDGE_TOLEFT
+								: AlignmentsLocation.BOTTOM_EDGE_TORIGHT;
+						// unpaired sides
+					} else if (isInsideSnapBounds(top_bottom_EdgeYDelta)) {
+						snapInfo = new OAlignmentSnapInfo(0, top_bottom_EdgeYDelta);
+						location = isDraggedLeftOf ? AlignmentsLocation.BOTTOM_EDGE_TOLEFT
+								: AlignmentsLocation.BOTTOM_EDGE_TORIGHT;
+					} else if (isInsideSnapBounds(left_right_EdgeXDelta)) {
+						snapInfo = new OAlignmentSnapInfo(left_right_EdgeXDelta, 0);
+						location = isDraggedToOf ? AlignmentsLocation.RIGHT_EDGE_TOTOP
+								: AlignmentsLocation.RIGHT_EDGE_TOBOTTOM;
+					} else if (isInsideSnapBounds(right_left_EdgeXDelta)) {
+						snapInfo = new OAlignmentSnapInfo(right_left_EdgeXDelta, 0);
+						location = isDraggedToOf ? AlignmentsLocation.LEFT_EDGE_TOTOP
+								: AlignmentsLocation.LEFT_EDGE_TOBOTTOM;
+					} else if (isInsideSnapBounds(bottom_top_EdgeYDelta)) {
+						snapInfo = new OAlignmentSnapInfo(0, bottom_top_EdgeYDelta);
+						location = isDraggedLeftOf ? AlignmentsLocation.TOP_EDGE_TOLEFT
+								: AlignmentsLocation.TOP_EDGE_TORIGHT;
+					}
+
+					if (location != null) {
+						snapCount++;
+
+						if (isFirstSnap(snapCount)) {
+							registerSnap(snapInfo);
+						}
+
+						OAlignmentOverlay overlay = new OAlignmentOverlay(child, drag.getDragImage(), location,
+								snapInfo, false, snapCount == 1);
+						alignments.add(overlay);
+						overlay.show();
+					}
+				}
+			}
+		});
+	}
+
+	/**
+	 * Update alignments for resize.
+	 *
+	 * @param draggedElement            the resize preview element
+	 * @param dragOverlayElement the drag overlay element
+	 */
+	public void updateAlignmentsForResize(final Element draggedElement, final Element dragOverlayElement) {
+		if (dragOverlayElement == null || !useAlignments) {
+			return;
+		}
+		Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
+			@Override
+			public void execute() {
+				resetSnap();
+				resetAlignments();
+
+				int top = (int) dragOverlayElement.getAbsoluteTop();
+				int left = (int) dragOverlayElement.getAbsoluteLeft();
+				int width = (int) dragOverlayElement.getOffsetWidth();
+				int height = (int) dragOverlayElement.getOffsetHeight();
+
+				int topEdgeY = top;
+				int leftEdgeX = left;
+				int rightEdgeX = left + width;
+				int bottomEdgeY = top + height;
+
+				int snapCount = 0;
+
+				for (Widget child : layout.getChildren()) {
+					if (child == getResizingWidget()) {
+						continue;
+					}
+
+					int childTop = child.getElement().getAbsoluteTop();
+					int childLeft = child.getElement().getAbsoluteLeft();
+					int childWidth = child.getElement().getOffsetWidth();
+					int childHeight = child.getElement().getOffsetHeight();
+
+					int childTopEdgeY = childTop;
+					int childLeftEdgeX = childLeft;
+					int childRightEdgeX = childLeft + childWidth;
+					int childBottomEdgeY = childTop + childHeight;
+
+					boolean isDraggedLeftOf = false;
+					boolean isDraggedToOf = false;
+					if (left < child.getAbsoluteLeft()) {
+						isDraggedLeftOf = true;
+					}
+
+					if (top < child.getAbsoluteTop()) {
+						isDraggedToOf = true;
+					}
+
+					AlignmentsLocation location = null;
+					// paired sides -> left to left,...
+					int top_top_EdgeYDelta = topEdgeY - childTopEdgeY;
+					int bottom_bottom_EdgeYDelta = bottomEdgeY - childBottomEdgeY;
+					int left_left_EdgeXDelta = leftEdgeX - childLeftEdgeX;
+					int right_right_EdgeXDelta = rightEdgeX - childRightEdgeX;
+					int top_bottom_EdgeYDelta = topEdgeY - childBottomEdgeY;
+					int bottom_top_EdgeYDelta = bottomEdgeY - childTopEdgeY;
+					int left_right_EdgeXDelta = leftEdgeX - childRightEdgeX;
+					int right_left_EdgeXDelta = rightEdgeX - childLeftEdgeX;
+
+					OAlignmentSnapInfo snapInfo = null;
+					OResizeLocation resizeLoc = getResizeLocation();
+					if (resizeLoc.isTop() && isInsideSnapBounds(top_top_EdgeYDelta)) {
+						snapInfo = new OAlignmentSnapInfo(0, top_top_EdgeYDelta, resizeLoc);
+						location = isDraggedLeftOf ? AlignmentsLocation.TOP_EDGE_TOLEFT
+								: AlignmentsLocation.TOP_EDGE_TORIGHT;
+					} else if (resizeLoc.isLeft() && isInsideSnapBounds(left_left_EdgeXDelta)) {
+						snapInfo = new OAlignmentSnapInfo(left_left_EdgeXDelta, 0, resizeLoc);
+						location = isDraggedToOf ? AlignmentsLocation.LEFT_EDGE_TOTOP
+								: AlignmentsLocation.LEFT_EDGE_TOBOTTOM;
+					} else if (resizeLoc.isRight() && isInsideSnapBounds(right_right_EdgeXDelta)) {
+						snapInfo = new OAlignmentSnapInfo(right_right_EdgeXDelta, 0, resizeLoc);
+						location = isDraggedToOf ? AlignmentsLocation.RIGHT_EDGE_TOTOP
+								: AlignmentsLocation.RIGHT_EDGE_TOBOTTOM;
+					} else if (resizeLoc.isBottom() && isInsideSnapBounds(bottom_bottom_EdgeYDelta)) {
+						snapInfo = new OAlignmentSnapInfo(0, bottom_bottom_EdgeYDelta, resizeLoc);
+						location = isDraggedLeftOf ? AlignmentsLocation.BOTTOM_EDGE_TOLEFT
+								: AlignmentsLocation.BOTTOM_EDGE_TORIGHT;
+						// unpaired sides
+					} else if (resizeLoc.isTop() && isInsideSnapBounds(top_bottom_EdgeYDelta)) {
+						snapInfo = new OAlignmentSnapInfo(0, top_bottom_EdgeYDelta, resizeLoc);
+						location = isDraggedLeftOf ? AlignmentsLocation.BOTTOM_EDGE_TOLEFT
+								: AlignmentsLocation.BOTTOM_EDGE_TORIGHT;
+					} else if (resizeLoc.isLeft() && isInsideSnapBounds(left_right_EdgeXDelta)) {
+						snapInfo = new OAlignmentSnapInfo(left_right_EdgeXDelta, 0, resizeLoc);
+						location = isDraggedToOf ? AlignmentsLocation.RIGHT_EDGE_TOTOP
+								: AlignmentsLocation.RIGHT_EDGE_TOBOTTOM;
+					} else if (resizeLoc.isRight() && isInsideSnapBounds(right_left_EdgeXDelta)) {
+						snapInfo = new OAlignmentSnapInfo(right_left_EdgeXDelta, 0, resizeLoc);
+						location = isDraggedToOf ? AlignmentsLocation.LEFT_EDGE_TOTOP
+								: AlignmentsLocation.LEFT_EDGE_TOBOTTOM;
+					} else if (resizeLoc.isBottom() && isInsideSnapBounds(bottom_top_EdgeYDelta)) {
+						snapInfo = new OAlignmentSnapInfo(0, bottom_top_EdgeYDelta, resizeLoc);
+						location = isDraggedLeftOf ? AlignmentsLocation.TOP_EDGE_TOLEFT
+								: AlignmentsLocation.TOP_EDGE_TORIGHT;
+					}
+
+					if (location != null) {
+						snapCount++;
+
+						if (isFirstSnap(snapCount)) {
+							registerSnap(snapInfo);
+						}
+
+						OAlignmentOverlay overlay = new OAlignmentOverlay(child, dragOverlayElement, location, snapInfo,
+								true, isFirstSnap(snapCount));
+						alignments.add(overlay);
+						overlay.show();
+					}
+				}
+			}
+		});
+	}
+
+	/**
+	 * Checks if is first snap.
+	 *
+	 * @param snapCount the snap count
+	 * @return true, if is first snap
+	 */
+	private boolean isFirstSnap(int snapCount) {
+		return snapCount == 1;
+	}
+
+	/**
+	 * Resets all alignments.
+	 */
+	protected void resetAlignments() {
+		for (OAlignmentOverlay alignment : alignments) {
+			alignment.hide();
+		}
+		alignments.clear();
+	}
+
+	/**
+	 * Checks if is inside snap bounds.
+	 *
+	 * @param value the value
+	 * @return true, if is inside snap bounds
+	 */
+	protected boolean isInsideSnapBounds(int value) {
+		int snap = getSnapFromCSS();
+		return value <= snap && value >= -snap;
+	}
+
+	/**
+	 * Reads the snap in pixels from the elements style.
+	 *
+	 * @return the snap from css
+	 */
+	protected int getSnapFromCSS() {
+		String snapStr = layout.getElement().getStyle().getProperty(IOConstants.CSS_SNAP_PROPERTY);
+		if (snapStr != null) {
+			return Integer.valueOf(snapStr);
+		} else {
+			return snap;
+		}
+	}
+
+	/**
+	 * Registers the current snap. Only one snap definition can be active at a
+	 * time.
+	 *
+	 * @param snapInfo the snap info
+	 */
+	protected void registerSnap(OAlignmentSnapInfo snapInfo) {
+		this.snapInfo = snapInfo;
+	}
+
+	/**
+	 * Resets the snap info.
+	 */
+	protected void resetSnap() {
+		this.snapInfo = null;
+	}
+
+	/**
+	 * Gets the snap.
+	 *
+	 * @return the snap
+	 */
+	protected OAlignmentSnapInfo getSnap() {
+		return snapInfo != null ? snapInfo : new OAlignmentSnapInfo(0, 0);
+	}
+
+	/**
+	 * Updates the dropDetails after drop event.
+	 *
+	 * @param drag the drag
+	 */
+	public void updateDropDetails(VDragEvent drag) {
+		if (snapInfo != null) {
+			Map<String, Object> dropDetail = drag.getDropDetails();
+			int rTop = (int) dropDetail.get(Constants.DROP_DETAIL_RELATIVE_TOP);
+			int aTop = (int) dropDetail.get(Constants.DROP_DETAIL_ABSOLUTE_TOP);
+			int rLeft = (int) dropDetail.get(Constants.DROP_DETAIL_RELATIVE_LEFT);
+			int aLeft = (int) dropDetail.get(Constants.DROP_DETAIL_ABSOLUTE_LEFT);
+
+			rTop -= snapInfo.getY();
+			aTop -= snapInfo.getY();
+			rLeft -= snapInfo.getX();
+			aLeft -= snapInfo.getX();
+
+			dropDetail.put(Constants.DROP_DETAIL_RELATIVE_TOP, rTop);
+			dropDetail.put(Constants.DROP_DETAIL_ABSOLUTE_TOP, aTop);
+			dropDetail.put(Constants.DROP_DETAIL_RELATIVE_LEFT, rLeft);
+			dropDetail.put(Constants.DROP_DETAIL_ABSOLUTE_LEFT, aLeft);
+		}
+	}
+
+	/**
+	 * Updates the resized widget after the resizing was finished.
+	 *
+	 * @param accept the accept
+	 * @param oldWidth the old width
+	 * @param oldHeight the old height
+	 */
+	public void updateResizedWidget(boolean accept, int oldWidth, int oldHeight) {
+		if (accept) {
+			int width = resizingOverlay.getOffsetWidth();
+			int height = resizingOverlay.getOffsetHeight();
+
+			resizingWidget.getElement().getStyle().setWidth(width, Unit.PX);
+			resizingWidget.getElement().getStyle().setHeight(height, Unit.PX);
+
+			resizingWidget.notifyResized(width, height, oldWidth, oldHeight, resizeLocation);
+		} else {
+			resizingWidget.notifyResizingCancel();
+		}
+	}
+
+	/**
+	 * Returns the widget that is currently resized.
+	 *
+	 * @return the resizing widget
+	 */
+	public Widget getResizingWidget() {
+		return resizingWidget;
+	}
+
+	/**
+	 * Returns the resizing operation currently performed.
+	 *
+	 * @return the resize location
+	 */
+	public OResizeLocation getResizeLocation() {
+		return resizeLocation;
+	}
+
+	/**
+	 * Returns true, if alignments should be used.
+	 *
+	 * @return true, if is use alignments
+	 */
+	public boolean isUseAlignments() {
+		return useAlignments;
+	}
+
+	/**
+	 * Sets the use alignments.
+	 *
+	 * @param useAlignments the new use alignments
+	 */
+	public void setUseAlignments(boolean useAlignments) {
+		// if alignments switched off, ensure that pending alignments are being
+		// removed.
+		if (this.useAlignments == true && useAlignments == false) {
+			Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
+				@Override
+				public void execute() {
+					resetSnap();
+					resetAlignments();
+				}
+			});
+		}
+		this.useAlignments = useAlignments;
+	}
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentOverlay.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentOverlay.java
new file mode 100644
index 0000000..014c996
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentOverlay.java
@@ -0,0 +1,306 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.Style.Unit;
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.ui.VOverlay;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class OAlignmentOverlay.
+ */
+public class OAlignmentOverlay extends VOverlay {
+
+	/** The Constant THICKNESS. */
+	private static final int THICKNESS = 1;
+
+	/** The Constant CLASSNAME. */
+	private static final String CLASSNAME = "o-alignmentLine";
+
+	/** The alignment location. */
+	private final AlignmentsLocation alignmentLocation;
+	
+	/** The drag element. */
+	private final Element dragElement;
+
+	/** The snap timer. */
+	private Timer snapTimer;
+
+	/**
+	 * Shows alignment lines for drag and resize operations.
+	 *
+	 * @param owner the owner
+	 * @param dragElement the drag element
+	 * @param location the location
+	 * @param snap the snap
+	 * @param resize the resize
+	 * @param autoSnap the auto snap
+	 */
+	public OAlignmentOverlay(Widget owner, final Element dragElement, AlignmentsLocation location,
+			final OAlignmentSnapInfo snap, final boolean resize, boolean autoSnap) {
+		super(false, false);
+
+		super.setOwner(owner);
+		this.dragElement = dragElement;
+		this.alignmentLocation = location;
+
+		setStyleName(CLASSNAME);
+
+		setZIndex(VOverlay.Z_INDEX + 1);
+
+		if (autoSnap && (snap.getX() != 0 || snap.getY() != 0)) {
+			snapTimer = new Timer() {
+				@Override
+				public void run() {
+					if (resize) {
+						snapResizeImagePosition(dragElement, snap);
+					} else {
+						snapDragImagePosition(dragElement, snap);
+					}
+				}
+			};
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see com.vaadin.client.ui.VOverlay#show()
+	 */
+	@Override
+	public void show() {
+		int left = 0;
+		int top = 0;
+		int width = 0;
+		int height = 0;
+
+		if (alignmentLocation == null) {
+			return;
+		}
+
+		switch (alignmentLocation) {
+		case TOP_EDGE_TOLEFT:
+			width = getAlignmentLineX();
+			left = getOwner().getOffsetWidth() - width;
+			height = THICKNESS;
+			break;
+		case TOP_EDGE_TORIGHT:
+			width = getAlignmentLineX();
+			left = 0;
+			height = THICKNESS;
+			break;
+		case BOTTOM_EDGE_TOLEFT:
+			top = getOwner().getOffsetHeight();
+			width = getAlignmentLineX();
+			left = getOwner().getOffsetWidth() - width;
+			height = THICKNESS;
+			break;
+		case BOTTOM_EDGE_TORIGHT:
+			width = getAlignmentLineX();
+			left = 0;
+			top = getOwner().getOffsetHeight();
+			height = THICKNESS;
+			break;
+		case LEFT_EDGE_TOBOTTOM:
+			top = 0;
+			width = THICKNESS;
+			height = getAlignmentLineY();
+			break;
+		case LEFT_EDGE_TOTOP:
+			top = getOwner().getOffsetHeight() - getAlignmentLineY();
+			width = THICKNESS;
+			height = getAlignmentLineY();
+			break;
+		case RIGHT_EDGE_TOBOTTOM:
+			top = 0;
+			left = getOwner().getOffsetWidth();
+			width = THICKNESS;
+			height = getAlignmentLineY();
+			break;
+		case RIGHT_EDGE_TOTOP:
+			top = getOwner().getOffsetHeight() - getAlignmentLineY();
+			left = getOwner().getOffsetWidth();
+			width = THICKNESS;
+			height = getAlignmentLineY();
+			break;
+		}
+
+		// set adjustment size
+		Element element = getContainerElement();
+		element.getStyle().setWidth(width, Unit.PX);
+		element.getStyle().setHeight(height, Unit.PX);
+		String bg = element.getStyle().getBackgroundColor();
+		if (bg == null || bg.equals("")) {
+			element.getStyle().setBackgroundColor("red");
+		}
+
+		// set the popup position
+		int absoluteLeft = getOwner().getAbsoluteLeft() + left;
+		int absoluteTop = getOwner().getAbsoluteTop() + top;
+		setPopupPosition(absoluteLeft, absoluteTop);
+
+		super.show();
+
+		if (snapTimer != null) {
+			snapTimer.schedule(300);
+		}
+	}
+
+	/**
+	 * Calculates the horizontal alignment line.
+	 *
+	 * @return the alignment line x
+	 */
+	private int getAlignmentLineX() {
+		if (isOwnerLeftOfImage()) {
+			return dragElement.getAbsoluteLeft() - getOwner().getAbsoluteLeft() + +dragElement.getOffsetWidth();
+		} else {
+			return getOwner().getAbsoluteLeft() - dragElement.getAbsoluteLeft() + getOwner().getOffsetWidth();
+		}
+	}
+
+	/**
+	 * Checks if is owner left of image.
+	 *
+	 * @return true, if is owner left of image
+	 */
+	private boolean isOwnerLeftOfImage() {
+		return getOwner().getAbsoluteLeft() < dragElement.getAbsoluteLeft();
+	}
+
+	/**
+	 * Calculates the vertical alignment line.
+	 *
+	 * @return the alignment line y
+	 */
+	private int getAlignmentLineY() {
+		if (isOwnerTopOfImage()) {
+			return dragElement.getAbsoluteTop() - getOwner().getAbsoluteTop() + dragElement.getOffsetHeight();
+		} else {
+			return getOwner().getAbsoluteTop() - dragElement.getAbsoluteTop() + getOwner().getOffsetHeight();
+		}
+	}
+
+	/**
+	 * Checks if is owner top of image.
+	 *
+	 * @return true, if is owner top of image
+	 */
+	private boolean isOwnerTopOfImage() {
+		return getOwner().getAbsoluteTop() < dragElement.getAbsoluteTop();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.vaadin.client.ui.VOverlay#hide()
+	 */
+	@Override
+	public void hide() {
+		if (snapTimer != null) {
+			snapTimer.cancel();
+		}
+
+		super.hide();
+	}
+
+	/**
+	 * Snap drag image position.
+	 *
+	 * @param dragImage the drag image
+	 * @param snap the snap
+	 */
+	private void snapDragImagePosition(final Element dragImage, final OAlignmentSnapInfo snap) {
+		int offsetTop = 0;
+		try {
+			String offsetTopStr = dragImage.getStyle().getMarginTop();
+			offsetTop = Integer.parseInt(offsetTopStr.substring(0, offsetTopStr.length() - 2));
+		} catch (NumberFormatException e) {
+			// nothing to do
+		}
+		dragImage.getStyle().setTop(dragImage.getAbsoluteTop() - offsetTop - snap.getY(), Unit.PX);
+
+		int offsetLeft = 0;
+		try {
+			String offsetLeftStr = dragImage.getStyle().getMarginLeft();
+			offsetLeft = Integer.parseInt(offsetLeftStr.substring(0, offsetLeftStr.length() - 2));
+		} catch (NumberFormatException e) {
+			// nothing to do
+		}
+		dragImage.getStyle().setLeft(dragImage.getAbsoluteLeft() - offsetLeft - snap.getX(), Unit.PX);
+	}
+
+	/**
+	 * Snap resize image position.
+	 *
+	 * @param dragImage the drag image
+	 * @param delta the delta
+	 */
+	private void snapResizeImagePosition(final Element dragImage, final OAlignmentSnapInfo delta) {
+
+		OResizeLocation location = OAlignmentManager.get().getResizeLocation();
+		int oldWidth = dragImage.getOffsetWidth();
+		int oldHeigth = dragImage.getOffsetHeight();
+
+		int newWidth = 0;
+		int newHeight = 0;
+
+		switch (location) {
+		case TOP:
+		case TOP_LEFT:
+		case LEFT:
+			newHeight = oldHeigth + delta.getY();
+			newWidth = oldWidth + delta.getX();
+			break;
+		case BOTTOM:
+		case BOTTOM_RIGHT:
+		case RIGHT:
+			newHeight = oldHeigth - delta.getY();
+			newWidth = oldWidth - delta.getX();
+			break;
+		case TOP_RIGHT:
+			newHeight = oldHeigth + delta.getY();
+			newWidth = oldWidth - delta.getX();
+			break;
+		case BOTTOM_LEFT:
+			newHeight = oldHeigth - delta.getY();
+			newWidth = oldWidth + delta.getX();
+			break;
+		}
+
+		dragImage.getStyle().setWidth(newWidth, Unit.PX);
+		dragImage.getStyle().setHeight(newHeight, Unit.PX);
+	}
+
+	/**
+	 * Indicates where the alignments should be painted.
+	 */
+	public enum AlignmentsLocation {
+		
+		/** The top edge toleft. */
+		TOP_EDGE_TOLEFT, 
+ /** The top edge toright. */
+ TOP_EDGE_TORIGHT, 
+ /** The left edge totop. */
+ LEFT_EDGE_TOTOP, 
+ /** The left edge tobottom. */
+ LEFT_EDGE_TOBOTTOM, 
+ /** The bottom edge toleft. */
+ BOTTOM_EDGE_TOLEFT, 
+ /** The bottom edge toright. */
+ BOTTOM_EDGE_TORIGHT, 
+ /** The right edge totop. */
+ RIGHT_EDGE_TOTOP, 
+ /** The right edge tobottom. */
+ RIGHT_EDGE_TOBOTTOM
+	}
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentSnapInfo.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentSnapInfo.java
new file mode 100644
index 0000000..3f8668e
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OAlignmentSnapInfo.java
@@ -0,0 +1,89 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Defines the x and y pixel to the next snapping position. Location defines the
+ * type of resizing operation done.
+ */
+public class OAlignmentSnapInfo {
+
+	/** The x. */
+	private final int x; 
+	
+	/** The y. */
+	private final int y;
+	
+	/** The location. */
+	private final OResizeLocation location;
+
+	/**
+	 * Instantiates a new o alignment snap info.
+	 *
+	 * @param x the x
+	 * @param y the y
+	 */
+	public OAlignmentSnapInfo(int x, int y) {
+		super();
+		this.x = x;
+		this.y = y;
+		this.location = null;
+	}
+
+	/**
+	 * Instantiates a new o alignment snap info.
+	 *
+	 * @param x the x
+	 * @param y the y
+	 * @param location the location
+	 */
+	public OAlignmentSnapInfo(int x, int y, OResizeLocation location) {
+		super();
+		this.x = x;
+		this.y = y;
+		this.location = location;
+	}
+
+	/**
+	 * X value is delta from dragElement - absoluteLayout#child. A negative
+	 * value means, that the dragged element is more left (left is smaller) then
+	 * the child from absolute layout.
+	 *
+	 * @return the x
+	 */
+	public int getX() {
+		return x;
+	}
+
+	/**
+	 * Y value is delta from dragElement - absoluteLayout#child. A negative
+	 * value means, that the dragged element is more top (top is smaller) then
+	 * the child from absolute layout.
+	 *
+	 * @return the y
+	 */
+	public int getY() {
+		return y;
+	}
+
+	/**
+	 * Gets the location.
+	 *
+	 * @return the location
+	 */
+	public OResizeLocation getLocation() {
+		return location;
+	}
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OChildResizeListener.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OChildResizeListener.java
new file mode 100644
index 0000000..0e86dd6
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OChildResizeListener.java
@@ -0,0 +1,37 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+import com.vaadin.shared.Connector;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Listener that is notified, if the resize operation proceeded.
+ *
+ * see OChildResizeEvent
+ */
+public interface OChildResizeListener {
+
+	/**
+	 * Is called if the resize operation proceeded.
+	 *
+	 * @param child the child
+	 * @param newWidth the new width
+	 * @param newHeight the new height
+	 * @param oldWidth the old width
+	 * @param oldHeight the old height
+	 * @param location the location
+	 */
+	void resized(Connector child, int newWidth, int newHeight, int oldWidth, int oldHeight, OResizeLocation location);
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OResizeLocation.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OResizeLocation.java
new file mode 100644
index 0000000..49b0c44
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/client/OResizeLocation.java
@@ -0,0 +1,92 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.absolutelayout.client;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Enum OResizeLocation.
+ */
+public enum OResizeLocation {
+    
+    /** The top left. */
+    TOP_LEFT, 
+ /** The top. */
+ TOP, 
+ /** The top right. */
+ TOP_RIGHT, 
+ /** The right. */
+ RIGHT, 
+ /** The bottom right. */
+ BOTTOM_RIGHT, 
+ /** The bottom. */
+ BOTTOM, 
+ /** The bottom left. */
+ BOTTOM_LEFT, 
+ /** The left. */
+ LEFT;
+	
+	/**
+	 * Checks if is top.
+	 *
+	 * @return true, if is top
+	 */
+	public boolean isTop(){
+		return this == OResizeLocation.TOP_LEFT || this == OResizeLocation.TOP || this == OResizeLocation.TOP_RIGHT;
+	}
+	
+	/**
+	 * Checks if is bottom.
+	 *
+	 * @return true, if is bottom
+	 */
+	public boolean isBottom(){
+		return this == OResizeLocation.BOTTOM_LEFT || this == OResizeLocation.BOTTOM || this == OResizeLocation.BOTTOM_RIGHT;
+	}
+	
+	/**
+	 * Checks if is left.
+	 *
+	 * @return true, if is left
+	 */
+	public boolean isLeft(){
+		return this == OResizeLocation.TOP_LEFT || this == OResizeLocation.LEFT || this == OResizeLocation.BOTTOM_LEFT;
+	}
+	
+	/**
+	 * Checks if is right.
+	 *
+	 * @return true, if is right
+	 */
+	public boolean isRight(){
+		return this == OResizeLocation.TOP_RIGHT || this == OResizeLocation.RIGHT || this == OResizeLocation.BOTTOM_RIGHT;
+	}
+	
+	/**
+	 * Checks if is y.
+	 *
+	 * @return true, if is y
+	 */
+	public boolean isY(){
+		return isTop() || isBottom();
+	}
+	
+	/**
+	 * Checks if is x.
+	 *
+	 * @return true, if is x
+	 */
+	public boolean isX(){
+		return isLeft() || isRight();
+	}
+}
+
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/public/oabsolutelayout/styles.css b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/public/oabsolutelayout/styles.css
new file mode 100644
index 0000000..5fd286f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/src/org/eclipse/osbp/vaadin/addons/absolutelayout/public/oabsolutelayout/styles.css
@@ -0,0 +1,66 @@
+
+	.v-absolutelayout .o-alignmentLine {
+		// the color of the alignment line
+		background-color: green;
+	}
+
+	.o-absolutelayout{
+		// the amount of pixels, a snap to alignment lines is done
+		snap: 7;
+	}
+
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .resizing {
+      overflow: visible;
+    }
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .drag-overlay {
+      border: 1px solid red;
+      -webkit-box-sizing: border-box;
+      -moz-box-sizing: border-box;
+      box-sizing: border-box;
+      position: absolute;
+      z-index: 10;
+    }
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .tlc, 
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .te, 
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .trc, 
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .re, 
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .brc, 
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .be, 
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .blc, 
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .le {
+      background-color: transparent;
+      display: block;
+      overflow: visible;
+      position: absolute;
+    }
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .div.unused {
+      cursor: default !important;
+    }
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .te {
+      cursor: ns-resize;
+      top: 0;
+      left: 0;
+      right: 0;
+      z-index: 6;
+    }
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .re {
+      cursor: ew-resize;
+      top: 0;
+      right: 0;
+      bottom: 0;
+      z-index: 5;
+    }
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .le {
+      cursor: ew-resize;
+      top: 0;
+      bottom: 0;
+      left: 0;
+      z-index: 5;
+    }
+    .v-absolutelayout .v-absolutelayout-wrapper-o-resizable .be {
+      cursor: ns-resize;
+      right: 0;
+      bottom: 0;
+      left: 0;
+      z-index: 6;
+    }
diff --git a/org.eclipse.osbp.vaadin.addons.absolutelayout/test/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutTest.java b/org.eclipse.osbp.vaadin.addons.absolutelayout/test/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutTest.java
new file mode 100644
index 0000000..602d9d2
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.absolutelayout/test/org/eclipse/osbp/vaadin/addons/absolutelayout/AbsoluteLayoutTest.java
@@ -0,0 +1,99 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+ package org.eclipse.osbp.vaadin.addons.absolutelayout;
+
+import com.vaadin.testbench.ScreenshotOnFailureRule;
+import com.vaadin.testbench.TestBenchTestCase;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.LabelElement;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.openqa.selenium.firefox.FirefoxDriver;
+
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * This class contains JUnit tests, which are run using Vaadin TestBench 4.
+ *
+ * To run this, first get an evaluation license from
+ * https://vaadin.com/addon/vaadin-testbench and follow the instructions at
+ * https://vaadin.com/directory/help/installing-cval-license to install it.
+ *
+ * Once the license is installed, you can run this class as a JUnit test.
+ */
+public class AbsoluteLayoutTest extends TestBenchTestCase {
+    @Rule
+    public ScreenshotOnFailureRule screenshotOnFailureRule =
+            new ScreenshotOnFailureRule(this, true);
+
+    @Before
+    public void setUp() throws Exception {
+        setDriver(new FirefoxDriver()); // Firefox
+
+        // To use Chrome, first install chromedriver.exe from
+        // http://chromedriver.storage.googleapis.com/index.html
+        // on your system path (e.g. C:\Windows\System32\)
+        //   setDriver(new ChromeDriver()); // Chrome
+
+        // To use Internet Explorer, first install iedriverserver.exe from
+        // http://selenium-release.storage.googleapis.com/index.html?path=2.43/
+        // on your system path (e.g. C:\Windows\System32\)
+        //   setDriver(new InternetExplorerDriver()); // IE
+
+        // To test headlessly (without a browser), first install phantomjs.exe
+        // from http://phantomjs.org/download.html on your system path
+        // (e.g. C:\Windows\System32\)
+        //   setDriver(new PhantomJSDriver()); // PhantomJS headless browser
+    }
+
+    /**
+     * Opens the URL where the application is deployed.
+     */
+    private void openTestUrl() {
+        getDriver().get("http://localhost:8080/org.eclipse.osbp.vaadin.addons.absolutelayout");
+    }
+
+    @Test
+    public void testClickButton() throws Exception {
+        openTestUrl();
+
+        // At first there should be no labels
+        assertFalse($(LabelElement.class).exists());
+
+        // Click the button
+        ButtonElement clickMeButton = $(ButtonElement.class).
+                caption("Click Me").first();
+        clickMeButton.click();
+
+        // There should now be one label
+        assertEquals(1, $(LabelElement.class).all().size());
+        // ... with the specified text
+        assertEquals("Thank you for clicking",
+                $(LabelElement.class).first().getText());
+
+        // Click the button again
+        clickMeButton.click();
+
+        // There should now be two labels
+        List<LabelElement> allLabels = $(LabelElement.class).all();
+        assertEquals(2, allLabels.size());
+        // ... and the last label should have the correct text
+        LabelElement lastLabel = allLabels.get(1);
+        assertEquals("Thank you for clicking", lastLabel.getText());
+    }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/.designer/designer-theme.css b/org.eclipse.osbp.vaadin.addons.designer.overlay/.designer/designer-theme.css
new file mode 100644
index 0000000..3aa7ca1
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/.designer/designer-theme.css
@@ -0,0 +1,12934 @@
+/**
+ * Checks if a list contains a certain value.
+ * 
+ * @param {list} $list - the list to check
+ * @param {value} $var - the value to search for
+ * @param {bool} $recursive (false) - should any contained lists be checked for the value
+ * 
+ * @return {bool} true if the value is found from the list, false otherwise
+ * 
+ * @group lists
+ */
+
+/**
+ * Cross-browser opacity.
+ *
+ * @param {number} $value - opacity value from 0 to 1
+ * @param {bool} $important (false) - should the property value be declared with !important
+ *
+ * @group util
+ */
+
+@-webkit-keyframes valo-animate-in-fade {
+		0% {
+		opacity: 0;
+	}
+	}
+
+@-moz-keyframes valo-animate-in-fade {
+		0% {
+		opacity: 0;
+	}
+	}
+
+@keyframes valo-animate-in-fade {
+		0% {
+		opacity: 0;
+	}
+	}
+
+@-webkit-keyframes valo-animate-out-fade {
+		100% {
+		opacity: 0;
+	}
+	}
+
+@-moz-keyframes valo-animate-out-fade {
+		100% {
+		opacity: 0;
+	}
+	}
+
+@keyframes valo-animate-out-fade {
+		100% {
+		opacity: 0;
+	}
+	}
+
+@-webkit-keyframes valo-animate-in-slide-down {
+		0% {
+		-webkit-transform: translateY(-100%);
+	}
+	}
+
+@-moz-keyframes valo-animate-in-slide-down {
+		0% {
+		-moz-transform: translateY(-100%);
+	}
+	}
+
+@keyframes valo-animate-in-slide-down {
+		0% {
+		-webkit-transform: translateY(-100%);
+		-moz-transform: translateY(-100%);
+		-ms-transform: translateY(-100%);
+		-o-transform: translateY(-100%);
+		transform: translateY(-100%);
+	}
+	}
+
+@-webkit-keyframes valo-animate-in-slide-up {
+		0% {
+		-webkit-transform: translateY(100%);
+	}
+	}
+
+@-moz-keyframes valo-animate-in-slide-up {
+		0% {
+		-moz-transform: translateY(100%);
+	}
+	}
+
+@keyframes valo-animate-in-slide-up {
+		0% {
+		-webkit-transform: translateY(100%);
+		-moz-transform: translateY(100%);
+		-ms-transform: translateY(100%);
+		-o-transform: translateY(100%);
+		transform: translateY(100%);
+	}
+	}
+
+@-webkit-keyframes valo-animate-in-slide-left {
+		0% {
+		-webkit-transform: translateX(100%);
+	}
+	}
+
+@-moz-keyframes valo-animate-in-slide-left {
+		0% {
+		-moz-transform: translateX(100%);
+	}
+	}
+
+@keyframes valo-animate-in-slide-left {
+		0% {
+		-webkit-transform: translateX(100%);
+		-moz-transform: translateX(100%);
+		-ms-transform: translateX(100%);
+		-o-transform: translateX(100%);
+		transform: translateX(100%);
+	}
+	}
+
+@-webkit-keyframes valo-animate-in-slide-right {
+		0% {
+		-webkit-transform: translateX(-100%);
+	}
+	}
+
+@-moz-keyframes valo-animate-in-slide-right {
+		0% {
+		-moz-transform: translateX(-100%);
+	}
+	}
+
+@keyframes valo-animate-in-slide-right {
+		0% {
+		-webkit-transform: translateX(-100%);
+		-moz-transform: translateX(-100%);
+		-ms-transform: translateX(-100%);
+		-o-transform: translateX(-100%);
+		transform: translateX(-100%);
+	}
+	}
+
+@-webkit-keyframes valo-animate-out-slide-down {
+		100% {
+		-webkit-transform: translateY(100%);
+	}
+	}
+
+@-moz-keyframes valo-animate-out-slide-down {
+		100% {
+		-moz-transform: translateY(100%);
+	}
+	}
+
+@keyframes valo-animate-out-slide-down {
+		100% {
+		-webkit-transform: translateY(100%);
+		-moz-transform: translateY(100%);
+		-ms-transform: translateY(100%);
+		-o-transform: translateY(100%);
+		transform: translateY(100%);
+	}
+	}
+
+@-webkit-keyframes valo-animate-out-slide-up {
+		100% {
+		-webkit-transform: translateY(-100%);
+	}
+	}
+
+@-moz-keyframes valo-animate-out-slide-up {
+		100% {
+		-moz-transform: translateY(-100%);
+	}
+	}
+
+@keyframes valo-animate-out-slide-up {
+		100% {
+		-webkit-transform: translateY(-100%);
+		-moz-transform: translateY(-100%);
+		-ms-transform: translateY(-100%);
+		-o-transform: translateY(-100%);
+		transform: translateY(-100%);
+	}
+	}
+
+@-webkit-keyframes valo-animate-out-slide-left {
+		100% {
+		-webkit-transform: translateX(-100%);
+	}
+	}
+
+@-moz-keyframes valo-animate-out-slide-left {
+		100% {
+		-moz-transform: translateX(-100%);
+	}
+	}
+
+@keyframes valo-animate-out-slide-left {
+		100% {
+		-webkit-transform: translateX(-100%);
+		-moz-transform: translateX(-100%);
+		-ms-transform: translateX(-100%);
+		-o-transform: translateX(-100%);
+		transform: translateX(-100%);
+	}
+	}
+
+@-webkit-keyframes valo-animate-out-slide-right {
+		100% {
+		-webkit-transform: translateX(100%);
+	}
+	}
+
+@-moz-keyframes valo-animate-out-slide-right {
+		100% {
+		-moz-transform: translateX(100%);
+	}
+	}
+
+@keyframes valo-animate-out-slide-right {
+		100% {
+		-webkit-transform: translateX(100%);
+		-moz-transform: translateX(100%);
+		-ms-transform: translateX(100%);
+		-o-transform: translateX(100%);
+		transform: translateX(100%);
+	}
+	}
+
+@-webkit-keyframes valo-overlay-animate-in {
+		0% {
+		-webkit-transform: translatey(-4px);
+		opacity: 0;
+	}
+	}
+
+@-moz-keyframes valo-overlay-animate-in {
+		0% {
+		-moz-transform: translatey(-4px);
+		opacity: 0;
+	}
+	}
+
+@keyframes valo-overlay-animate-in {
+		0% {
+		-webkit-transform: translatey(-4px);
+		-moz-transform: translatey(-4px);
+		-ms-transform: translatey(-4px);
+		-o-transform: translatey(-4px);
+		transform: translatey(-4px);
+		opacity: 0;
+	}
+	}
+
+@-webkit-keyframes valo-animate-out-slide-down-fade {
+		100% {
+		opacity: 0;
+		-webkit-transform: translatey(30%);
+	}
+	}
+
+@-moz-keyframes valo-animate-out-slide-down-fade {
+		100% {
+		opacity: 0;
+		-moz-transform: translatey(30%);
+	}
+	}
+
+@keyframes valo-animate-out-slide-down-fade {
+		100% {
+		opacity: 0;
+		-webkit-transform: translatey(30%);
+		-moz-transform: translatey(30%);
+		-ms-transform: translatey(30%);
+		-o-transform: translatey(30%);
+		transform: translatey(30%);
+	}
+	}
+
+/**
+ * Outputs cross-browser Valo-specific linear gradient background-image declarations.
+ * 
+ * @group style
+ * 
+ * @param {color} $color ($v-background-color) - The base color for the gradient color stops
+ * @param {list} $gradient ($v-gradient) - Valo-specific gradient value. See the documentation for $v-gradient.
+ * @param {color} $fallback (null) - A fallback color for browser which do not support linear gradients (IE8 and IE9 in particular). If null, the base $color is used instead.
+ * @param {string} $direction (to bottom) - the direction of the linear gradient. The color stops are by default so that a lighter shade is at the start and a darker shade is at the end.
+ */
+
+/**
+ * Computes a CSS border property value for the given base color.
+ *
+ * @group style
+ *
+ * @param {list} $border ($v-border) - CSS border value which can contain any of the color keywords
+ * @param {color} $color ($v-background-color) - the base color to which the color keywords are applied to
+ * @param {color} $context (null) - context/surrounding color where the border is expected to appear. The color of the final border is the darker of the two parameters passed to this function.
+ * @param {number} $strength (1) - adjustment for the border contrast
+ *
+ * @return {list} The input $border value with any color keyword replaced with the corresponding actual color
+ */
+
+/**
+ * Ouput selectors and properties to vertically center elements inside their parent.
+ * 
+ * @param {string} $to-align (()) - The selector to match the elements which you wish to align vertically. The targeted elements should be inline or inline-block elements.
+ * @param {string} $align (middle) - The vertical-align value, e.g. top, middle, bottom
+ * @param {string} $pseudo-element (after) - Which pseudo element to use for the vertical align guide
+ * 
+ * @group util
+ */
+
+@font-face {
+	font-family: ThemeIcons;
+	font-weight: normal;
+	font-style: normal;
+	src: url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.eot);
+	src: url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.woff) format("woff"), url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.ttf) format("truetype"), url(../valo/util/bourbon/css3/../../../../base/fonts/themeicons-webfont.svg#ThemeIcons) format("svg");
+}
+
+.ThemeIcons {
+	font-family: ThemeIcons;
+	font-style: normal;
+	font-weight: normal;
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
+	display: inline-block;
+	text-align: center;
+}
+
+@font-face {
+	font-family: FontAwesome;
+	font-weight: normal;
+	font-style: normal;
+	src: url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.eot);
+	src: url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.woff) format("woff"), url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.ttf) format("truetype"), url(../valo/util/bourbon/css3/../../../../base/fonts/fontawesome-webfont.svg#FontAwesome) format("svg");
+}
+
+.FontAwesome {
+	font-family: FontAwesome;
+	font-style: normal;
+	font-weight: normal;
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
+	display: inline-block;
+	text-align: center;
+}
+
+@font-face {
+	font-family: "Open Sans";
+	src: url(../valo/fonts/open-sans/OpenSans-Light-webfont.eot);
+	src: url(../valo/fonts/open-sans/OpenSans-Light-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/fonts/open-sans/OpenSans-Light-webfont.woff) format("woff"), url(../valo/fonts/open-sans/OpenSans-Light-webfont.ttf) format("truetype");
+	font-weight: 300;
+	font-style: normal;
+}
+
+@font-face {
+	font-family: "Open Sans";
+	src: url(../valo/fonts/open-sans/OpenSans-Regular-webfont.eot);
+	src: url(../valo/fonts/open-sans/OpenSans-Regular-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/fonts/open-sans/OpenSans-Regular-webfont.woff) format("woff"), url(../valo/fonts/open-sans/OpenSans-Regular-webfont.ttf) format("truetype");
+	font-weight: 400;
+	font-style: normal;
+}
+
+@font-face {
+	font-family: "Open Sans";
+	src: url(../valo/fonts/open-sans/OpenSans-Semibold-webfont.eot);
+	src: url(../valo/fonts/open-sans/OpenSans-Semibold-webfont.eot?#iefix) format("embedded-opentype"), url(../valo/fonts/open-sans/OpenSans-Semibold-webfont.woff) format("woff"), url(../valo/fonts/open-sans/OpenSans-Semibold-webfont.ttf) format("truetype");
+	font-weight: 600;
+	font-style: normal;
+}
+
+@-webkit-keyframes v-rotate-360 {
+		to {
+		-webkit-transform: rotate(360deg);
+	}
+	}
+
+@-moz-keyframes v-rotate-360 {
+		to {
+		-moz-transform: rotate(360deg);
+	}
+	}
+
+@-o-keyframes v-rotate-360 {
+		to {
+		-o-transform: rotate(360deg);
+	}
+	}
+
+@keyframes v-rotate-360 {
+		to {
+		transform: rotate(360deg);
+	}
+	}
+
+@-webkit-keyframes v-progress-start {
+		0% {
+		width: 0%;
+	}
+		100% {
+		width: 50%;
+	}
+	}
+
+@-moz-keyframes v-progress-start {
+		0% {
+		width: 0%;
+	}
+		100% {
+		width: 50%;
+	}
+	}
+
+@keyframes v-progress-start {
+		0% {
+		width: 0%;
+	}
+		100% {
+		width: 50%;
+	}
+	}
+
+@-webkit-keyframes v-progress-delay {
+		0% {
+		width: 50%;
+	}
+		100% {
+		width: 90%;
+	}
+	}
+
+@-moz-keyframes v-progress-delay {
+		0% {
+		width: 50%;
+	}
+		100% {
+		width: 90%;
+	}
+	}
+
+@keyframes v-progress-delay {
+		0% {
+		width: 50%;
+	}
+		100% {
+		width: 90%;
+	}
+	}
+
+@-webkit-keyframes v-progress-wait {
+		0% {
+		width: 90%;
+		height: 4px;
+	}
+		3% {
+		width: 91%;
+		height: 7px;
+	}
+		100% {
+		width: 96%;
+		height: 7px;
+	}
+	}
+
+@-moz-keyframes v-progress-wait {
+		0% {
+		width: 90%;
+		height: 4px;
+	}
+		3% {
+		width: 91%;
+		height: 7px;
+	}
+		100% {
+		width: 96%;
+		height: 7px;
+	}
+	}
+
+@keyframes v-progress-wait {
+		0% {
+		width: 90%;
+		height: 4px;
+	}
+		3% {
+		width: 91%;
+		height: 7px;
+	}
+		100% {
+		width: 96%;
+		height: 7px;
+	}
+	}
+
+@-webkit-keyframes v-progress-wait-pulse {
+		0% {
+		opacity: 1;
+	}
+		50% {
+		opacity: 0.1;
+	}
+		100% {
+		opacity: 1;
+	}
+	}
+
+@-moz-keyframes v-progress-wait-pulse {
+		0% {
+		opacity: 1;
+	}
+		50% {
+		opacity: 0.1;
+	}
+		100% {
+		opacity: 1;
+	}
+	}
+
+@keyframes v-progress-wait-pulse {
+		0% {
+		opacity: 1;
+	}
+		50% {
+		opacity: 0.1;
+	}
+		100% {
+		opacity: 1;
+	}
+	}
+
+/**
+ * Outputs the context menu selectors and styles, which is used by Table and Tree for instance.
+ * 
+ * @requires {mixin} valo-selection-item-style
+ * @requires {mixin} valo-selection-item-selected-style
+ */
+
+/**
+ * The background color for overlay elements.
+ *
+ * @type color
+ * @group overlay
+ */
+
+.v-shadow, .v-shadow-window {
+	display: none;
+}
+
+.v-ie8 .v-shadow, .v-ie8 .v-shadow-window {
+	display: block;
+}
+
+.v-ie8 .v-shadow .top, .v-ie8 .v-shadow-window .top {
+	position: absolute;
+	top: -6px;
+	right: 10px;
+	bottom: 6px;
+	left: -10px;
+	background: black;
+	filter: alpha(opacity=5) progid:DXImageTransform.Microsoft.blur(pixelradius=10, makeShadow=false);
+}
+
+.v-ie8 .v-shadow .top-left, .v-ie8 .v-shadow-window .top-left {
+	position: absolute;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+	background: black;
+	filter: alpha(opacity=9) progid:DXImageTransform.Microsoft.blur(pixelradius=0, makeShadow=false);
+}
+
+/**
+ * The backgound color for tooltips.
+ *
+ * @type color
+ * @group tooltip
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-absolutelayout) - 
+ *
+ * @group absolutelayout
+ */
+
+/**
+ * Outputs the selectors and properties for the Accordion component.
+ *
+ * @param {string} $primary-stylename (v-accordion) - the primary style name for the selectors
+ * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component
+ * @group accordion
+ */
+
+/**
+ * Outputs the selectors and properties for the Button component.
+ *
+ * @param {string} $primary-stylename (v-button) - the primary style name for the selectors
+ * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component
+ *
+ * @group button
+ */
+
+/**
+ * A list of colors for custom event colors. Can be an empty list of you don't 
+ * need any custom event colors.
+ * 
+ * @example javascript
+ * // Java code
+ * // 'event' is an instance of EditableCalendarEvent
+ * event.setStyleName("color1"); // 1st color in the list
+ * event.setStyleName("color2"); // 2nd color in the list
+ * // etc.
+ * 
+ * @group calendar
+ */
+
+/**
+ * Outputs the selectors and properties for the CheckBox component.
+ *
+ * @param {string} $primary-stylename (v-checkbox) - the primary style name for the selectors
+ * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component
+ *
+ * @group checkbox
+ */
+
+/**
+ * Outputs the global selectors and properties for the ColorPicker component - styles which are 
+ * considered mandatory for the component to work properly.
+ *
+ * @param {string} $primary-stylename (v-colorpicker) - the primary style name for the selectors
+ *
+ * @group colorpicker
+ */
+
+/**
+ * Outputs the selectors and properties for the ComboBox component.
+ *
+ * @param {string} $primary-stylename (v-filterselect) - the primary style name for the selectors
+ * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component
+ *
+ * @group combobox
+ */
+
+/**
+ * The amount of spacing between different widgets in a component group.
+ * If null, a computed value is used ($v-border size * -1, or 1px if $v-border size is 0)
+ * 
+ * @group csslayout
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-customcomponent) - 
+ *
+ * @group customcomponent
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-customlayout) - 
+ *
+ * @group customlayout
+ */
+
+/**
+ * Outputs the selectors and properties for the DateField component.
+ *
+ * @param {string} $primary-stylename (v-datefield) - the primary style name for the selectors
+ * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component
+ *
+ * @group datefield
+ */
+
+/**
+ * Outputs the styles and selectors for the DragAndDropWrapper component.
+ * 
+ * @param {string} $primary-stylename (v-ddwrapper) - the primary style name for the selectors
+ * 
+ * @group drag-n-drop
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-form) - 
+ *
+ * @group form
+ */
+
+/**
+ * Outputs the selectors and properties for the FormLayout component.
+ *
+ * @param {string} $primary-stylename (v-formlayout) - the primary style name for the selectors
+ * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component
+ *
+ * @group formlayout
+ */
+
+/**
+ *
+ * @group table
+ */
+
+@-webkit-keyframes valo-grid-editor-footer-animate-in {
+		0% {
+		margin-top: -37px;
+	}
+	}
+
+@-moz-keyframes valo-grid-editor-footer-animate-in {
+		0% {
+		margin-top: -37px;
+	}
+	}
+
+@keyframes valo-grid-editor-footer-animate-in {
+		0% {
+		margin-top: -37px;
+	}
+	}
+
+@-webkit-keyframes valo-grid-editor-footer-animate-in-alt {
+		0% {
+		margin-bottom: -38px;
+	}
+		100% {
+		margin-bottom: -1px;
+	}
+	}
+
+@-moz-keyframes valo-grid-editor-footer-animate-in-alt {
+		0% {
+		margin-bottom: -38px;
+	}
+		100% {
+		margin-bottom: -1px;
+	}
+	}
+
+@keyframes valo-grid-editor-footer-animate-in-alt {
+		0% {
+		margin-bottom: -38px;
+	}
+		100% {
+		margin-bottom: -1px;
+	}
+	}
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-gridlayout) - 
+ *
+ * @group gridlayout
+ */
+
+/**
+ * The font weight for headers.
+ * 
+ * @group label
+ */
+
+/**
+ *
+ * @group link
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-loginform) - 
+ *
+ * @group loginform
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-menubar) - 
+ * @param {bool} $include-additional-styles - 
+ *
+ * @group menubar
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-nativebutton) - 
+ *
+ * @group nativebutton
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-select) - 
+ *
+ * @group nativeselect
+ */
+
+/**
+ *
+ * @group notification
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-select-optiongroup) - 
+ * @param {bool} $include-additional-styles - 
+ *
+ * @group optiongroup
+ */
+
+/**
+ *
+ *
+ *
+ * @group orderedlayout
+ */
+
+/**
+ *
+ * @group panel
+ */
+
+@-webkit-keyframes v-popupview-animate-in {
+		0% {
+		-webkit-transform: scale(0);
+	}
+	}
+
+@-moz-keyframes v-popupview-animate-in {
+		0% {
+		-moz-transform: scale(0);
+	}
+	}
+
+@keyframes v-popupview-animate-in {
+		0% {
+		-webkit-transform: scale(0);
+		-moz-transform: scale(0);
+		-ms-transform: scale(0);
+		-o-transform: scale(0);
+		transform: scale(0);
+	}
+	}
+
+/**
+ *
+ * @group progressbar
+ */
+
+/**
+ *
+ * @group richtextarea
+ */
+
+/**
+ *
+ * @group slider
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-splitpanel) - 
+ * @param {bool} $include-additional-styles - 
+ *
+ * @group splitpanel
+ */
+
+/**
+ *
+ * @group table
+ */
+
+/**
+ * Should the tabsheet content changes be animated.
+ * 
+ * @group tabsheet
+ */
+
+/**
+ * The background color for text fields.
+ * @group textfield
+ */
+
+/**
+ * Outputs the selectors and properties for the TextArea component.
+ *
+ * @param {string} $primary-stylename (v-textarea) - the primary style name for the selectors
+ * @param {bool} $include-additional-styles - should the mixin output all the different style variations of the component
+ *
+ * @group textarea
+ */
+
+/**
+ *
+ * @group tree
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-treetable) - 
+ *
+ * @group treetable
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-select-twincol) - 
+ *
+ * @group twin-column-select
+ */
+
+/**
+ *
+ *
+ * @param {string} $primary-stylename (v-upload) -
+ *
+ * @group upload
+ */
+
+/**
+ *
+ */
+
+/**
+ * @group window
+ */
+
+@-webkit-keyframes valo-modal-window-indication {
+		0% {
+		opacity: 0;
+	}
+		100% {
+		opacity: 1;
+	}
+	}
+
+@-moz-keyframes valo-modal-window-indication {
+		0% {
+		opacity: 0;
+	}
+		100% {
+		opacity: 1;
+	}
+	}
+
+@keyframes valo-modal-window-indication {
+		0% {
+		opacity: 0;
+	}
+		100% {
+		opacity: 1;
+	}
+	}
+
+@-webkit-keyframes valo-animate-out-scale-down-fade {
+		100% {
+		-webkit-transform: scale(0.8);
+		opacity: 0;
+	}
+	}
+
+@-moz-keyframes valo-animate-out-scale-down-fade {
+		100% {
+		-moz-transform: scale(0.8);
+		opacity: 0;
+	}
+	}
+
+@keyframes valo-animate-out-scale-down-fade {
+		100% {
+		-webkit-transform: scale(0.8);
+		-moz-transform: scale(0.8);
+		-ms-transform: scale(0.8);
+		-o-transform: scale(0.8);
+		transform: scale(0.8);
+		opacity: 0;
+	}
+	}
+
+/**
+ * @group valo-menu
+ */
+
+.v-vaadin-version:after {
+	content: "7.6.1";
+}
+
+.v-widget {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	display: inline-block;
+	vertical-align: top;
+	text-align: left;
+	white-space: normal;
+}
+
+.v-generated-body {
+	overflow: hidden;
+	margin: 0;
+	padding: 0;
+	border: 0;
+}
+
+.v-app {
+	height: 100%;
+	-webkit-tap-highlight-color: transparent;
+	-webkit-text-size-adjust: 100%;
+	-ms-text-size-adjust: 100%;
+	-webkit-text-size-adjust: 100%;
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.v-app input[type="text"], .v-app .v-slot > .v-caption, .v-app .v-gridlayout-slot > .v-caption, .v-app .v-has-caption > .v-caption, .v-app .v-formlayout-captioncell > .v-caption, .v-app .v-csslayout > .v-caption {
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+}
+
+.v-app input::-ms-clear {
+	display: none;
+}
+
+.v-ui {
+	position: relative;
+}
+
+.v-ui.v-ui-embedded {
+	margin-top: -1px;
+	border-top: 1px solid transparent;
+}
+
+.v-ui:focus {
+	outline: none;
+}
+
+.v-overlay-container {
+	width: 0;
+	height: 0;
+}
+
+.v-drag-element {
+	z-index: 60000;
+	position: absolute !important;
+	cursor: default;
+}
+
+.v-clip {
+	overflow: hidden;
+}
+
+.v-scrollable {
+	overflow: auto;
+}
+
+.v-scrollable  > .v-widget {
+	vertical-align: middle;
+	overflow: hidden;
+}
+
+.v-ios.v-webkit .v-scrollable {
+	-webkit-overflow-scrolling: touch;
+}
+
+.v-ios5.v-webkit .v-scrollable {
+	-webkit-overflow-scrolling: none;
+}
+
+.v-webkit.v-ios .v-browserframe {
+	-webkit-overflow-scrolling: touch;
+	overflow: auto;
+}
+
+.v-assistive-device-only {
+	position: absolute;
+	top: -2000px;
+	left: -2000px;
+	width: 10px;
+	overflow: hidden;
+}
+
+.v-icon {
+	cursor: inherit;
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.v-icon, .v-errorindicator, .v-required-field-indicator {
+	display: inline-block;
+	line-height: inherit;
+}
+
+.v-caption {
+	display: inline-block;
+	white-space: nowrap;
+	line-height: 1.55;
+}
+
+.v-captiontext {
+	display: inline-block;
+	line-height: inherit;
+}
+
+div.v-layout.v-horizontal.v-widget {
+	white-space: nowrap;
+}
+
+.v-layout.v-vertical > .v-expand, .v-layout.v-horizontal > .v-expand {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 100%;
+	height: 100%;
+}
+
+.v-slot, .v-spacing {
+	display: inline-block;
+	white-space: nowrap;
+	vertical-align: top;
+}
+
+.v-vertical > .v-slot:after {
+	display: inline-block;
+	clear: both;
+	width: 0;
+	height: 0;
+	overflow: hidden;
+}
+
+.v-vertical > .v-slot, .v-vertical > .v-expand > .v-slot {
+	display: block;
+	clear: both;
+}
+
+.v-horizontal > .v-slot, .v-horizontal > .v-expand > .v-slot {
+	height: 100%;
+}
+
+.v-horizontal > .v-expand > .v-slot {
+	position: relative;
+}
+
+.v-vertical > .v-spacing, .v-vertical > .v-expand > .v-spacing {
+	width: 0 !important;
+	display: block;
+	clear: both;
+}
+
+.v-horizontal > .v-spacing, .v-horizontal > .v-expand > .v-spacing {
+	height: 0 !important;
+}
+
+.v-align-middle:before, .v-align-bottom:before, .v-expand > .v-align-middle:before, .v-expand > .v-align-bottom:before {
+	content: "";
+	display: inline-block;
+	height: 100%;
+	vertical-align: middle;
+	width: 0;
+}
+
+.v-align-middle, .v-align-bottom {
+	white-space: nowrap;
+}
+
+.v-align-middle > .v-widget, .v-align-bottom > .v-widget {
+	display: inline-block;
+}
+
+.v-align-middle, .v-align-middle > .v-widget {
+	vertical-align: middle;
+}
+
+.v-align-bottom, .v-align-bottom > .v-widget {
+	vertical-align: bottom;
+}
+
+.v-align-center {
+	text-align: center;
+}
+
+.v-align-center > .v-widget {
+	margin-left: auto;
+	margin-right: auto;
+}
+
+.v-align-right {
+	text-align: right;
+}
+
+.v-align-right > .v-widget {
+	margin-left: auto;
+}
+
+.v-has-caption, .v-has-caption > .v-caption {
+	display: inline-block;
+}
+
+.v-caption-on-left, .v-caption-on-right {
+	white-space: nowrap;
+}
+
+.v-caption-on-top > .v-caption, .v-caption-on-bottom > .v-caption {
+	display: block;
+}
+
+.v-caption-on-left > .v-caption {
+	padding-right: 0.5em;
+}
+
+.v-caption-on-left > .v-widget, .v-caption-on-right > .v-widget {
+	display: inline-block;
+}
+
+.v-has-caption.v-has-width > .v-widget {
+	width: 100% !important;
+}
+
+.v-has-caption.v-has-height > .v-widget {
+	height: 100% !important;
+}
+
+.v-gridlayout {
+	position: relative;
+}
+
+.v-gridlayout-slot {
+	position: absolute;
+	line-height: 1.55;
+}
+
+.v-gridlayout-spacing-on {
+	overflow: hidden;
+}
+
+.v-gridlayout-spacing, .v-gridlayout-spacing-off {
+	padding-left: 0;
+	padding-top: 0;
+}
+
+.v-gridlayout-spacing-off {
+	overflow: hidden;
+}
+
+.v-calendar-month-day-scrollable {
+	overflow-y: scroll;
+}
+
+.v-calendar-week-wrapper {
+	position: relative;
+	overflow: hidden;
+}
+
+.v-calendar-current-time {
+	position: absolute;
+	left: 0;
+	width: 100%;
+	height: 1px;
+	background: red;
+	z-index: 2;
+}
+
+.v-calendar-event-resizetop, .v-calendar-event-resizebottom {
+	position: absolute;
+	height: 5%;
+	min-height: 3px;
+	width: 100%;
+	z-index: 1;
+}
+
+.v-calendar-event-resizetop {
+	cursor: row-resize;
+	top: 0;
+}
+
+.v-calendar-event-resizebottom {
+	cursor: row-resize;
+	bottom: 0;
+}
+
+.v-calendar-header-month td:first-child {
+	padding-left: 20px;
+}
+
+.v-calendar-month-sizedheight .v-calendar-month-day {
+	height: 100px;
+}
+
+.v-calendar-month-sizedwidth .v-calendar-month-day {
+	width: 100px;
+}
+
+.v-calendar-header-month-Hsized .v-calendar-header-day {
+	width: 101px;
+}
+
+.v-calendar-header-month-Hsized td:first-child {
+	padding-left: 21px;
+}
+
+.v-calendar-header-day-Hsized {
+	width: 200px;
+}
+
+.v-calendar-week-numbers-Vsized .v-calendar-week-number {
+	height: 100px;
+	line-height: 100px;
+}
+
+.v-calendar-week-wrapper-Vsized {
+	height: 400px;
+	overflow-x: hidden !important;
+}
+
+.v-calendar-times-Vsized .v-calendar-time {
+	height: 38px;
+}
+
+.v-calendar-times-Hsized .v-calendar-time {
+	width: 42px;
+}
+
+.v-calendar-day-times-Vsized .v-datecellslot, .v-calendar-day-times-Vsized .v-datecellslot-even {
+	height: 18px;
+}
+
+.v-calendar-day-times-Hsized, .v-calendar-day-times-Hsized .v-datecellslot, .v-calendar-day-times-Hsized .v-datecellslot-even {
+	width: 200px;
+}
+
+.v-colorpicker-popup.v-window {
+	min-width: 220px !important;
+}
+
+.v-colorpicker-gradient-container {
+	overflow: visible !important;
+}
+
+.v-colorpicker-gradient-clicklayer {
+	opacity: 0;
+	filter: alpha(opacity=0) ;
+}
+
+.rgb-gradient .v-colorpicker-gradient-background {
+	background: url(../valo/components/img/colorpicker/gradient2.png);
+}
+
+.hsv-gradient .v-colorpicker-gradient-foreground {
+	background: url(../valo/components/img/colorpicker/gradient.png);
+}
+
+.v-colorpicker-gradient-higherbox:before {
+	content: "";
+	width: 11px;
+	height: 11px;
+	border-radius: 7px;
+	border: 1px solid #fff;
+	-webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(0, 0, 0, 0.3);
+	box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), inset 0 0 0 1px rgba(0, 0, 0, 0.3);
+	position: absolute;
+	bottom: -6px;
+	left: -6px;
+}
+
+.v-colorpicker-popup .v-slider.v-slider-red:before {
+	background-color: red;
+}
+
+.v-colorpicker-popup .v-slider.v-slider-green:before {
+	background-color: green;
+}
+
+.v-colorpicker-popup .v-slider.v-slider-blue:before {
+	background-color: blue;
+}
+
+.v-colorpicker-popup .v-slider.hue-slider:before {
+	background: url(../valo/components/img/colorpicker/slider_hue_bg.png);
+}
+
+.v-colorpicker-popup input.v-textfield-dark {
+	color: #fff;
+}
+
+.v-colorpicker-popup input.v-textfield-light {
+	color: #000;
+}
+
+.v-colorpicker-grid {
+	height: 319px;
+}
+
+.v-colorpicker-popup .colorselect td {
+	line-height: 15px;
+}
+
+.v-table-header table, .v-table-footer table, .v-table-table {
+	border-spacing: 0;
+	border-collapse: separate;
+	margin: 0;
+	padding: 0;
+	border: 0;
+	line-height: 1.55;
+}
+
+.v-table-resizer, .v-table-sort-indicator {
+	float: right;
+}
+
+.v-table-caption-container-align-center {
+	text-align: center;
+}
+
+.v-table-caption-container-align-right {
+	text-align: right;
+}
+
+.v-table-header td, .v-table-footer td, .v-table-cell-content {
+	padding: 0;
+}
+
+.v-table-sort-indicator {
+	width: 0;
+}
+
+.v-tabsheet-hidetabs > .v-tabsheet-tabcontainer, .v-tabsheet-spacertd, .v-disabled .v-tabsheet-scroller, .v-tabsheet .v-disabled .v-tabsheet-caption-close {
+	display: none;
+}
+
+.v-tabsheet {
+	overflow: visible !important;
+	position: relative;
+}
+
+.v-tabsheet-tabcontainer table, .v-tabsheet-tabcontainer tbody, .v-tabsheet-tabcontainer tr {
+	display: inline-block;
+	border-spacing: 0;
+	border-collapse: collapse;
+	vertical-align: top;
+}
+
+.v-tabsheet-tabcontainer td {
+	display: inline-block;
+	padding: 0;
+}
+
+.v-tabsheet-tabs {
+	white-space: nowrap;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.v-tabsheet-content {
+	position: relative;
+}
+
+.v-tabsheet-content  > div > .v-scrollable  > .v-margin-top {
+	padding-top: 12px;
+}
+
+.v-tabsheet-content  > div > .v-scrollable  > .v-margin-right {
+	padding-right: 12px;
+}
+
+.v-tabsheet-content  > div > .v-scrollable  > .v-margin-bottom {
+	padding-bottom: 12px;
+}
+
+.v-tabsheet-content  > div > .v-scrollable  > .v-margin-left {
+	padding-left: 12px;
+}
+
+.v-splitpanel-vertical, .v-splitpanel-horizontal {
+	overflow: hidden;
+	white-space: nowrap;
+}
+
+.v-splitpanel-hsplitter {
+	z-index: 100;
+	cursor: e-resize;
+	cursor: col-resize;
+}
+
+.v-splitpanel-vsplitter {
+	z-index: 100;
+	cursor: s-resize;
+	cursor: row-resize;
+}
+
+.v-splitpanel-hsplitter:after, .v-splitpanel-vsplitter:after {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+}
+
+.v-splitpanel-hsplitter div, .v-splitpanel-vsplitter div {
+	width: inherit;
+	height: inherit;
+	overflow: hidden;
+	position: relative;
+}
+
+.v-splitpanel-hsplitter div:before, .v-splitpanel-vsplitter div:before {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+}
+
+.v-disabled [class$="splitter"] div {
+	cursor: default;
+}
+
+.v-disabled [class$="splitter"] div:before {
+	display: none;
+}
+
+.v-splitpanel-horizontal > div  > .v-splitpanel-second-container {
+	position: static !important;
+	display: inline-block;
+	vertical-align: top;
+}
+
+.v-splitpanel-horizontal > div  > .v-splitpanel-first-container {
+	display: inline-block;
+	vertical-align: top;
+}
+
+.org_osbee_vaadin_addons_designer_overlay.v-app, .org_osbee_vaadin_addons_designer_overlay.v-app-loading {
+	font: 300 16px/1.55 "Open Sans", sans-serif;
+	color: #464646;
+	background-color: #fafafa;
+	cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-app-loading {
+	width: 100%;
+	height: 100%;
+	background: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-app-loading:before {
+	content: "";
+	position: fixed;
+	z-index: 100;
+	top: 45%;
+	left: 50%;
+	width: 28px;
+	height: 28px;
+	padding: 9px;
+	margin-top: -24px;
+	margin-left: -24px;
+	background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50%;
+	border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-loading-indicator {
+	position: fixed !important;
+	z-index: 99999;
+	left: 0;
+	right: auto;
+	top: 0;
+	width: 50%;
+	opacity: 1;
+	height: 4px;
+	background-color: #197de1;
+	pointer-events: none;
+	-webkit-transition: none;
+	-moz-transition: none;
+	transition: none;
+	-webkit-animation: v-progress-start 1000ms 200ms both;
+	-moz-animation: v-progress-start 1000ms 200ms both;
+	animation: v-progress-start 1000ms 200ms both;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-loading-indicator[style*="none"] {
+	display: block !important;
+	width: 100% !important;
+	opacity: 0;
+	-webkit-animation: none;
+	-moz-animation: none;
+	animation: none;
+	-webkit-transition: opacity 500ms 300ms, width 300ms;
+	-moz-transition: opacity 500ms 300ms, width 300ms;
+	transition: opacity 500ms 300ms, width 300ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-delay {
+	width: 90%;
+	-webkit-animation: v-progress-delay 3.8s forwards;
+	-moz-animation: v-progress-delay 3.8s forwards;
+	animation: v-progress-delay 3.8s forwards;
+}
+
+.v-ff .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-delay {
+	width: 50%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait {
+	width: 96%;
+	-webkit-animation: v-progress-wait 5s forwards, v-progress-wait-pulse 1s 4s infinite backwards;
+	-moz-animation: v-progress-wait 5s forwards, v-progress-wait-pulse 1s 4s infinite backwards;
+	animation: v-progress-wait 5s forwards, v-progress-wait-pulse 1s 4s infinite backwards;
+}
+
+.v-ff .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait {
+	width: 90%;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-delay, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-delay, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait {
+	width: 28px !important;
+	height: 28px;
+	padding: 9px;
+	background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50%;
+	border-radius: 4px;
+	top: 9px;
+	right: 9px;
+	left: auto;
+	filter: alpha(opacity=50);
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator[style*="none"], .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-delay[style*="none"], .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait[style*="none"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator[style*="none"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-delay[style*="none"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait[style*="none"] {
+	display: none !important;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-loading-indicator-wait {
+	filter: alpha(opacity=100);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-scrollable:focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay img.v-icon {
+	vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption {
+	font-size: 14px;
+	font-weight: 400;
+	padding-bottom: 0.3em;
+	padding-left: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-on-left .v-caption, .org_osbee_vaadin_addons_designer_overlay .v-caption-on-right .v-caption {
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-icon + .v-captiontext, .org_osbee_vaadin_addons_designer_overlay .v-icon + span {
+	margin-left: 7px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-icon + .v-captiontext:empty, .org_osbee_vaadin_addons_designer_overlay .v-icon + span:empty {
+	margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-errorindicator {
+	color: #ed473b;
+	font-weight: 600;
+	width: 19px;
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-errorindicator:before {
+	content: "!";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-required-field-indicator {
+	color: #ed473b;
+	padding: 0 0.2em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay select {
+	font: inherit;
+	font-weight: 400;
+	line-height: inherit;
+	padding: 5px;
+	margin: 0;
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	color: #464646;
+}
+
+.org_osbee_vaadin_addons_designer_overlay select:focus {
+	outline: none;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay button {
+	font: inherit;
+	font-weight: 400;
+	line-height: 1.55;
+}
+
+.org_osbee_vaadin_addons_designer_overlay a {
+	cursor: pointer;
+	color: #197de1;
+	text-decoration: underline;
+	font-weight: inherit;
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay a:hover {
+	color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay a.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-disabled {
+	cursor: default !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-drag-element {
+	background: #fafafa;
+	color: #464646;
+	-webkit-box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+	box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+	border-radius: 4px;
+	overflow: hidden;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tooltip {
+	background-color: #323232;
+	background-color: rgba(50, 50, 50, 0.9);
+	-webkit-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
+	box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
+	color: white;
+	padding: 5px 9px;
+	border-radius: 3px;
+	max-width: 35em;
+	overflow: hidden !important;
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tooltip div[style*="width"] {
+	width: auto !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tooltip .v-errormessage {
+	background-color: white;
+	background-color: #fff;
+	color: #ed473b;
+	margin: -5px -9px;
+	padding: 5px 9px;
+	max-height: 10em;
+	overflow: auto;
+	font-weight: 400;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tooltip .v-errormessage h2:only-child {
+	font: inherit;
+	line-height: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tooltip .v-tooltip-text {
+	max-height: 10em;
+	overflow: auto;
+	margin-top: 10px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tooltip .v-errormessage[aria-hidden="true"] + .v-tooltip-text {
+	margin-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tooltip h1, .org_osbee_vaadin_addons_designer_overlay .v-tooltip h2, .org_osbee_vaadin_addons_designer_overlay .v-tooltip h3, .org_osbee_vaadin_addons_designer_overlay .v-tooltip h4 {
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu {
+	padding: 4px 4px;
+	border-radius: 4px;
+	background-color: white;
+	color: #474747;
+	-webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+	box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+	-webkit-backface-visibility: hidden;
+	-moz-backface-visibility: hidden;
+	-ms-backface-visibility: hidden;
+	backface-visibility: hidden;
+	padding: 4px 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu[class*="animate-in"] {
+	-webkit-animation: valo-overlay-animate-in 120ms;
+	-moz-animation: valo-overlay-animate-in 120ms;
+	animation: valo-overlay-animate-in 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu[class*="animate-out"] {
+	-webkit-animation: valo-animate-out-fade 120ms;
+	-moz-animation: valo-animate-out-fade 120ms;
+	animation: valo-animate-out-fade 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu table {
+	border-spacing: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu .gwt-MenuItem {
+	cursor: pointer;
+	line-height: 27px;
+	padding: 0 20px 0 10px;
+	border-radius: 3px;
+	font-weight: 400;
+	white-space: nowrap;
+	position: relative;
+	display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu .gwt-MenuItem:active:before {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	background: #0957a6;
+	opacity: 0.15;
+	filter: alpha(opacity=15.0) ;
+	pointer-events: none;
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu .gwt-MenuItem .v-icon {
+	max-height: 27px;
+	margin-right: 5px;
+	min-width: 1em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-contextmenu .gwt-MenuItem-selected {
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	color: #ecf2f8;
+	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-reconnect-dialog {
+	color: white;
+	top: 12px;
+	right: 12px;
+	max-width: 100%;
+	border-radius: 0;
+	-webkit-box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25);
+	box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25);
+	padding: 12px 15px;
+	background-color: #444;
+	background-color: rgba(68, 68, 68, 0.9);
+	line-height: 22px;
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-reconnect-dialog .text {
+	display: inline-block;
+	padding-left: 10px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-reconnect-dialog .spinner {
+	height: 24px !important;
+	width: 24px !important;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	border: 2px solid rgba(25, 125, 225, 0.2);
+	border-top-color: #197de1;
+	border-right-color: #197de1;
+	border-radius: 100%;
+	-webkit-animation: v-rotate-360 500ms infinite linear;
+	-moz-animation: v-rotate-360 500ms infinite linear;
+	animation: v-rotate-360 500ms infinite linear;
+	pointer-events: none;
+	display: none;
+	vertical-align: middle;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-reconnect-dialog .spinner, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-reconnect-dialog .spinner {
+	border: none;
+	border-radius: 4px;
+	background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%;
+	background-size: 80%;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-reconnect-dialog .spinner {
+	min-width: 30px;
+	min-height: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-reconnect-dialog.active .spinner {
+	display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-absolutelayout-wrapper {
+	position: absolute;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-absolutelayout-margin, .org_osbee_vaadin_addons_designer_overlay .v-absolutelayout-canvas {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-absolutelayout.v-has-height > div, .org_osbee_vaadin_addons_designer_overlay .v-absolutelayout.v-has-height .v-absolutelayout-margin {
+	height: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-absolutelayout.v-has-height > div, .org_osbee_vaadin_addons_designer_overlay .v-absolutelayout.v-has-width .v-absolutelayout-margin {
+	width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-top {
+	padding-top: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-right {
+	padding-right: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-bottom {
+	padding-bottom: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-left {
+	padding-left: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-spacing {
+	width: 12px;
+	height: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-well, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-well {
+	background: #f5f5f5;
+	color: #454545;
+	-webkit-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05);
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-well  > div > [class*="-caption"], .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-well  > div > [class*="-caption"] {
+	background: transparent;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-well  > .v-margin-top, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-well  > .v-margin-top {
+	padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-well  > .v-margin-right, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-well  > .v-margin-right {
+	padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-well  > .v-margin-bottom, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-well  > .v-margin-bottom {
+	padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-well  > .v-margin-left, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-well  > .v-margin-left {
+	padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-card, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-card {
+	background: white;
+	color: #474747;
+	border-radius: 4px;
+	border: 1px solid #d5d5d5;
+	-webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-card  > .v-margin-top, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-card  > .v-margin-top {
+	padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-card  > .v-margin-right, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-card  > .v-margin-right {
+	padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-card  > .v-margin-bottom, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-card  > .v-margin-bottom {
+	padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout-card  > .v-margin-left, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-card  > .v-margin-left {
+	padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-wrapping {
+	white-space: normal !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-wrapping > .v-spacing + .v-slot, .org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-wrapping > .v-slot:first-child {
+	margin-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-horizontallayout-wrapping > .v-slot:first-child:last-child {
+	margin-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button {
+	position: relative;
+	text-align: center;
+	white-space: nowrap;
+	outline: none;
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	height: 37px;
+	padding: 0 16px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button:before {
+	content: "";
+	display: inline-block;
+	width: 0;
+	height: 100%;
+	vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button > div {
+	vertical-align: middle;
+}
+
+.v-sa .org_osbee_vaadin_addons_designer_overlay .v-button:before {
+	height: 110%;
+}
+
+.v-ff .org_osbee_vaadin_addons_designer_overlay .v-button:before {
+	height: 107%;
+}
+
+.v-ie .org_osbee_vaadin_addons_designer_overlay .v-button:before {
+	margin-top: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button:after {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	border-radius: inherit;
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button:focus:after {
+	-webkit-transition: none;
+	-moz-transition: none;
+	transition: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button.v-disabled:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button:hover:after {
+	background-color: rgba(186, 186, 186, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button:focus:after {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button:active:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-primary {
+	height: 37px;
+	padding: 0 16px;
+	color: #ecf2f8;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #1362b1;
+	border-top-color: #156ab3;
+	border-bottom-color: #1156a8;
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	-webkit-box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca, 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+	padding: 0 19px;
+	font-weight: bold;
+	min-width: 81px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-primary:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-primary:hover:after {
+	background-color: rgba(90, 163, 237, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-primary:focus:after {
+	border: inherit;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-primary:active:after {
+	background-color: rgba(2, 62, 122, 0.2);
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-button-primary {
+	min-width: 43px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-friendly {
+	height: 37px;
+	padding: 0 16px;
+	color: #eaf4e9;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #227719;
+	border-top-color: #257d1a;
+	border-bottom-color: #1e6b15;
+	background-color: #2c9720;
+	background-image: -webkit-linear-gradient(top, #2f9f22 2%, #26881b 98%);
+	background-image: linear-gradient(to bottom,#2f9f22 2%, #26881b 98%);
+	-webkit-box-shadow: inset 0 1px 0 #46b33a, inset 0 -1px 0 #26811b, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 #46b33a, inset 0 -1px 0 #26811b, 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-friendly:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-friendly:hover:after {
+	background-color: rgba(65, 211, 48, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-friendly:focus:after {
+	border: inherit;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-friendly:active:after {
+	background-color: rgba(14, 86, 6, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-danger {
+	height: 37px;
+	padding: 0 16px;
+	color: #f9f0ef;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #bb382e;
+	border-top-color: #bc3c31;
+	border-bottom-color: #b13028;
+	background-color: #ed473b;
+	background-image: -webkit-linear-gradient(top, #ee4c3f 2%, #e13e33 98%);
+	background-image: linear-gradient(to bottom,#ee4c3f 2%, #e13e33 98%);
+	-webkit-box-shadow: inset 0 1px 0 #ef786f, inset 0 -1px 0 #da3c31, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 #ef786f, inset 0 -1px 0 #da3c31, 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-danger:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-danger:hover:after {
+	background-color: rgba(243, 137, 129, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-danger:focus:after {
+	border: inherit;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-danger:active:after {
+	background-color: rgba(146, 12, 2, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless {
+	border: none;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	background: transparent;
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless:hover:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless:active {
+	opacity: 0.7;
+	filter: alpha(opacity=70) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless:active:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless-colored {
+	border: none;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	background: transparent;
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless-colored:hover {
+	color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless-colored:hover:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless-colored:active {
+	opacity: 0.7;
+	filter: alpha(opacity=70) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-borderless-colored:active:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-quiet {
+	visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-quiet:focus, .org_osbee_vaadin_addons_designer_overlay .v-button-quiet:hover {
+	visibility: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-quiet [class*="wrap"] {
+	visibility: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-quiet [class*="caption"] {
+	display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-link {
+	border: none;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	background: transparent;
+	color: inherit;
+	cursor: pointer;
+	color: #197de1;
+	text-decoration: underline;
+	font-weight: inherit;
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-link:hover:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-link:active {
+	opacity: 0.7;
+	filter: alpha(opacity=70) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-link:active:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-link:hover {
+	color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-link.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-tiny {
+	height: 28px;
+	padding: 0 13px;
+	
+	
+	font-size: 12px;
+	
+	border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-tiny:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-small {
+	height: 31px;
+	padding: 0 14px;
+	
+	
+	font-size: 14px;
+	
+	border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-small:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-large {
+	height: 44px;
+	padding: 0 19px;
+	
+	
+	font-size: 20px;
+	
+	border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-large:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-huge {
+	height: 59px;
+	padding: 0 26px;
+	
+	
+	font-size: 26px;
+	
+	border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-huge:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-align-right [class*="wrap"] {
+	display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-align-right .v-icon {
+	float: right;
+	margin-left: 13px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-align-right .v-icon  + span:not(:empty) {
+	margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-align-top {
+	height: auto;
+	padding-top: 5px;
+	padding-bottom: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-align-top [class*="wrap"] {
+	display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-align-top .v-icon {
+	display: block;
+	margin-left: auto;
+	margin-right: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-align-top .v-icon  + span:not(:empty) {
+	margin-top: 7px;
+	margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-only {
+	width: 37px;
+	padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-only.v-button-tiny {
+	width: 28px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-only.v-button-small {
+	width: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-only.v-button-large {
+	width: 44px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-only.v-button-huge {
+	width: 59px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-icon-only .v-button-caption {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox {
+	position: relative;
+	line-height: 19px;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-has-width label {
+	white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox {
+	padding-left: 25px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox label {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input {
+	position: absolute;
+	clip: rect(0, 0, 0, 0);
+	left: 0.2em;
+	top: 0.2em;
+	z-index: 0;
+	margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input:focus ~ label:before {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input ~ label:after {
+	content: "";
+	display: inline-block;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 19px;
+	height: 19px;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border-radius: 4px;
+	font-size: 13px;
+	text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input ~ label:before {
+	height: 18.5px;
+	padding: 0 9px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	padding: 0;
+	height: 19px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input ~ label:after {
+	content: "\f00c";
+	font-family: ThemeIcons;
+	color: transparent;
+	-webkit-transition: color 100ms;
+	-moz-transition: color 100ms;
+	transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input:active ~ label:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox > input:checked ~ label:after {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-checkbox > label .v-icon {
+	margin: 0 6px 0 3px;
+	min-width: 1em;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-disabled  > label, .org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-disabled  > .v-icon {
+	cursor: default;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-disabled  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-disabled > input:active ~ label:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-readonly  > label, .org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-readonly  > .v-icon {
+	cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-readonly  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-readonly > input:active ~ label:after {
+	background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox.v-readonly > input ~ label:after {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-small {
+	position: relative;
+	line-height: 16px;
+	white-space: nowrap;
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-has-width label {
+	white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small {
+	padding-left: 21px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small label {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input {
+	position: absolute;
+	clip: rect(0, 0, 0, 0);
+	left: 0.2em;
+	top: 0.2em;
+	z-index: 0;
+	margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input:focus ~ label:before {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input ~ label:after {
+	content: "";
+	display: inline-block;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 16px;
+	height: 16px;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border-radius: 4px;
+	font-size: 11px;
+	text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input ~ label:before {
+	height: 15.5px;
+	padding: 0 7px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	padding: 0;
+	height: 16px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input ~ label:after {
+	content: "\f00c";
+	font-family: ThemeIcons;
+	color: transparent;
+	-webkit-transition: color 100ms;
+	-moz-transition: color 100ms;
+	transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input:active ~ label:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > input:checked ~ label:after {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small > label .v-icon {
+	margin: 0 5px 0 3px;
+	min-width: 1em;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-disabled  > label, .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-disabled  > .v-icon {
+	cursor: default;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-disabled  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-disabled > input:active ~ label:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-readonly  > label, .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-readonly  > .v-icon {
+	cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-readonly  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-readonly > input:active ~ label:after {
+	background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-small.v-readonly > input ~ label:after {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-large {
+	position: relative;
+	line-height: 22px;
+	white-space: nowrap;
+	font-size: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-has-width label {
+	white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large {
+	padding-left: 29px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large label {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input {
+	position: absolute;
+	clip: rect(0, 0, 0, 0);
+	left: 0.2em;
+	top: 0.2em;
+	z-index: 0;
+	margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input:focus ~ label:before {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input ~ label:after {
+	content: "";
+	display: inline-block;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 22px;
+	height: 22px;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border-radius: 4px;
+	font-size: 15px;
+	text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input ~ label:before {
+	height: 22px;
+	padding: 0 10px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	padding: 0;
+	height: 22px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input ~ label:after {
+	content: "\f00c";
+	font-family: ThemeIcons;
+	color: transparent;
+	-webkit-transition: color 100ms;
+	-moz-transition: color 100ms;
+	transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input:active ~ label:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > input:checked ~ label:after {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large > label .v-icon {
+	margin: 0 7px 0 4px;
+	min-width: 1em;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-disabled  > label, .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-disabled  > .v-icon {
+	cursor: default;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-disabled  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-disabled > input:active ~ label:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-readonly  > label, .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-readonly  > .v-icon {
+	cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-readonly  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-readonly > input:active ~ label:after {
+	background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-checkbox-large.v-readonly > input ~ label:after {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect {
+	position: relative;
+	width: 185px;
+	height: 37px;
+	border-radius: 4px;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class*="input"] {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 37px;
+	border-radius: 4px;
+	padding: 4px 9px;
+	border: 1px solid #c5c5c5;
+	background: white;
+	color: #474747;
+	-webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	width: 100% !important;
+	height: 100%;
+	padding-right: 38px;
+	border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-filterselect [class*="input"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-filterselect [class*="input"] {
+	line-height: 37px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class*="input"].v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class*="input"]:focus {
+	outline: none;
+	-webkit-transition: none;
+	-moz-transition: none;
+	transition: none;
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class*="input"][class*="prompt"] {
+	color: #a3a3a3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect .v-icon + [class*="input"] {
+	padding-left: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect img.v-icon {
+	max-height: 37px;
+	margin-left: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect span.v-icon {
+	color: #474747;
+	width: 37px;
+	line-height: 1;
+	padding-top: 0.12em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect[class*="prompt"] > [class*="input"] {
+	color: #a3a3a3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class$="button"] {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	position: absolute;
+	width: 37px;
+	top: 1px;
+	right: 1px;
+	bottom: 1px;
+	border-left: 1px solid #e4e4e4;
+	color: #a3a3a3;
+	border-radius: 0 3px 3px 0;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-filterselect [class$="button"] {
+	background-color: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class$="button"]:before {
+	font-family: ThemeIcons;
+	content: "\f078";
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+	position: absolute;
+	width: 37px;
+	text-align: center;
+	top: 50%;
+	line-height: 1;
+	margin-top: -0.47em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class$="button"]:hover:before {
+	color: #474747;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect [class$="button"]:active:after {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	border-radius: inherit;
+	background-color: rgba(128, 128, 128, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect.v-disabled [class$="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect.v-disabled [class$="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect.v-readonly [class*="input"] {
+	background: #fafafa;
+	color: #464646;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect.v-readonly [class*="input"]:focus {
+	box-shadow: none;
+	border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect.v-readonly [class$="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect.v-readonly [class$="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect .v-icon {
+	position: absolute;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-error .v-filterselect-input {
+	border-color: #ed473b !important;
+	background: #fffbfb;
+	color: #6c2621;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-error .v-filterselect-button {
+	color: #ed473b;
+	border-color: #ed473b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup {
+	margin-top: 5px !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup[class*="animate-in"] {
+	-webkit-animation: valo-overlay-animate-in 120ms;
+	-moz-animation: valo-overlay-animate-in 120ms;
+	animation: valo-overlay-animate-in 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup [class$="suggestmenu"] {
+	padding: 4px 4px;
+	border-radius: 4px;
+	background-color: white;
+	color: #474747;
+	-webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+	box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+	-webkit-backface-visibility: hidden;
+	-moz-backface-visibility: hidden;
+	-ms-backface-visibility: hidden;
+	backface-visibility: hidden;
+	padding: 4px 4px;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	position: relative;
+	z-index: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup [class$="suggestmenu"][style*="height"] {
+	-webkit-box-sizing: content-box;
+	-moz-box-sizing: content-box;
+	box-sizing: content-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup table, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup tbody, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup tr, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup td {
+	display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup .gwt-MenuItem {
+	cursor: pointer;
+	line-height: 27px;
+	padding: 0 20px 0 10px;
+	border-radius: 3px;
+	font-weight: 400;
+	white-space: nowrap;
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup .gwt-MenuItem:active:before {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	background: #0957a6;
+	opacity: 0.15;
+	filter: alpha(opacity=15.0) ;
+	pointer-events: none;
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup .gwt-MenuItem .v-icon {
+	max-height: 27px;
+	margin-right: 5px;
+	min-width: 1em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup .gwt-MenuItem-selected {
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	color: #ecf2f8;
+	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup [class$="status"] {
+	position: absolute;
+	right: 4px;
+	background: rgba(212, 212, 212, 0.9);
+	color: #3b3b3b;
+	border-radius: 0 0 4px 4px;
+	height: 23px;
+	bottom: -23px;
+	font-size: 12px;
+	line-height: 23px;
+	padding: 0 6px;
+	cursor: default;
+	pointer-events: none;
+	-webkit-animation: valo-animate-in-slide-down 200ms 80ms backwards;
+	-moz-animation: valo-animate-in-slide-down 200ms 80ms backwards;
+	animation: valo-animate-in-slide-down 200ms 80ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup [class$="status"]  > * {
+	color: #3b3b3b;
+	text-decoration: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="page"] {
+	position: absolute;
+	z-index: 3;
+	right: 0;
+	opacity: 0.2;
+	filter: alpha(opacity=20) ;
+	cursor: pointer;
+	-webkit-transition: all 200ms;
+	-moz-transition: all 200ms;
+	transition: all 200ms;
+	width: 25px;
+	height: 25px;
+	line-height: 25px;
+	text-align: center;
+	font-family: ThemeIcons;
+	-webkit-transform: scale(0.8);
+	-moz-transform: scale(0.8);
+	-ms-transform: scale(0.8);
+	-o-transform: scale(0.8);
+	transform: scale(0.8);
+	color: #464646;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="page"]:after {
+	content: "";
+	position: absolute;
+	display: block;
+	border-radius: 50%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="page"]:hover {
+	opacity: 1;
+	filter: none ;
+	background: rgba(250, 250, 250, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="page"]:hover:after {
+	top: -10px;
+	bottom: -10px;
+	left: -20px;
+	right: -20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="page"] span {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup:hover div[class*="page"] {
+	-webkit-transform: scale(1);
+	-moz-transform: scale(1);
+	-ms-transform: scale(1);
+	-o-transform: scale(1);
+	transform: scale(1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="prev"] {
+	top: 0;
+	-webkit-transform-origin: 100% 0%;
+	-moz-transform-origin: 100% 0%;
+	-ms-transform-origin: 100% 0%;
+	-o-transform-origin: 100% 0%;
+	transform-origin: 100% 0%;
+	border-radius: 0 4px 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="prev"]:before {
+	content: "\f0d8";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="next"] {
+	bottom: 0;
+	-webkit-transform-origin: 100% 100%;
+	-moz-transform-origin: 100% 100%;
+	-ms-transform-origin: 100% 100%;
+	-o-transform-origin: 100% 100%;
+	transform-origin: 100% 100%;
+	border-radius: 4px 0 4px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="next"]:before {
+	content: "\f0d7";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-suggestpopup div[class*="-off"] {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-no-input {
+	cursor: pointer;
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-no-input [class*="input"] {
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	cursor: inherit;
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	text-shadow: inherit;
+	text-overflow: ellipsis;
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-no-input [class*="input"]:focus {
+	outline: none;
+	-webkit-transition: none;
+	-moz-transition: none;
+	transition: none;
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-no-input [class$="button"] {
+	border-left: none !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-no-input:hover [class$="button"]:before {
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-borderless .v-filterselect-input {
+	border: none;
+	border-radius: 0;
+	background: transparent;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-borderless .v-filterselect-input:focus {
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-borderless .v-filterselect-input[class*="prompt"] {
+	color: inherit;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-borderless .v-filterselect-button {
+	border: none;
+	color: inherit;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-borderless.v-filterselect-prompt .v-filterselect-input {
+	color: inherit;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-align-right input {
+	text-align: right;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-align-center input {
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny {
+	height: 28px;
+	
+	font-size: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny [class*="input"] {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 28px;
+	
+	padding: 3px 5px;
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	width: 100% !important;
+	height: 100%;
+	padding-right: 29px;
+	border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny [class*="input"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny [class*="input"] {
+	line-height: 28px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny .v-icon + [class*="input"] {
+	padding-left: 28px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny img.v-icon {
+	max-height: 28px;
+	margin-left: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny span.v-icon {
+	
+	width: 28px;
+	line-height: 1;
+	padding-top: 0.12em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny [class$="button"] {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	position: absolute;
+	width: 28px;
+	border-radius: 0 4px 4px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny [class$="button"]:before {
+	font-family: ThemeIcons;
+	content: "\f078";
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+	position: absolute;
+	width: 28px;
+	text-align: center;
+	top: 50%;
+	line-height: 1;
+	margin-top: -0.47em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny [class$="button"]:active:after {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny.v-disabled [class$="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny.v-disabled [class$="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny.v-readonly [class*="input"] {
+	background: #fafafa;
+	color: #464646;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny.v-readonly [class*="input"]:focus {
+	box-shadow: none;
+	border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny.v-readonly [class$="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-tiny.v-readonly [class$="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small {
+	height: 31px;
+	
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact [class*="input"], .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small [class*="input"] {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 31px;
+	
+	padding: 3px 6px;
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	width: 100% !important;
+	height: 100%;
+	padding-right: 32px;
+	border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact [class*="input"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact [class*="input"], .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small [class*="input"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small [class*="input"] {
+	line-height: 31px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact .v-icon + [class*="input"], .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small .v-icon + [class*="input"] {
+	padding-left: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact img.v-icon, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small img.v-icon {
+	max-height: 31px;
+	margin-left: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact span.v-icon, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small span.v-icon {
+	
+	width: 31px;
+	line-height: 1;
+	padding-top: 0.12em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact [class$="button"], .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small [class$="button"] {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	position: absolute;
+	width: 31px;
+	border-radius: 0 4px 4px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact [class$="button"]:before, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small [class$="button"]:before {
+	font-family: ThemeIcons;
+	content: "\f078";
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+	position: absolute;
+	width: 31px;
+	text-align: center;
+	top: 50%;
+	line-height: 1;
+	margin-top: -0.47em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact [class$="button"]:active:after, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small [class$="button"]:active:after {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact.v-disabled, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact.v-disabled [class$="button"], .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small.v-disabled [class$="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact.v-disabled [class$="button"]:active:after, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small.v-disabled [class$="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact.v-readonly [class*="input"], .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small.v-readonly [class*="input"] {
+	background: #fafafa;
+	color: #464646;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact.v-readonly [class*="input"]:focus, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small.v-readonly [class*="input"]:focus {
+	box-shadow: none;
+	border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact.v-readonly [class$="button"], .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small.v-readonly [class$="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-compact.v-readonly [class$="button"]:active:after, .org_osbee_vaadin_addons_designer_overlay .v-filterselect-small.v-readonly [class$="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-small {
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large {
+	height: 44px;
+	
+	font-size: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large [class*="input"] {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 44px;
+	
+	padding: 5px 8px;
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	width: 100% !important;
+	height: 100%;
+	padding-right: 45px;
+	border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-large [class*="input"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-large [class*="input"] {
+	line-height: 44px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large .v-icon + [class*="input"] {
+	padding-left: 44px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large img.v-icon {
+	max-height: 44px;
+	margin-left: 8px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large span.v-icon {
+	
+	width: 44px;
+	line-height: 1;
+	padding-top: 0.12em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large [class$="button"] {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	position: absolute;
+	width: 44px;
+	border-radius: 0 4px 4px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large [class$="button"]:before {
+	font-family: ThemeIcons;
+	content: "\f078";
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+	position: absolute;
+	width: 44px;
+	text-align: center;
+	top: 50%;
+	line-height: 1;
+	margin-top: -0.47em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large [class$="button"]:active:after {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large.v-disabled [class$="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large.v-disabled [class$="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large.v-readonly [class*="input"] {
+	background: #fafafa;
+	color: #464646;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large.v-readonly [class*="input"]:focus {
+	box-shadow: none;
+	border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large.v-readonly [class$="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-large.v-readonly [class$="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge {
+	height: 59px;
+	
+	font-size: 26px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge [class*="input"] {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 59px;
+	
+	padding: 7px 10px;
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	width: 100% !important;
+	height: 100%;
+	padding-right: 60px;
+	border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge [class*="input"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge [class*="input"] {
+	line-height: 59px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge .v-icon + [class*="input"] {
+	padding-left: 59px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge img.v-icon {
+	max-height: 59px;
+	margin-left: 10px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge span.v-icon {
+	
+	width: 59px;
+	line-height: 1;
+	padding-top: 0.12em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge [class$="button"] {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	position: absolute;
+	width: 59px;
+	border-radius: 0 4px 4px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge [class$="button"]:before {
+	font-family: ThemeIcons;
+	content: "\f078";
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+	position: absolute;
+	width: 59px;
+	text-align: center;
+	top: 50%;
+	line-height: 1;
+	margin-top: -0.47em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge [class$="button"]:active:after {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge.v-disabled [class$="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge.v-disabled [class$="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge.v-readonly [class*="input"] {
+	background: #fafafa;
+	color: #464646;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge.v-readonly [class*="input"]:focus {
+	box-shadow: none;
+	border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge.v-readonly [class$="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-filterselect-huge.v-readonly [class$="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-well {
+	background: #f5f5f5;
+	color: #454545;
+	-webkit-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05);
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-well  > div > [class*="-caption"] {
+	background: transparent;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-well  > .v-margin-top {
+	padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-well  > .v-margin-right {
+	padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-well  > .v-margin-bottom {
+	padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-well  > .v-margin-left {
+	padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-card {
+	background: white;
+	color: #474747;
+	border-radius: 4px;
+	border: 1px solid #d5d5d5;
+	-webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-card  > .v-margin-top {
+	padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-card  > .v-margin-right {
+	padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-card  > .v-margin-bottom {
+	padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-card  > .v-margin-left {
+	padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group {
+	white-space: nowrap;
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget ~ .v-widget:not(:last-child) {
+	border-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget:last-child {
+	border-top-left-radius: 0;
+	border-bottom-left-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget:first-child, .org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-caption:first-child + .v-widget {
+	border-top-right-radius: 0;
+	border-bottom-right-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget ~ .v-widget.first.first {
+	border-radius: 4px 0 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget ~ .v-widget.last.last {
+	border-radius: 0 4px 4px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget {
+	vertical-align: middle;
+	margin-left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget:first-child {
+	margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget:focus, .org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget[class*="focus"], .org_osbee_vaadin_addons_designer_overlay .v-csslayout-v-component-group .v-widget [class*="focus"] {
+	position: relative;
+	z-index: 5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-form fieldset {
+	border: none;
+	padding: 0;
+	margin: 0;
+	height: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-form-content {
+	height: 100%;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="spacing"] > tbody > [class*="row"] > td {
+	padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="spacing"] > tbody > [class*="firstrow"] > td {
+	padding-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="margin-top"] > tbody > [class*="firstrow"] > td {
+	padding-top: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="margin-bottom"] > tbody > [class*="lastrow"] > td {
+	padding-bottom: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="margin-left"] > tbody > [class*="row"] > [class*="captioncell"] {
+	padding-left: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h2, .org_osbee_vaadin_addons_designer_overlay [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h3, .org_osbee_vaadin_addons_designer_overlay [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h4 {
+	left: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] {
+	padding-right: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h2, .org_osbee_vaadin_addons_designer_overlay [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h3, .org_osbee_vaadin_addons_designer_overlay [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h4 {
+	right: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout > table {
+	border-spacing: 0;
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.v-has-width > table, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.v-has-width .v-formlayout-contentcell {
+	width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout-error-indicator {
+	width: 19px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout-captioncell {
+	vertical-align: top;
+	line-height: 36px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout-captioncell .v-caption {
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout-captioncell .v-caption-h2, .org_osbee_vaadin_addons_designer_overlay .v-formlayout-captioncell .v-caption-h3, .org_osbee_vaadin_addons_designer_overlay .v-formlayout-captioncell .v-caption-h4 {
+	height: 3em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout-contentcell .v-checkbox, .org_osbee_vaadin_addons_designer_overlay .v-formlayout-contentcell .v-radiobutton {
+	font-weight: 400;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout-contentcell  > .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-formlayout-contentcell  > .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-formlayout-contentcell  > .v-label-h4 {
+	position: absolute;
+	left: 0;
+	right: 0;
+	width: auto !important;
+	margin-top: -0.5em;
+	padding-bottom: 0.5em;
+	border-bottom: 1px solid #dfdfdf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table {
+	padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > tr > td {
+	padding-top: 0;
+	height: 37px;
+	border-bottom: 1px solid #eaeaea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="lastrow"] > td {
+	border-bottom: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > tr > [class*="captioncell"] {
+	color: #7d7d7d;
+	text-align: right;
+	padding-left: 13px;
+	line-height: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"] {
+	padding-right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textfield, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textarea, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-filterselect, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-datefield, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-filterselect-input, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-datefield-textfield {
+	width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textfield, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textarea, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-filterselect input, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-datefield input, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-richtextarea {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 37px;
+	border-radius: 0;
+	padding: 4px 7px;
+	
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	background: transparent;
+	border: none;
+	color: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textfield, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textfield, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textarea, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textarea, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-filterselect input, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-filterselect input, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-datefield input, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-datefield input, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-richtextarea, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-richtextarea {
+	line-height: 37px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textfield.v-disabled, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textarea.v-disabled, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-filterselect input.v-disabled, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-datefield input.v-disabled, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-richtextarea.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textfield:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textarea:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-filterselect input:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-datefield input:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-richtextarea:focus {
+	outline: none;
+	-webkit-transition: none;
+	-moz-transition: none;
+	transition: none;
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), none;
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), none;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textfield:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textarea:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-filterselect input:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-datefield input:focus, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-richtextarea:focus {
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textfield-prompt, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textarea-prompt, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-filterselect-prompt input, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-datefield-prompt input {
+	color: #a3a3a3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-textarea, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-richtextarea {
+	height: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h4 {
+	border-bottom: none;
+	left: 0;
+	right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light  > table > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h4 {
+	margin-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light .v-richtextarea {
+	margin: 5px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light .v-filterselect-button, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light .v-datefield-button {
+	border: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light .v-filterselect-button:active:after, .org_osbee_vaadin_addons_designer_overlay .v-formlayout.light .v-datefield-button:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light .v-datefield-button {
+	right: 0;
+	left: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-formlayout.light .v-checkbox {
+	margin-left: 7px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller {
+	position: absolute;
+	z-index: 1;
+	outline: none;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-horizontal {
+	left: 0;
+	right: 0;
+	bottom: 0;
+	overflow-y: hidden;
+	-ms-overflow-y: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-vertical {
+	right: 0;
+	top: 0;
+	bottom: 0;
+	overflow-x: hidden;
+	-ms-overflow-x: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-tablewrapper {
+	position: absolute;
+	overflow: hidden;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	z-index: 5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-tablewrapper > table {
+	border-spacing: 0;
+	table-layout: fixed;
+	width: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header-deco, .org_osbee_vaadin_addons_designer_overlay .v-grid-footer-deco {
+	position: absolute;
+	right: 0;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-horizontal-scrollbar-deco {
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header, .org_osbee_vaadin_addons_designer_overlay .v-grid-body, .org_osbee_vaadin_addons_designer_overlay .v-grid-footer {
+	position: absolute;
+	left: 0;
+	width: inherit;
+	z-index: 10;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header, .org_osbee_vaadin_addons_designer_overlay .v-grid-header-deco {
+	top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-footer, .org_osbee_vaadin_addons_designer_overlay .v-grid-footer-deco {
+	bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-body {
+	z-index: 0;
+	top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-body .v-grid-row {
+	position: absolute;
+	top: 0;
+	left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row {
+	display: block;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-row, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-grid-row {
+	float: left;
+	clear: left;
+	margin-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row  > td, .org_osbee_vaadin_addons_designer_overlay .v-grid-row  > th {
+	background-color: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row {
+	width: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell {
+	display: block;
+	float: left;
+	padding: 2px;
+	white-space: nowrap;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	overflow: hidden;
+	font-size: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell.frozen {
+	position: relative;
+	z-index: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer {
+	position: absolute;
+	display: block;
+	background-color: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer  > td {
+	width: 100%;
+	height: 100%;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-spacer, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-grid-spacer {
+	margin-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-vertical, .org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-horizontal {
+	border: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-vertical {
+	border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-horizontal {
+	border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-tablewrapper {
+	border: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid .header-drag-table {
+	border-spacing: 0;
+	position: relative;
+	table-layout: fixed;
+	width: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid .header-drag-table .v-grid-header {
+	position: absolute;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid .header-drag-table .v-grid-header  > .v-grid-cell {
+	border: 1px solid #d4d4d4;
+	margin-top: -10px;
+	opacity: 0.9;
+	filter: alpha(opacity=90);
+	z-index: 30000;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid .header-drag-table .v-grid-header  > .v-grid-drop-marker {
+	background-color: #197de1;
+	position: absolute;
+	width: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu {
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	border-radius: 0;
+	position: absolute;
+	top: 0;
+	right: 0;
+	background-color: #fafafa;
+	border: 1px solid #d4d4d4;
+	padding: 0;
+	z-index: 5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.v-grid-sidebar-popup {
+	right: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu .v-grid-sidebar-button {
+	background: transparent;
+	border: none;
+	color: inherit;
+	cursor: pointer;
+	outline: none;
+	padding: 0 4px;
+	text-align: right;
+	line-height: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu .v-grid-sidebar-button[disabled] {
+	cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu .v-grid-sidebar-button::-moz-focus-inner {
+	border: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu .v-grid-sidebar-button:after {
+	content: "\f0c9";
+	display: block;
+	font-family: ThemeIcons, sans-serif;
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.closed {
+	border-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-button {
+	width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-button:after {
+	content: "\f0c9";
+	font-size: 14px;
+	line-height: 1;
+}
+
+.v-ie .org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-button {
+	vertical-align: middle;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-button:after {
+	vertical-align: middle;
+	text-align: center;
+	display: inline;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu .v-grid-sidebar-content {
+	padding: 4px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu .v-grid-sidebar-content .gwt-MenuBar .gwt-MenuItem .column-hiding-toggle {
+	text-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell {
+	background-color: white;
+	padding: 0 18px;
+	line-height: 37px;
+	text-overflow: ellipsis;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell  > * {
+	line-height: 1.55;
+	vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell  > div {
+	display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell.frozen {
+	-webkit-box-shadow: 1px 0 2px rgba(0, 0, 0, 0.1);
+	box-shadow: 1px 0 2px rgba(0, 0, 0, 0.1);
+	border-right: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell.frozen  + th, .org_osbee_vaadin_addons_designer_overlay .v-grid-cell.frozen  + td {
+	border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row > td, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div {
+	border-left: 1px solid #d4d4d4;
+	border-bottom: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row > td:first-child, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div:first-child {
+	border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells.frozen > div {
+	-webkit-box-shadow: 1px 0 2px rgba(0, 0, 0, 0.1);
+	box-shadow: 1px 0 2px rgba(0, 0, 0, 0.1);
+	border-right: 1px solid #d4d4d4;
+	border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row-stripe > td {
+	background-color: #f5f5f5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row-selected > td {
+	background: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row-focused > td {
+	
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header th {
+	position: relative;
+	background-color: #fafafa;
+	font-size: 14px;
+	font-weight: inherit;
+	border-left: 1px solid #d4d4d4;
+	border-bottom: 1px solid #d4d4d4;
+	
+	text-align: left;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header th:first-child {
+	border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header .sort-asc, .org_osbee_vaadin_addons_designer_overlay .v-grid-header .sort-desc {
+	padding-right: 35px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header .sort-asc:after, .org_osbee_vaadin_addons_designer_overlay .v-grid-header .sort-desc:after {
+	font-family: ThemeIcons, sans-serif;
+	content: "\f0de" " " attr(sort-order);
+	position: absolute;
+	right: 18px;
+	font-size: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header .sort-desc:after {
+	content: "\f0dd" " " attr(sort-order);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-column-resize-handle {
+	position: absolute;
+	width: 36px;
+	right: -18px;
+	top: 0px;
+	bottom: 0px;
+	cursor: col-resize;
+	z-index: 10;
+	-webkit-user-select: none;
+	-khtml-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-footer td {
+	background-color: #fafafa;
+	font-size: 14px;
+	font-weight: inherit;
+	border-left: 1px solid #d4d4d4;
+	border-top: 1px solid #d4d4d4;
+	border-bottom: none;
+	
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-footer td:first-child {
+	border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header .v-grid-cell, .org_osbee_vaadin_addons_designer_overlay .v-grid-footer .v-grid-cell {
+	overflow: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-column-header-content, .org_osbee_vaadin_addons_designer_overlay .v-grid-column-footer-content {
+	width: 100%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	line-height: 37px;
+	vertical-align: baseline;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header-deco {
+	border-top: 1px solid #d4d4d4;
+	border-right: 1px solid #d4d4d4;
+	background-color: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-footer-deco {
+	border-bottom: 1px solid #d4d4d4;
+	border-right: 1px solid #d4d4d4;
+	background-color: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-horizontal-scrollbar-deco {
+	background-color: #fafafa;
+	border: 1px solid #d4d4d4;
+	border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell-focused {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell-focused:before {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	border: 2px solid #197de1;
+	display: none;
+	pointer-events: none;
+}
+
+.ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-cell-focused:before, .ie9 .org_osbee_vaadin_addons_designer_overlay .v-grid-cell-focused:before, .ie10 .org_osbee_vaadin_addons_designer_overlay .v-grid-cell-focused:before {
+	content: url(data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid:focus .v-grid-cell-focused:before {
+	display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid.v-disabled:focus .v-grid-cell-focused:before {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor {
+	position: absolute;
+	z-index: 20;
+	overflow: hidden;
+	left: 0;
+	right: 0;
+	border: 1px solid #d4d4d4;
+	box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	margin-top: -1px;
+	-webkit-box-shadow: 0 0 9px rgba(0, 0, 0, 0.2);
+	box-shadow: 0 0 9px rgba(0, 0, 0, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor.unbuffered .v-grid-editor-footer {
+	width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells {
+	position: relative;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells.frozen {
+	z-index: 2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div {
+	display: inline-block;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	vertical-align: middle;
+	background: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div:first-child {
+	border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div  > * {
+	vertical-align: middle;
+	display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div .v-filterselect {
+	padding-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div input[type="text"], .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div input[type="text"].v-filterselect-input, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div input[type="password"] {
+	padding-left: 18px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div input[type="text"]:not(.v-filterselect-input), .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div input[type="password"] {
+	padding-right: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div input[type="checkbox"] {
+	margin-left: 18px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div .v-textfield, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div .v-datefield, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div .v-filterselect {
+	min-width: 100%;
+	max-width: 100%;
+	min-height: 100%;
+	max-height: 100%;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div .v-datefield-button {
+	margin-left: -30px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div .v-filterselect-button {
+	margin-left: -27px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div .v-select, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div .v-select-select {
+	min-width: 100%;
+	max-width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells  > div.not-editable.v-grid-cell {
+	float: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells .error::before {
+	position: absolute;
+	display: block;
+	height: 0;
+	width: 0;
+	content: "";
+	border-top: 5px solid red;
+	border-right: 5px solid transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells .error, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells .error > input {
+	background-color: #fee;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-footer {
+	display: table;
+	height: 37px;
+	border-top: 1px solid #d4d4d4;
+	margin-top: -1px;
+	background: white;
+	padding: 0 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-footer  + .v-grid-editor-cells > div {
+	border-bottom: none;
+	border-top: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-footer:first-child {
+	border-top: none;
+	margin-top: 0;
+	border-bottom: 1px solid #d4d4d4;
+	margin-bottom: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-message, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-buttons {
+	display: table-cell;
+	white-space: nowrap;
+	vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-message {
+	width: 100%;
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-message  > div {
+	position: absolute;
+	width: 100%;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	line-height: 37px;
+	top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-save {
+	margin-right: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer {
+	padding-left: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer > td {
+	display: block;
+	padding: 0;
+	background-color: white;
+	border-top: 1px solid #eeeeee;
+	border-bottom: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer.stripe > td {
+	background-color: #f5f5f5;
+	border-top: 1px solid #e5e5e5;
+	border-bottom: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer-deco-container {
+	border-top: 1px solid transparent;
+	position: relative;
+	top: 0;
+	z-index: 5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer-deco {
+	top: 0;
+	left: 0;
+	width: 2px;
+	background-color: #197de1;
+	position: absolute;
+	height: 100%;
+	pointer-events: none;
+}
+
+.ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-spacer-deco:before, .ie9 .org_osbee_vaadin_addons_designer_overlay .v-grid-spacer-deco:before, .ie10 .org_osbee_vaadin_addons_designer_overlay .v-grid-spacer-deco:before {
+	content: url(data:image/svg+xml;charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjwvc3ZnPg==);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-cell > .v-progressbar {
+	width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid {
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	background-color: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header .v-grid-cell {
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header .v-grid-cell.dragged {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+	-webkit-transition: opacity 0.3s ease-in-out;
+	-moz-transition: opacity 0.3s ease-in-out;
+	transition: opacity 0.3s ease-in-out;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header .v-grid-cell.dragged-column-header {
+	margin-top: -19px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-footer .v-grid-cell {
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-header-deco {
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-footer-deco, .org_osbee_vaadin_addons_designer_overlay .v-grid-horizontal-scrollbar-deco {
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row-selected  > .v-grid-cell {
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	color: #c8dbed;
+	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+	border-color: #1d69b4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-row-selected  > .v-grid-cell-focused:before {
+	border-color: #71b0ef;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor {
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	border-color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-footer {
+	font-size: 14px;
+	padding: 0 6px;
+	background: #fafafa;
+	-webkit-animation: valo-grid-editor-footer-animate-in 200ms 120ms backwards;
+	-moz-animation: valo-grid-editor-footer-animate-in 200ms 120ms backwards;
+	animation: valo-grid-editor-footer-animate-in 200ms 120ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-footer:first-child {
+	-webkit-animation: valo-grid-editor-footer-animate-in-alt 200ms 120ms backwards;
+	-moz-animation: valo-grid-editor-footer-animate-in-alt 200ms 120ms backwards;
+	animation: valo-grid-editor-footer-animate-in-alt 200ms 120ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells {
+	z-index: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div:before {
+	content: "";
+	display: inline-block;
+	height: 100%;
+	vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div.not-editable.v-grid-cell {
+	float: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .error::before {
+	border-top: 9px solid #ed473b;
+	border-right: 9px solid transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .error, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .error > input {
+	background-color: #fffbfb;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-textfield, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-textfield-focus, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-datefield, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-datefield .v-textfield-focus, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-filterselect-input, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-filterselect-input:focus {
+	border: none;
+	border-radius: 0;
+	background: transparent;
+	-webkit-box-shadow: inset 0 1px 0 #f2f2f2;
+	box-shadow: inset 0 1px 0 #f2f2f2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div input[type="text"].v-datefield-textfield {
+	padding-left: 44.4px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-datefield-button {
+	margin-left: 0px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-filterselect-button {
+	margin-left: 0px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-textfield-focus, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-datefield .v-textfield-focus, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-filterselect-input:focus {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-select {
+	padding-left: 9px;
+	padding-right: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-checkbox {
+	margin: 0 9px 0 18px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-checkbox  > input[type="checkbox"] {
+	margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cells > div .v-checkbox  > label {
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-message > div:before {
+	display: inline-block;
+	color: #ed473b;
+	font-weight: 600;
+	width: 19px;
+	text-align: center;
+	content: "!";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-save, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cancel {
+	cursor: pointer;
+	color: #197de1;
+	text-decoration: underline;
+	font-weight: inherit;
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+	font-weight: 400;
+	text-decoration: none;
+	border: none;
+	background: transparent;
+	padding: 6px 6px;
+	margin: 0;
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-save:hover, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cancel:hover {
+	color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-editor-save.v-disabled, .org_osbee_vaadin_addons_designer_overlay .v-grid-editor-cancel.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-spacer {
+	margin-top: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.open .v-grid-sidebar-content {
+	margin: 0 0 2px;
+	padding: 4px 4px 2px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-sidebar.v-contextmenu.closed {
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller::-webkit-scrollbar {
+	border: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller::-webkit-scrollbar-thumb {
+	border-radius: 10px;
+	border: 4px solid transparent;
+	background: rgba(0, 0, 0, 0.3);
+	-webkit-background-clip: content-box;
+	background-clip: content-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-vertical::-webkit-scrollbar-thumb {
+	min-height: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-grid-scroller-horizontal::-webkit-scrollbar-thumb {
+	min-width: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 37px;
+	border-radius: 4px;
+	padding: 4px 9px;
+	border: 1px solid #c5c5c5;
+	background: white;
+	color: #474747;
+	-webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	width: 185px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textfield, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textfield {
+	line-height: 37px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield:focus {
+	outline: none;
+	-webkit-transition: none;
+	-moz-transition: none;
+	transition: none;
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield[class*="prompt"] {
+	color: #a3a3a3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-readonly {
+	background: #fafafa;
+	color: #464646;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-readonly:focus {
+	box-shadow: none;
+	border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-error {
+	border-color: #ed473b !important;
+	background: #fffbfb;
+	color: #6c2621;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-borderless {
+	border: none;
+	border-radius: 0;
+	background: transparent;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-borderless:focus {
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-borderless[class*="prompt"] {
+	color: inherit;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-tiny {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 28px;
+	border-radius: 4px;
+	padding: 3px 7px;
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	font-size: 12px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textfield-tiny, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textfield-tiny {
+	line-height: 28px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-compact, .org_osbee_vaadin_addons_designer_overlay .v-textfield-small {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 31px;
+	border-radius: 4px;
+	padding: 3px 8px;
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textfield-compact, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textfield-compact, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textfield-small, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textfield-small {
+	line-height: 31px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-small {
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-large {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 44px;
+	border-radius: 4px;
+	padding: 5px 10px;
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	font-size: 20px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textfield-large, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textfield-large {
+	line-height: 44px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-huge {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 59px;
+	border-radius: 4px;
+	padding: 7px 12px;
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	font-size: 26px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textfield-huge, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textfield-huge {
+	line-height: 59px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slot-inline-icon {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon {
+	padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon .v-captiontext {
+	font-size: 14px;
+	font-weight: 400;
+	padding-bottom: 0.3em;
+	padding-left: 1px;
+	margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon .v-icon {
+	position: absolute;
+	z-index: 10;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon span.v-icon {
+	left: 1px;
+	bottom: 1px;
+	width: 37px;
+	line-height: 35px;
+	text-align: center;
+	font-size: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon img.v-icon {
+	left: 11px;
+	bottom: 11px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-inline-icon  {
+	padding-left: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slot-inline-icon.v-slot-tiny {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-tiny {
+	padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-tiny .v-captiontext {
+	font-size: 14px;
+	font-weight: 400;
+	padding-bottom: 0.3em;
+	padding-left: 1px;
+	margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-tiny .v-icon {
+	position: absolute;
+	z-index: 10;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-tiny span.v-icon {
+	left: 1px;
+	bottom: 1px;
+	width: 28px;
+	line-height: 26px;
+	text-align: center;
+	font-size: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-tiny img.v-icon {
+	left: 6px;
+	bottom: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-inline-icon.v-textfield-tiny  {
+	padding-left: 28px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slot-inline-icon.v-slot-compact {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-compact {
+	padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-compact .v-captiontext {
+	font-size: 14px;
+	font-weight: 400;
+	padding-bottom: 0.3em;
+	padding-left: 1px;
+	margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-compact .v-icon {
+	position: absolute;
+	z-index: 10;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-compact span.v-icon {
+	left: 1px;
+	bottom: 1px;
+	width: 31px;
+	line-height: 29px;
+	text-align: center;
+	font-size: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-compact img.v-icon {
+	left: 8px;
+	bottom: 8px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-inline-icon.v-textfield-compact  {
+	padding-left: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slot-inline-icon.v-slot-small {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-small {
+	padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-small .v-captiontext {
+	font-size: 14px;
+	font-weight: 400;
+	padding-bottom: 0.3em;
+	padding-left: 1px;
+	margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-small .v-icon {
+	position: absolute;
+	z-index: 10;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-small span.v-icon {
+	left: 1px;
+	bottom: 1px;
+	width: 31px;
+	line-height: 29px;
+	text-align: center;
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-small img.v-icon {
+	left: 8px;
+	bottom: 8px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-inline-icon.v-textfield-small  {
+	padding-left: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slot-inline-icon.v-slot-large {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-large {
+	padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-large .v-captiontext {
+	font-size: 14px;
+	font-weight: 400;
+	padding-bottom: 0.3em;
+	padding-left: 1px;
+	margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-large .v-icon {
+	position: absolute;
+	z-index: 10;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-large span.v-icon {
+	left: 1px;
+	bottom: 1px;
+	width: 44px;
+	line-height: 42px;
+	text-align: center;
+	font-size: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-large img.v-icon {
+	left: 14px;
+	bottom: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-inline-icon.v-textfield-large  {
+	padding-left: 44px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slot-inline-icon.v-slot-huge {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-huge {
+	padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-huge .v-captiontext {
+	font-size: 14px;
+	font-weight: 400;
+	padding-bottom: 0.3em;
+	padding-left: 1px;
+	margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-huge .v-icon {
+	position: absolute;
+	z-index: 10;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-huge span.v-icon {
+	left: 1px;
+	bottom: 1px;
+	width: 59px;
+	line-height: 57px;
+	text-align: center;
+	font-size: 26px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-caption-inline-icon.v-caption-huge img.v-icon {
+	left: 22px;
+	bottom: 22px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-inline-icon.v-textfield-huge  {
+	padding-left: 59px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-align-right {
+	text-align: right;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textfield-align-center {
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 37px;
+	border-radius: 4px;
+	padding: 6px;
+	border: 1px solid #c5c5c5;
+	background: white;
+	color: #474747;
+	-webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	height: auto;
+	resize: none;
+	white-space: pre-wrap;
+	width: 185px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea {
+	line-height: 37px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea:focus {
+	outline: none;
+	-webkit-transition: none;
+	-moz-transition: none;
+	transition: none;
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea[class*="prompt"] {
+	color: #a3a3a3;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea {
+	line-height: inherit;
+	padding-top: 4px;
+	padding-bottom: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-readonly {
+	background: #fafafa;
+	color: #464646;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-readonly:focus {
+	box-shadow: none;
+	border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-error {
+	border-color: #ed473b !important;
+	background: #fffbfb;
+	color: #6c2621;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-borderless {
+	border: none;
+	border-radius: 0;
+	background: transparent;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-borderless:focus {
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-borderless[class*="prompt"] {
+	color: inherit;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-tiny {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 28px;
+	border-radius: 4px;
+	padding: 6px;
+	
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	height: auto;
+	resize: none;
+	white-space: pre-wrap;
+	font-size: 12px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-tiny, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-tiny {
+	line-height: 28px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-tiny, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-tiny {
+	line-height: inherit;
+	padding-top: 3px;
+	padding-bottom: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-small {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 31px;
+	border-radius: 4px;
+	padding: 6px;
+	
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	height: auto;
+	resize: none;
+	white-space: pre-wrap;
+	font-size: 14px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-small, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-small {
+	line-height: 31px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-small, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-small {
+	line-height: inherit;
+	padding-top: 3px;
+	padding-bottom: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-large {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 44px;
+	border-radius: 4px;
+	padding: 6px;
+	
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	height: auto;
+	resize: none;
+	white-space: pre-wrap;
+	font-size: 20px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-large, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-large {
+	line-height: 44px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-large, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-large {
+	line-height: inherit;
+	padding-top: 5px;
+	padding-bottom: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-huge {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 59px;
+	border-radius: 4px;
+	padding: 6px;
+	
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	height: auto;
+	resize: none;
+	white-space: pre-wrap;
+	font-size: 26px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-huge, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-huge {
+	line-height: 59px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-textarea-huge, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-textarea-huge {
+	line-height: inherit;
+	padding-top: 7px;
+	padding-bottom: 7px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-align-right {
+	text-align: right;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-textarea-align-center {
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield {
+	position: relative;
+	width: 185px;
+	height: 37px;
+	border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="textfield"] {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 37px;
+	border-radius: 4px;
+	padding: 4px 9px;
+	border: 1px solid #c5c5c5;
+	background: white;
+	color: #474747;
+	-webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	padding-left: 44.4px;
+	width: 100%;
+	height: 100%;
+	border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="textfield"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="textfield"] {
+	line-height: 37px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="textfield"].v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="textfield"]:focus {
+	outline: none;
+	-webkit-transition: none;
+	-moz-transition: none;
+	transition: none;
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="textfield"][class*="prompt"] {
+	color: #a3a3a3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield[class*="prompt"] > [class*="textfield"] {
+	color: #a3a3a3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="button"] {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	-webkit-appearance: none;
+	background: transparent;
+	padding: 0;
+	position: absolute;
+	z-index: 10;
+	width: 37px;
+	line-height: 35px;
+	text-align: center;
+	font: inherit;
+	outline: none;
+	margin: 0;
+	top: 1px;
+	bottom: 1px;
+	left: 1px;
+	border: none;
+	border-right: 1px solid #e4e4e4;
+	color: #a3a3a3;
+	border-radius: 3px 0 0 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="button"]:hover {
+	color: #474747;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="button"]:before {
+	font-family: ThemeIcons;
+	content: "\f073";
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield [class*="button"]:active:after {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	background-color: rgba(128, 128, 128, 0.2);
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield.v-disabled [class*="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield.v-disabled [class*="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield.v-readonly [class*="textfield"] {
+	background: #fafafa;
+	color: #464646;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield.v-readonly [class*="textfield"]:focus {
+	box-shadow: none;
+	border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield.v-readonly [class*="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield.v-readonly [class*="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-error .v-datefield-textfield {
+	border-color: #ed473b !important;
+	background: #fffbfb;
+	color: #6c2621;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-error .v-datefield-button {
+	color: #ed473b;
+	border-color: #ed473b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-full {
+	width: 240px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-day {
+	width: 185px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-month {
+	width: 120px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-year {
+	width: 104px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup {
+	padding: 4px 4px;
+	border-radius: 4px;
+	background-color: white;
+	color: #474747;
+	-webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+	box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+	-webkit-backface-visibility: hidden;
+	-moz-backface-visibility: hidden;
+	-ms-backface-visibility: hidden;
+	backface-visibility: hidden;
+	margin-top: 5px !important;
+	margin-bottom: 5px !important;
+	margin-right: 5px !important;
+	cursor: default;
+	width: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup[class*="animate-in"] {
+	-webkit-animation: valo-overlay-animate-in 120ms;
+	-moz-animation: valo-overlay-animate-in 120ms;
+	animation: valo-overlay-animate-in 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup[class*="animate-out"] {
+	-webkit-animation: valo-animate-out-fade 120ms;
+	-moz-animation: valo-animate-out-fade 120ms;
+	animation: valo-animate-out-fade 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup table {
+	border-collapse: collapse;
+	border-spacing: 0;
+	margin: 0 auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td {
+	padding: 2px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel {
+	font-size: 16px;
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel:focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 30px;
+	height: 26px;
+	border: 1px solid transparent;
+	line-height: 26px;
+	text-align: center;
+	font-size: 14px;
+	background: #fafafa;
+	border-radius: 2px;
+	-webkit-transition: color 200ms;
+	-moz-transition: color 200ms;
+	transition: color 200ms;
+	display: inline-block;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day:hover {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day-offmonth {
+	color: #a0a0a0;
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day-today {
+	color: #191919;
+	font-weight: 600;
+	border-color: #afafaf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-selected, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-selected:hover {
+	color: #c8dbed;
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	border: none;
+	font-weight: 600;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-focused {
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	position: relative;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-focused {
+	border-color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-outside-range, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-outside-range:hover {
+	color: #a0a0a0;
+	cursor: not-allowed;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-weekdays {
+	height: 26px;
+	color: rgba(133, 133, 133, 0.85);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-weekdays strong {
+	font: inherit;
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-header {
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="year"] button, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="month"] button {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	border: none;
+	background: transparent;
+	padding: 0;
+	margin: 0;
+	cursor: pointer;
+	color: transparent;
+	font-size: 0;
+	width: 19px;
+	height: 25px;
+	outline: none;
+	position: relative;
+	vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="year"] button:before, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="month"] button:before {
+	color: #a0a0a0;
+	font-size: 21px;
+	line-height: 24px;
+	-webkit-transition: color 200ms;
+	-moz-transition: color 200ms;
+	transition: color 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="year"] button:hover:before, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="month"] button:hover:before {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="year"] button.outside-range, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="month"] button.outside-range {
+	cursor: default;
+	opacity: 0.3;
+	filter: alpha(opacity=30.0) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="year"] button.outside-range:hover:before, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td[class*="month"] button.outside-range:hover:before {
+	color: #a0a0a0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-button-prevyear:before {
+	font-family: ThemeIcons;
+	content: "\f100";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-button-prevmonth:before {
+	font-family: ThemeIcons;
+	content: "\f104";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-button-nextyear:before {
+	font-family: ThemeIcons;
+	content: "\f101";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-button-nextmonth:before {
+	font-family: ThemeIcons;
+	content: "\f105";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td.v-datefield-calendarpanel-month {
+	width: 148px;
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-year td.v-datefield-calendarpanel-month {
+	width: 74px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-weeknumber, .org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-weekdays.v-datefield-calendarpanel-weeknumbers td:first-child {
+	width: 30px;
+	color: rgba(133, 133, 133, 0.85);
+	font-size: 14px;
+	display: inline-block;
+	text-align: left;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-weeknumber {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup .v-datefield-calendarpanel-weeknumbers .v-first:before {
+	content: "";
+	position: absolute;
+	top: 38px;
+	bottom: 0;
+	left: 0;
+	width: 34px;
+	border-top: 1px solid #eaeaea;
+	border-right: 1px solid #eaeaea;
+	border-top-right-radius: 4px;
+	border-bottom-left-radius: 4px;
+	background: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td.v-datefield-calendarpanel-time {
+	width: 100%;
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-popup td.v-datefield-calendarpanel-time .v-label {
+	display: inline;
+	margin: 0 0.1em;
+	font-weight: 400;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel {
+	font-size: 16px;
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel:focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 30px;
+	height: 26px;
+	border: 1px solid transparent;
+	line-height: 26px;
+	text-align: center;
+	font-size: 14px;
+	background: #fafafa;
+	border-radius: 2px;
+	-webkit-transition: color 200ms;
+	-moz-transition: color 200ms;
+	transition: color 200ms;
+	display: inline-block;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day:hover {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day-offmonth {
+	color: #a0a0a0;
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day-today {
+	color: #191919;
+	font-weight: 600;
+	border-color: #afafaf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-selected, .org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-selected:hover {
+	color: #c8dbed;
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	border: none;
+	font-weight: 600;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-focused {
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	position: relative;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-focused {
+	border-color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-outside-range, .org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-day.v-datefield-calendarpanel-day-outside-range:hover {
+	color: #a0a0a0;
+	cursor: not-allowed;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-weekdays {
+	height: 26px;
+	color: rgba(133, 133, 133, 0.85);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-weekdays strong {
+	font: inherit;
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-header {
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	border: none;
+	background: transparent;
+	padding: 0;
+	margin: 0;
+	cursor: pointer;
+	color: transparent;
+	font-size: 0;
+	width: 19px;
+	height: 25px;
+	outline: none;
+	position: relative;
+	vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button:before, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button:before {
+	color: #a0a0a0;
+	font-size: 21px;
+	line-height: 24px;
+	-webkit-transition: color 200ms;
+	-moz-transition: color 200ms;
+	transition: color 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button:hover:before, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button:hover:before {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button.outside-range, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button.outside-range {
+	cursor: default;
+	opacity: 0.3;
+	filter: alpha(opacity=30.0) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button.outside-range:hover:before, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button.outside-range:hover:before {
+	color: #a0a0a0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-prevyear:before {
+	font-family: ThemeIcons;
+	content: "\f100";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-prevmonth:before {
+	font-family: ThemeIcons;
+	content: "\f104";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-nextyear:before {
+	font-family: ThemeIcons;
+	content: "\f101";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-nextmonth:before {
+	font-family: ThemeIcons;
+	content: "\f105";
+}
+
+.org_osbee_vaadin_addons_designer_overlay td.v-datefield-calendarpanel-month {
+	width: 148px;
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-year td.v-datefield-calendarpanel-month {
+	width: 74px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-weeknumber, .org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-weekdays.v-datefield-calendarpanel-weeknumbers td:first-child {
+	width: 30px;
+	color: rgba(133, 133, 133, 0.85);
+	font-size: 14px;
+	display: inline-block;
+	text-align: left;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-weeknumber {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-calendarpanel-weeknumbers .v-first:before {
+	content: "";
+	position: absolute;
+	top: 38px;
+	bottom: 0;
+	left: 0;
+	width: 34px;
+	border-top: 1px solid #eaeaea;
+	border-right: 1px solid #eaeaea;
+	border-top-right-radius: 4px;
+	border-bottom-left-radius: 4px;
+	background: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td.v-datefield-calendarpanel-time {
+	width: 100%;
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td.v-datefield-calendarpanel-time .v-label {
+	display: inline;
+	margin: 0 0.1em;
+	font-weight: 400;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-borderless .v-datefield-textfield {
+	border: none;
+	border-radius: 0;
+	background: transparent;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-borderless .v-datefield-textfield:focus {
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-borderless .v-datefield-textfield[class*="prompt"] {
+	color: inherit;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-borderless .v-datefield-button {
+	border: none;
+	color: inherit;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-align-right input {
+	text-align: right;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-align-center input {
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny {
+	height: 28px;
+	border-radius: 4px;
+	font-size: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny [class*="textfield"] {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 28px;
+	border-radius: 4px;
+	padding: 3px 7px;
+	
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	padding-left: 33.6px;
+	width: 100%;
+	height: 100%;
+	border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny [class*="textfield"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny [class*="textfield"] {
+	line-height: 28px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny [class*="button"] {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	-webkit-appearance: none;
+	background: transparent;
+	padding: 0;
+	position: absolute;
+	z-index: 10;
+	width: 28px;
+	line-height: 28px;
+	text-align: center;
+	font: inherit;
+	outline: none;
+	margin: 0;
+	border-radius: 4px 0 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny [class*="button"]:before {
+	font-family: ThemeIcons;
+	content: "\f073";
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny [class*="button"]:active:after {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny.v-disabled [class*="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny.v-disabled [class*="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny.v-readonly [class*="textfield"] {
+	background: #fafafa;
+	color: #464646;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny.v-readonly [class*="textfield"]:focus {
+	box-shadow: none;
+	border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny.v-readonly [class*="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-tiny.v-readonly [class*="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact, .org_osbee_vaadin_addons_designer_overlay .v-datefield-small {
+	height: 31px;
+	border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact [class*="textfield"], .org_osbee_vaadin_addons_designer_overlay .v-datefield-small [class*="textfield"] {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 31px;
+	border-radius: 4px;
+	padding: 3px 8px;
+	
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	padding-left: 37.2px;
+	width: 100%;
+	height: 100%;
+	border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield-compact [class*="textfield"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-datefield-compact [class*="textfield"], .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield-small [class*="textfield"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-datefield-small [class*="textfield"] {
+	line-height: 31px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact [class*="button"], .org_osbee_vaadin_addons_designer_overlay .v-datefield-small [class*="button"] {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	-webkit-appearance: none;
+	background: transparent;
+	padding: 0;
+	position: absolute;
+	z-index: 10;
+	width: 31px;
+	line-height: 31px;
+	text-align: center;
+	font: inherit;
+	outline: none;
+	margin: 0;
+	border-radius: 4px 0 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact [class*="button"]:before, .org_osbee_vaadin_addons_designer_overlay .v-datefield-small [class*="button"]:before {
+	font-family: ThemeIcons;
+	content: "\f073";
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact [class*="button"]:active:after, .org_osbee_vaadin_addons_designer_overlay .v-datefield-small [class*="button"]:active:after {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact.v-disabled, .org_osbee_vaadin_addons_designer_overlay .v-datefield-small.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact.v-disabled [class*="button"], .org_osbee_vaadin_addons_designer_overlay .v-datefield-small.v-disabled [class*="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact.v-disabled [class*="button"]:active:after, .org_osbee_vaadin_addons_designer_overlay .v-datefield-small.v-disabled [class*="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact.v-readonly [class*="textfield"], .org_osbee_vaadin_addons_designer_overlay .v-datefield-small.v-readonly [class*="textfield"] {
+	background: #fafafa;
+	color: #464646;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact.v-readonly [class*="textfield"]:focus, .org_osbee_vaadin_addons_designer_overlay .v-datefield-small.v-readonly [class*="textfield"]:focus {
+	box-shadow: none;
+	border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact.v-readonly [class*="button"], .org_osbee_vaadin_addons_designer_overlay .v-datefield-small.v-readonly [class*="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-compact.v-readonly [class*="button"]:active:after, .org_osbee_vaadin_addons_designer_overlay .v-datefield-small.v-readonly [class*="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-small {
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large {
+	height: 44px;
+	border-radius: 4px;
+	font-size: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large [class*="textfield"] {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 44px;
+	border-radius: 4px;
+	padding: 5px 10px;
+	
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	padding-left: 52.8px;
+	width: 100%;
+	height: 100%;
+	border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield-large [class*="textfield"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-datefield-large [class*="textfield"] {
+	line-height: 44px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large [class*="button"] {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	-webkit-appearance: none;
+	background: transparent;
+	padding: 0;
+	position: absolute;
+	z-index: 10;
+	width: 44px;
+	line-height: 44px;
+	text-align: center;
+	font: inherit;
+	outline: none;
+	margin: 0;
+	border-radius: 4px 0 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large [class*="button"]:before {
+	font-family: ThemeIcons;
+	content: "\f073";
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large [class*="button"]:active:after {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large.v-disabled [class*="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large.v-disabled [class*="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large.v-readonly [class*="textfield"] {
+	background: #fafafa;
+	color: #464646;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large.v-readonly [class*="textfield"]:focus {
+	box-shadow: none;
+	border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large.v-readonly [class*="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-large.v-readonly [class*="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge {
+	height: 59px;
+	border-radius: 4px;
+	font-size: 26px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge [class*="textfield"] {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 59px;
+	border-radius: 4px;
+	padding: 7px 12px;
+	
+	
+	
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	padding-left: 70.8px;
+	width: 100%;
+	height: 100%;
+	border-radius: inherit;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-datefield-huge [class*="textfield"], .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-datefield-huge [class*="textfield"] {
+	line-height: 59px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge [class*="button"] {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	-webkit-appearance: none;
+	background: transparent;
+	padding: 0;
+	position: absolute;
+	z-index: 10;
+	width: 59px;
+	line-height: 59px;
+	text-align: center;
+	font: inherit;
+	outline: none;
+	margin: 0;
+	border-radius: 4px 0 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge [class*="button"]:before {
+	font-family: ThemeIcons;
+	content: "\f073";
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge [class*="button"]:active:after {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge.v-disabled [class*="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge.v-disabled [class*="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge.v-readonly [class*="textfield"] {
+	background: #fafafa;
+	color: #464646;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge.v-readonly [class*="textfield"]:focus {
+	box-shadow: none;
+	border-color: #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge.v-readonly [class*="button"] {
+	cursor: default;
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-datefield-huge.v-readonly [class*="button"]:active:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel {
+	font-size: 16px;
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel:focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 30px;
+	height: 26px;
+	border: 1px solid transparent;
+	line-height: 26px;
+	text-align: center;
+	font-size: 14px;
+	background: #fafafa;
+	border-radius: 2px;
+	-webkit-transition: color 200ms;
+	-moz-transition: color 200ms;
+	transition: color 200ms;
+	display: inline-block;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day:hover {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day-offmonth {
+	color: #a0a0a0;
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day-today {
+	color: #191919;
+	font-weight: 600;
+	border-color: #afafaf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-selected, .org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-selected:hover {
+	color: #c8dbed;
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	border: none;
+	font-weight: 600;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-focused {
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	position: relative;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-focused {
+	border-color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-outside-range, .org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-day.v-inline-datefield-calendarpanel-day-outside-range:hover {
+	color: #a0a0a0;
+	cursor: not-allowed;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-weekdays {
+	height: 26px;
+	color: rgba(133, 133, 133, 0.85);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-weekdays strong {
+	font: inherit;
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-header {
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	border: none;
+	background: transparent;
+	padding: 0;
+	margin: 0;
+	cursor: pointer;
+	color: transparent;
+	font-size: 0;
+	width: 19px;
+	height: 25px;
+	outline: none;
+	position: relative;
+	vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button:before, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button:before {
+	color: #a0a0a0;
+	font-size: 21px;
+	line-height: 24px;
+	-webkit-transition: color 200ms;
+	-moz-transition: color 200ms;
+	transition: color 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button:hover:before, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button:hover:before {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button.outside-range, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button.outside-range {
+	cursor: default;
+	opacity: 0.3;
+	filter: alpha(opacity=30.0) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td[class*="year"] button.outside-range:hover:before, .org_osbee_vaadin_addons_designer_overlay td[class*="month"] button.outside-range:hover:before {
+	color: #a0a0a0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-prevyear:before {
+	font-family: ThemeIcons;
+	content: "\f100";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-prevmonth:before {
+	font-family: ThemeIcons;
+	content: "\f104";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-nextyear:before {
+	font-family: ThemeIcons;
+	content: "\f101";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-button-nextmonth:before {
+	font-family: ThemeIcons;
+	content: "\f105";
+}
+
+.org_osbee_vaadin_addons_designer_overlay td.v-inline-datefield-calendarpanel-month {
+	width: 148px;
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-year td.v-inline-datefield-calendarpanel-month {
+	width: 74px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-weeknumber, .org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-weekdays.v-inline-datefield-calendarpanel-weeknumbers td:first-child {
+	width: 30px;
+	color: rgba(133, 133, 133, 0.85);
+	font-size: 14px;
+	display: inline-block;
+	text-align: left;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-weeknumber {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel-weeknumbers .v-first:before {
+	content: "";
+	position: absolute;
+	top: 38px;
+	bottom: 0;
+	left: 0;
+	width: 34px;
+	border-top: 1px solid #eaeaea;
+	border-right: 1px solid #eaeaea;
+	border-top-right-radius: 4px;
+	border-bottom-left-radius: 4px;
+	background: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td.v-inline-datefield-calendarpanel-time {
+	width: 100%;
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay td.v-inline-datefield-calendarpanel-time .v-label {
+	display: inline;
+	margin: 0 0.1em;
+	font-weight: 400;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-inline-datefield-calendarpanel {
+	position: relative;
+	background: white;
+	padding: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-gridlayout-margin-top {
+	padding-top: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-gridlayout-margin-bottom {
+	padding-bottom: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-gridlayout-margin-left {
+	padding-left: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-gridlayout-margin-right {
+	padding-right: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-gridlayout-spacing-on {
+	padding-left: 12px;
+	padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar {
+	position: relative;
+	text-align: center;
+	white-space: nowrap;
+	outline: none;
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	height: 37px;
+	padding: 0 16px;
+	color: #191919;
+	font-weight: 400;
+	
+	cursor: default;
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	padding: 0;
+	text-align: left;
+	line-height: 35px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar:after {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	border-radius: inherit;
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar:focus:after {
+	-webkit-transition: none;
+	-moz-transition: none;
+	transition: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar.v-disabled:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar:focus:after {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar  > .v-menubar-menuitem {
+	padding: 0 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar  > .v-menubar-menuitem[class*="-icon-only"] {
+	width: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar:active:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem {
+	position: relative;
+	z-index: 1;
+	display: inline-block;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	height: 37px;
+	padding: 0 15px;
+	color: inherit;
+	font-weight: 400;
+	
+	cursor: pointer;
+	border-radius: 0;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7;
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7;
+	background: transparent;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	border-width: 0 1px 0 0;
+	border-color: inherit;
+	height: 100%;
+	line-height: inherit;
+	vertical-align: top;
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem:first-child {
+	border-left-width: 0;
+	border-radius: 3px 0 0 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem:last-child {
+	border-radius: 0 3px 3px 0;
+	border-right-width: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem:first-child:last-child {
+	border-radius: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem:before {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem:hover {
+	zoom: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem:hover:before {
+	background-color: rgba(186, 186, 186, 0.1);
+	border: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem:active:before {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem .v-icon {
+	margin: 0 4px 0 -4px;
+	cursor: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem[class*="-icon-only"] {
+	width: 37px;
+	padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem[class*="-icon-only"] .v-icon {
+	margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem-checked {
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	background-color: #ededed;
+	background-image: -webkit-linear-gradient(bottom, #ededed 2%, #e9e9e9 98%);
+	background-image: linear-gradient(to top,#ededed 2%, #e9e9e9 98%);
+	color: #181818;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-disabled > .v-menubar-menuitem, .org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem-disabled {
+	cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-disabled > .v-menubar-menuitem:before, .org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem-disabled:before {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-menuitem-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem-selected {
+	color: #ecf2f8;
+	
+	
+	
+	border-radius: 0;
+	border: 1px solid #1362b1;
+	border-top-color: #156ab3;
+	border-bottom-color: #1156a8;
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	-webkit-box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca;
+	box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca;
+	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+	border-top-width: 0;
+	border-left-width: 0;
+	border-bottom-width: 0;
+	z-index: 2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar > .v-menubar-menuitem-selected:hover:before {
+	background: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar .v-menubar-submenu-indicator {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar .v-menubar-submenu-indicator  + .v-menubar-menuitem-caption:after {
+	font-family: ThemeIcons;
+	content: "\f078";
+	font-size: 0.7em;
+	vertical-align: 0.15em;
+	margin: 0 -0.2em 0 0.5em;
+	opacity: 0.5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar .v-menubar-submenu-indicator  + .v-menubar-menuitem-caption:empty:after {
+	margin-left: -0.2em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup {
+	padding: 4px 4px;
+	border-radius: 4px;
+	background-color: white;
+	color: #474747;
+	-webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+	box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+	-webkit-backface-visibility: hidden;
+	-moz-backface-visibility: hidden;
+	-ms-backface-visibility: hidden;
+	backface-visibility: hidden;
+	padding: 4px 4px;
+	margin: 5px 0 0 1px !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup[class*="animate-in"] {
+	-webkit-animation: valo-overlay-animate-in 120ms;
+	-moz-animation: valo-overlay-animate-in 120ms;
+	animation: valo-overlay-animate-in 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup[class*="animate-out"] {
+	-webkit-animation: valo-animate-out-fade 120ms;
+	-moz-animation: valo-animate-out-fade 120ms;
+	animation: valo-animate-out-fade 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-submenu {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-menuitem {
+	display: block;
+	cursor: pointer;
+	line-height: 27px;
+	padding: 0 20px 0 10px;
+	border-radius: 3px;
+	font-weight: 400;
+	white-space: nowrap;
+	position: relative;
+	padding-left: 32px;
+	padding-right: 37px;
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-menuitem:active:before {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	background: #0957a6;
+	opacity: 0.15;
+	filter: alpha(opacity=15.0) ;
+	pointer-events: none;
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-menuitem .v-icon {
+	max-height: 27px;
+	margin-right: 5px;
+	min-width: 1em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-submenu-indicator {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-submenu-indicator  + .v-menubar-menuitem-caption:after {
+	position: absolute;
+	right: 10px;
+	font-family: ThemeIcons;
+	content: "\f054";
+	line-height: 29px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-menuitem-selected {
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	color: #ecf2f8;
+	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup .v-menubar-separator {
+	display: block;
+	margin: 4px 0;
+	height: 0;
+	overflow: hidden;
+	border-bottom: 1px solid #e4e4e4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup [class*="checked"] .v-menubar-menuitem-caption:before {
+	content: "\f00c";
+	font-family: ThemeIcons;
+	position: absolute;
+	left: 10px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup [class*="unchecked"] .v-menubar-menuitem-caption:before {
+	content: "";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-popup [class*="disabled"] {
+	cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-small {
+	height: 31px;
+	padding: 0 14px;
+	
+	font-weight: 400;
+	
+	cursor: default;
+	border-radius: 4px;
+	padding: 0;
+	text-align: left;
+	line-height: 29px;
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-small:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-small  > .v-menubar-menuitem {
+	padding: 0 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-small  > .v-menubar-menuitem[class*="-icon-only"] {
+	width: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless {
+	border: none;
+	border-radius: 0;
+	padding: 1px;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	text-shadow: none;
+	background: transparent;
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless:focus:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem {
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	border: none;
+	margin-right: 1px;
+	border-radius: 4px;
+	color: #197de1;
+	padding: 0 12px;
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem:first-child, .org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem:last-child, .org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem:first-child:last-child {
+	border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem:before {
+	content: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem:hover {
+	color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem:active {
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-checked, .org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-checked:first-child {
+	border: 1px solid #c5c5c5;
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-checked .v-menubar-menuitem-caption, .org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-checked:first-child .v-menubar-menuitem-caption {
+	position: relative;
+	top: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-selected {
+	color: #ecf2f8;
+	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-selected:hover {
+	color: #ecf2f8;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-disabled, .org_osbee_vaadin_addons_designer_overlay .v-menubar-borderless .v-menubar-menuitem-disabled:hover {
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-radiobutton {
+	position: relative;
+	line-height: 19px;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-has-width label {
+	white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton {
+	padding-left: 25px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton label {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input {
+	position: absolute;
+	clip: rect(0, 0, 0, 0);
+	left: 0.2em;
+	top: 0.2em;
+	z-index: 0;
+	margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input:focus ~ label:before {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input ~ label:after {
+	content: "";
+	display: inline-block;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 19px;
+	height: 19px;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border-radius: 4px;
+	font-size: 13px;
+	text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input ~ label:before {
+	height: 18.5px;
+	padding: 0 9px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	padding: 0;
+	height: 19px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input ~ label:after {
+	content: "\f00c";
+	font-family: ThemeIcons;
+	color: transparent;
+	-webkit-transition: color 100ms;
+	-moz-transition: color 100ms;
+	transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input:active ~ label:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input:checked ~ label:after {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-radiobutton > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > label .v-icon {
+	margin: 0 6px 0 3px;
+	min-width: 1em;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-disabled  > label, .org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-disabled  > .v-icon {
+	cursor: default;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-disabled  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-disabled > input:active ~ label:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-readonly  > label, .org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-readonly  > .v-icon {
+	cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-readonly  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-readonly > input:active ~ label:after {
+	background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton.v-readonly > input ~ label:after {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input:checked ~ label:after {
+	width: 7px;
+	height: 7px;
+	top: 6px;
+	left: 6px;
+	background: #197de1;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-radiobutton > input ~ label:after {
+	border-radius: 50%;
+	content: "";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup .v-radiobutton, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup .v-checkbox {
+	display: block;
+	margin: 9px 16px 0 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup .v-radiobutton:first-child, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup .v-checkbox:first-child {
+	margin-top: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup .v-radiobutton:last-child, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup .v-checkbox:last-child {
+	margin-bottom: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup.v-has-width label {
+	white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small {
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox {
+	position: relative;
+	line-height: 16px;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-has-width label {
+	white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox {
+	padding-left: 21px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox label {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input {
+	position: absolute;
+	clip: rect(0, 0, 0, 0);
+	left: 0.2em;
+	top: 0.2em;
+	z-index: 0;
+	margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input:focus ~ label:before {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input ~ label:after {
+	content: "";
+	display: inline-block;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 16px;
+	height: 16px;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border-radius: 4px;
+	font-size: 11px;
+	text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input ~ label:before {
+	height: 15.5px;
+	padding: 0 7px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	padding: 0;
+	height: 16px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input ~ label:after {
+	content: "\f00c";
+	font-family: ThemeIcons;
+	color: transparent;
+	-webkit-transition: color 100ms;
+	-moz-transition: color 100ms;
+	transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input:active ~ label:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > input:checked ~ label:after {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox > label .v-icon {
+	margin: 0 5px 0 3px;
+	min-width: 1em;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-disabled  > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-disabled  > .v-icon {
+	cursor: default;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-disabled  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-disabled > input:active ~ label:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-readonly  > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-readonly  > .v-icon {
+	cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-readonly  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-readonly > input:active ~ label:after {
+	background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox.v-readonly > input ~ label:after {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton {
+	position: relative;
+	line-height: 16px;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-has-width label {
+	white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton {
+	padding-left: 21px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton label {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input {
+	position: absolute;
+	clip: rect(0, 0, 0, 0);
+	left: 0.2em;
+	top: 0.2em;
+	z-index: 0;
+	margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input:focus ~ label:before {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input ~ label:after {
+	content: "";
+	display: inline-block;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 16px;
+	height: 16px;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border-radius: 4px;
+	font-size: 11px;
+	text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input ~ label:before {
+	height: 15.5px;
+	padding: 0 7px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	padding: 0;
+	height: 16px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input ~ label:after {
+	content: "\f00c";
+	font-family: ThemeIcons;
+	color: transparent;
+	-webkit-transition: color 100ms;
+	-moz-transition: color 100ms;
+	transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input:active ~ label:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input:checked ~ label:after {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > label .v-icon {
+	margin: 0 5px 0 3px;
+	min-width: 1em;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-disabled  > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-disabled  > .v-icon {
+	cursor: default;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-disabled  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-disabled > input:active ~ label:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-readonly  > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-readonly  > .v-icon {
+	cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-readonly  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-readonly > input:active ~ label:after {
+	background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton.v-readonly > input ~ label:after {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input:checked ~ label:after {
+	width: 6px;
+	height: 6px;
+	top: 5px;
+	left: 5px;
+	background: #197de1;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton > input ~ label:after {
+	border-radius: 50%;
+	content: "";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox {
+	display: block;
+	margin: 8px 16px 0 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton:first-child, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox:first-child {
+	margin-top: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-radiobutton:last-child, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small .v-checkbox:last-child {
+	margin-bottom: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-small.v-has-width label {
+	white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large {
+	font-size: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox {
+	position: relative;
+	line-height: 22px;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-has-width label {
+	white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox {
+	padding-left: 29px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox label {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input {
+	position: absolute;
+	clip: rect(0, 0, 0, 0);
+	left: 0.2em;
+	top: 0.2em;
+	z-index: 0;
+	margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input:focus ~ label:before {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input ~ label:after {
+	content: "";
+	display: inline-block;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 22px;
+	height: 22px;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border-radius: 4px;
+	font-size: 15px;
+	text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input ~ label:before {
+	height: 22px;
+	padding: 0 10px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	padding: 0;
+	height: 22px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input ~ label:after {
+	content: "\f00c";
+	font-family: ThemeIcons;
+	color: transparent;
+	-webkit-transition: color 100ms;
+	-moz-transition: color 100ms;
+	transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input:active ~ label:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > input:checked ~ label:after {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox > label .v-icon {
+	margin: 0 7px 0 4px;
+	min-width: 1em;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-disabled  > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-disabled  > .v-icon {
+	cursor: default;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-disabled  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-disabled > input:active ~ label:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-readonly  > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-readonly  > .v-icon {
+	cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-readonly  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-readonly > input:active ~ label:after {
+	background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox.v-readonly > input ~ label:after {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton {
+	position: relative;
+	line-height: 22px;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-has-width label {
+	white-space: normal;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton {
+	padding-left: 29px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton label {
+	-webkit-tap-highlight-color: transparent;
+	-webkit-touch-callout: none;
+	cursor: pointer;
+	display: inline-block;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input {
+	position: absolute;
+	clip: rect(0, 0, 0, 0);
+	left: 0.2em;
+	top: 0.2em;
+	z-index: 0;
+	margin: 0;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input:focus ~ label:before {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5), inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input ~ label:after {
+	content: "";
+	display: inline-block;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 22px;
+	height: 22px;
+	position: absolute;
+	top: 0;
+	left: 0;
+	border-radius: 4px;
+	font-size: 15px;
+	text-align: center;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input ~ label:before {
+	height: 22px;
+	padding: 0 10px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	padding: 0;
+	height: 22px;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input ~ label:after {
+	content: "\f00c";
+	font-family: ThemeIcons;
+	color: transparent;
+	-webkit-transition: color 100ms;
+	-moz-transition: color 100ms;
+	transition: color 100ms;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input:active ~ label:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input:checked ~ label:after {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > .v-icon, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > label .v-icon {
+	margin: 0 7px 0 4px;
+	min-width: 1em;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-disabled  > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-disabled  > .v-icon {
+	cursor: default;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-disabled  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-disabled > input:active ~ label:after {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-readonly  > label, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-readonly  > .v-icon {
+	cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-readonly  > label > .v-icon {
+	cursor: default;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-readonly > input:active ~ label:after {
+	background: transparent;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton.v-readonly > input ~ label:after {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input:checked ~ label:after {
+	width: 8px;
+	height: 8px;
+	top: 7px;
+	left: 7px;
+	background: #197de1;
+}
+
+:root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input ~ label:before, :root .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton > input ~ label:after {
+	border-radius: 50%;
+	content: "";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox {
+	display: block;
+	margin: 11px 16px 0 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton:first-child, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox:first-child {
+	margin-top: 7px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-radiobutton:last-child, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large .v-checkbox:last-child {
+	margin-bottom: 7px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-large.v-has-width label {
+	white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-horizontal {
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-horizontal .v-radiobutton, .org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-horizontal .v-checkbox {
+	display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-horizontal.v-has-width {
+	white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-optiongroup-horizontal.v-has-width label {
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-link {
+	cursor: pointer;
+	color: #197de1;
+	text-decoration: underline;
+	font-weight: inherit;
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-link:hover {
+	color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-link.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-link a {
+	cursor: inherit;
+	color: inherit;
+	text-decoration: inherit;
+	-webkit-transition: inherit;
+	-moz-transition: inherit;
+	transition: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-link .v-icon {
+	cursor: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-link-small {
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-link-large {
+	font-size: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window {
+	padding: 4px 4px;
+	border-radius: 4px;
+	background-color: white;
+	color: #474747;
+	-webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+	box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+	-webkit-backface-visibility: hidden;
+	-moz-backface-visibility: hidden;
+	-ms-backface-visibility: hidden;
+	backface-visibility: hidden;
+	-webkit-box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1), 0 16px 80px -6px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+	box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1), 0 16px 80px -6px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+	padding: 0;
+	min-width: 148px !important;
+	min-height: 37px !important;
+	white-space: nowrap;
+	overflow: hidden !important;
+	-webkit-transition: width 200ms, height 200ms, top 200ms, left 200ms;
+	-moz-transition: width 200ms, height 200ms, top 200ms, left 200ms;
+	transition: width 200ms, height 200ms, top 200ms, left 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window[class*="animate-in"] {
+	-webkit-animation: valo-animate-in-fade 140ms;
+	-moz-animation: valo-animate-in-fade 140ms;
+	animation: valo-animate-in-fade 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window[class*="animate-out"] {
+	-webkit-animation: valo-animate-out-scale-down-fade 100ms;
+	-moz-animation: valo-animate-out-scale-down-fade 100ms;
+	animation: valo-animate-out-scale-down-fade 100ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window.v-window-animate-in {
+	-webkit-transition: none;
+	-moz-transition: none;
+	transition: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-modalitycurtain {
+	position: fixed;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	background-color: #222;
+	background-image: -webkit-radial-gradient(50% 50%, circle, #222, #0e0e0e);
+	background-image: radial-gradient(  circle at 50% 50%, #222, #0e0e0e);
+	opacity: 0.72;
+	filter: alpha(opacity=72) ;
+	-webkit-animation: valo-animate-in-fade 400ms 100ms backwards;
+	-moz-animation: valo-animate-in-fade 400ms 100ms backwards;
+	animation: valo-animate-in-fade 400ms 100ms backwards;
+}
+
+.v-op12 .org_osbee_vaadin_addons_designer_overlay .v-window-modalitycurtain {
+	-webkit-animation: none;
+	-moz-animation: none;
+	animation: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-draggingCurtain {
+	position: fixed !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-resizingCurtain + .v-window, .org_osbee_vaadin_addons_designer_overlay .v-window-draggingCurtain + .v-window {
+	-webkit-transition: none;
+	-moz-transition: none;
+	transition: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-outerheader {
+	cursor: move;
+	position: absolute;
+	z-index: 2;
+	top: 0;
+	left: 0;
+	right: 0;
+	-webkit-transform: translatez(0);
+	-moz-transform: translatez(0);
+	-ms-transform: translatez(0);
+	-o-transform: translatez(0);
+	transform: translatez(0);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-outerheader:after {
+	content: "";
+	position: absolute;
+	bottom: -1px;
+	right: 0;
+	left: 0;
+	height: 0;
+	border-top: 1px solid #dfdfdf;
+	border-color: rgba(197, 197, 197, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-header {
+	line-height: 36px;
+	padding-left: 12px;
+	margin-right: 74px;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	white-space: nowrap;
+	color: #7e7e7e;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-restorebox-disabled  ~ .v-window-closebox ~ .v-window-header, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox-disabled  ~ .v-window-closebox ~ .v-window-header {
+	margin-right: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-restorebox-disabled  ~ .v-window-closebox-disabled ~ .v-window-header, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox-disabled  ~ .v-window-closebox-disabled ~ .v-window-header {
+	margin-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox {
+	position: absolute;
+	z-index: 3;
+	top: 0;
+	right: 0;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 33px;
+	height: 36px;
+	background-color: white;
+	line-height: 34px;
+	text-align: center;
+	cursor: pointer;
+	font-size: 21px;
+	color: #999999;
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox:focus, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox:focus, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox:focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox:hover, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox:hover, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox:hover {
+	opacity: 1;
+	filter: none ;
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox:active, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox:active, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox:active {
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox {
+	padding-right: 4px;
+	border-radius: 0 4px 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox:before {
+	content: "\00d7";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox {
+	right: 33px;
+	padding-left: 4px;
+	border-radius: 0 0 0 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox  + .v-window-closebox, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox  + .v-window-closebox {
+	border-bottom-left-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox-disabled, .org_osbee_vaadin_addons_designer_overlay .v-window-resizebox-disabled, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox-disabled, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox-disabled {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-closebox-disabled  + .v-window-closebox, .org_osbee_vaadin_addons_designer_overlay .v-window-resizebox-disabled  + .v-window-closebox, .org_osbee_vaadin_addons_designer_overlay .v-window-restorebox-disabled  + .v-window-closebox, .org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox-disabled  + .v-window-closebox {
+	width: 37px;
+	padding-right: 0;
+	border-bottom-left-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-maximizebox:before {
+	content: "+";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-restorebox:before {
+	content: "\2013";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window > .popupContent, .org_osbee_vaadin_addons_designer_overlay .v-window-wrap, .org_osbee_vaadin_addons_designer_overlay .v-window-contents, .org_osbee_vaadin_addons_designer_overlay .v-window-contents > .v-scrollable {
+	height: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	border-radius: 4px;
+	margin-top: 0 !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable  > .v-margin-top {
+	padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable  > .v-margin-right {
+	padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable  > .v-margin-bottom {
+	padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable  > .v-margin-left {
+	padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable  > .v-formlayout [class*="margin-top"] > tbody > [class*="firstrow"] > td {
+	padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable  > .v-formlayout [class*="margin-bottom"] > tbody > [class*="lastrow"] > td {
+	padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable  > .v-formlayout [class*="margin-left"] > tbody > [class*="row"] > [class*="captioncell"] {
+	padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable  > .v-formlayout [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable  > .v-formlayout [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable  > .v-formlayout [class*="margin-left"] > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h4 {
+	left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable  > .v-formlayout [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"] {
+	padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable  > .v-formlayout [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable  > .v-formlayout [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable  > .v-formlayout [class*="margin-right"] > tbody > [class*="row"] > [class*="contentcell"]  > .v-label-h4 {
+	right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable:focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable:before {
+	content: "";
+	position: absolute;
+	z-index: 2;
+	top: 0;
+	height: 0;
+	border-top: 1px solid white;
+	left: 0;
+	right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable .v-panel-captionwrap:after {
+	border-color: #dfdfdf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-contents  > .v-scrollable .v-panel-content:before {
+	border-color: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-footer {
+	height: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-resizebox {
+	position: absolute;
+	z-index: 1000;
+	right: 0;
+	bottom: 0;
+	width: 19px;
+	height: 19px;
+	cursor: nwse-resize;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-window-resizebox {
+	background: #000;
+	filter: alpha(opacity=0.1);
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-window-resizebox, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-window-resizebox {
+	cursor: se-resize;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-modalitycurtain:active  ~ .v-window {
+	-webkit-animation: none;
+	-moz-animation: none;
+	animation: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-top-toolbar  > .v-widget, .org_osbee_vaadin_addons_designer_overlay .v-window-bottom-toolbar  > .v-widget {
+	vertical-align: top;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-top-toolbar .v-label, .org_osbee_vaadin_addons_designer_overlay .v-window-bottom-toolbar .v-label {
+	line-height: 36px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-top-toolbar .v-spacing, .org_osbee_vaadin_addons_designer_overlay .v-window-bottom-toolbar .v-spacing {
+	width: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-top-toolbar.v-layout {
+	padding: 7px 12px;
+	position: relative;
+	z-index: 2;
+	border-top: 1px solid #dfdfdf;
+	border-bottom: 1px solid #dfdfdf;
+	background-color: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-top-toolbar.v-menubar {
+	margin: 12px 12px 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-top-toolbar.v-menubar-borderless {
+	padding-left: 6px;
+	padding-right: 6px;
+	margin: 5px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-window-bottom-toolbar.v-layout {
+	padding: 7px 12px;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #f0f0f0 0, #fafafa 4px);
+	background-image: linear-gradient(to bottom,#f0f0f0 0, #fafafa 4px);
+	border-top: 1px solid #dfdfdf;
+	border-radius: 0 0 4px 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-left.v-margin-right.v-margin-top .v-window-top-toolbar.v-layout {
+	-webkit-box-sizing: content-box;
+	-moz-box-sizing: content-box;
+	box-sizing: content-box;
+	margin: -12px -12px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-left.v-margin-right.v-margin-top .v-window-top-toolbar.v-menubar {
+	margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-left.v-margin-right.v-margin-top .v-window-top-toolbar.v-menubar-borderless {
+	margin: -6px -6px 0;
+	padding: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-margin-left.v-margin-right.v-margin-bottom .v-window-bottom-toolbar.v-layout {
+	-webkit-box-sizing: content-box;
+	-moz-box-sizing: content-box;
+	box-sizing: content-box;
+	margin: 0 -12px -12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree {
+	position: relative;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree:focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node:before {
+	content: "";
+	position: absolute;
+	display: inline-block;
+	z-index: 3;
+	width: 1.9em;
+	height: 28px;
+	cursor: pointer;
+	background: red;
+	opacity: 0;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node:before {
+	position: static;
+	margin-left: -1.9em;
+	vertical-align: top;
+	content: "\f0da";
+	font-family: ThemeIcons;
+	text-align: center;
+	background: transparent;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node {
+	padding-left: 1.9em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption {
+	height: 28px;
+	line-height: 27px;
+	overflow: hidden;
+	white-space: nowrap;
+	vertical-align: top;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption > div {
+	display: inline-block;
+	width: 100%;
+	position: relative;
+	z-index: 2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption > div:before {
+	content: "\f0da";
+	font-family: ThemeIcons;
+	display: inline-block;
+	width: 0.5em;
+	text-align: center;
+	margin: 0 0.6em 0 0.8em;
+	-webkit-transition: all 100ms;
+	-moz-transition: all 100ms;
+	transition: all 100ms;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption > div:before {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption span {
+	padding-right: 28px;
+	cursor: pointer;
+	display: inline-block;
+	width: 100%;
+}
+
+.v-ie .org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption span {
+	width: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption .v-icon {
+	padding-right: 0;
+	width: auto;
+	min-width: 1em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption:after {
+	content: "";
+	display: block;
+	vertical-align: top;
+	position: absolute;
+	z-index: 1;
+	left: 0;
+	margin-top: -28px;
+	width: 100%;
+	height: 28px;
+	border-radius: 4px;
+	opacity: 0;
+	-webkit-transition: opacity 120ms;
+	-moz-transition: opacity 120ms;
+	transition: opacity 120ms;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption:after {
+	content: none;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption {
+	display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-expanded > .v-tree-node-caption > div:before {
+	-webkit-transform: rotate(90deg);
+	-moz-transform: rotate(90deg);
+	-ms-transform: rotate(90deg);
+	-o-transform: rotate(90deg);
+	transform: rotate(90deg);
+	content: "\f0da";
+	font-family: ThemeIcons;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-expanded:before {
+	content: "\f0d7";
+	font-family: ThemeIcons;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-leaf:before, .org_osbee_vaadin_addons_designer_overlay .v-tree-node-leaf > .v-tree-node-caption > div:before {
+	visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-focused:after {
+	opacity: 1;
+	border: 1px solid #197de1;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-focused {
+	outline: 1px dotted #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-selected {
+	color: #ecf2f8;
+	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-selected:after {
+	opacity: 1;
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	border: none;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-selected {
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-children {
+	padding-left: 19px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-children {
+	padding-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-top:before, .org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-bottom:after, .org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-bottom.v-tree-node-dragfolder.v-tree-node-expanded > .v-tree-node-children:before {
+	content: "\2022";
+	display: block;
+	position: absolute;
+	height: 2px;
+	width: 100%;
+	background: #197de1;
+	font-size: 32px;
+	line-height: 2px;
+	color: #197de1;
+	text-indent: -4px;
+	text-shadow: 0 0 1px #fafafa, 0 0 1px #fafafa;
+	opacity: 1;
+	visibility: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-bottom.v-tree-node-dragfolder.v-tree-node-expanded:after {
+	content: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption-drag-center {
+	-webkit-box-shadow: 0 0 0 2px #197de1;
+	box-shadow: 0 0 0 2px #197de1;
+	position: relative;
+	border-radius: 4px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-caption-drag-center {
+	outline: 2px solid #197de1;
+}
+
+.v-ff .org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-top:before, .v-ff .org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-bottom:after {
+	line-height: 1px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-top:before, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tree-node-drag-bottom:after {
+	line-height: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table {
+	position: relative;
+	background: #fafafa;
+	color: #464646;
+	overflow: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header table, .org_osbee_vaadin_addons_designer_overlay .v-table-footer table, .org_osbee_vaadin_addons_designer_overlay .v-table-table {
+	-webkit-box-shadow: 0 0 0 1px #d4d4d4;
+	box-shadow: 0 0 0 1px #d4d4d4;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-table-header table, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-table-footer table, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-table-table {
+	outline: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-footer-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-header-drag {
+	border: 1px solid #d4d4d4;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	white-space: nowrap;
+	font-size: 14px;
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-wrap {
+	position: relative;
+	border-bottom: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-footer-wrap {
+	border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-footer td {
+	border-left: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-footer-container, .org_osbee_vaadin_addons_designer_overlay .v-table-caption-container {
+	overflow: hidden;
+	line-height: 1;
+	min-height: 37px;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-table-footer-container, .v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-table-caption-container {
+	min-height: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-footer-container {
+	padding: 11px 12px 12px;
+	float: right;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class^="v-table-header-cell"] {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-caption-container, .org_osbee_vaadin_addons_designer_overlay .v-table-header-drag {
+	padding: 12px 12px 11px;
+	border-left: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-caption-container-align-right {
+	padding-right: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-resizer {
+	height: 37px;
+	width: 8px;
+	cursor: e-resize;
+	cursor: col-resize;
+	position: relative;
+	right: -4px;
+	z-index: 1;
+	margin-left: -8px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-cell-content {
+	border-left: 1px solid #d4d4d4;
+	overflow: hidden;
+	height: 37px;
+	vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-cell-content:first-child {
+	border-left: none;
+	padding-left: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header td:first-child .v-table-caption-container, .org_osbee_vaadin_addons_designer_overlay .v-table-footer td:first-child {
+	border-left-color: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-cell-wrapper {
+	line-height: 1;
+	padding: 0 12px;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	margin-right: 0 !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-cell-wrapper  > .v-widget {
+	margin: 3px -6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-cell-wrapper  > .v-widget.v-label, .org_osbee_vaadin_addons_designer_overlay .v-table-cell-wrapper  > .v-widget.v-checkbox, .org_osbee_vaadin_addons_designer_overlay .v-table-cell-wrapper  > .v-widget.v-select-optiongroup {
+	margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-cell-wrapper  > .v-widget.v-progressbar {
+	margin-left: 0;
+	margin-right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-body {
+	border: 1px solid #d4d4d4;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-table {
+	background-color: white;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-table td {
+	border-top: 1px solid #d4d4d4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-table tr:first-child > td {
+	border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-row {
+	background-color: white;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-row-odd {
+	background-color: #f5f5f5;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-body-noselection .v-table-row, .org_osbee_vaadin_addons_designer_overlay .v-table-body-noselection .v-table-row-odd {
+	cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table [class*="-row"].v-selected {
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	background-origin: border-box;
+	color: #ecf2f8;
+	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table [class*="-row"].v-selected  + .v-selected {
+	background: #166ed5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table [class*="-row"].v-selected  + .v-selected td {
+	border-top-color: #166ed5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table [class*="-row"].v-selected .v-table-cell-content {
+	border-color: transparent;
+	border-left-color: #1d69b4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table [class*="-row"].v-selected .v-table-cell-content:first-child {
+	border-left-color: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-cell-asc .v-table-sort-indicator, .org_osbee_vaadin_addons_designer_overlay .v-table-header-cell-desc .v-table-sort-indicator {
+	background: transparent;
+	width: 19px;
+	height: 37px;
+	line-height: 37px;
+	margin-left: -19px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-cell-asc .v-table-sort-indicator:before, .org_osbee_vaadin_addons_designer_overlay .v-table-header-cell-desc .v-table-sort-indicator:before {
+	font-style: normal;
+	font-weight: normal;
+	display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-cell-asc .v-table-sort-indicator:before {
+	content: "\f0de";
+	font-family: ThemeIcons;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-cell-desc .v-table-sort-indicator:before {
+	content: "\f0dd";
+	font-family: ThemeIcons;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [class*="rowheader"] span.v-icon {
+	min-width: 1em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-focus {
+	outline: 1px solid #197de1;
+	outline-offset: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-drag-element.v-table-focus, .org_osbee_vaadin_addons_designer_overlay .v-drag-element .v-table-focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-drag {
+	position: absolute;
+	opacity: 0.9;
+	filter: alpha(opacity=90) ;
+	margin-top: -19px;
+	z-index: 30000;
+	line-height: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-focus-slot-right {
+	border-right: 3px solid #197de1;
+	right: -2px;
+	margin-left: -11px !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-focus-slot-left {
+	float: left;
+	border-left: 3px solid #197de1;
+	left: -1px;
+	right: auto;
+	margin-left: 0 !important;
+	margin-right: -11px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector {
+	height: 37px;
+	padding: 0 16px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7;
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7;
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	position: absolute;
+	z-index: 2;
+	top: 0;
+	right: 0;
+	width: 19px;
+	height: 19px;
+	line-height: 19px;
+	padding: 0;
+	border-top-width: 0;
+	border-right-width: 0;
+	border-radius: 0 0 0 4px;
+	cursor: pointer;
+	text-align: center;
+	opacity: 0;
+	filter: alpha(opacity=0) ;
+	-webkit-transition: opacity 200ms 2s;
+	-moz-transition: opacity 200ms 2s;
+	transition: opacity 200ms 2s;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector:hover:after {
+	background-color: rgba(186, 186, 186, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector:focus:after {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector:active:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector:after {
+	content: "";
+	position: absolute;
+	border: none;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector:active:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-column-selector:before {
+	font-family: ThemeIcons;
+	content: "\f013";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-header-wrap:hover .v-table-column-selector {
+	opacity: 1;
+	filter: none ;
+	-webkit-transition-delay: 200ms;
+	-moz-transition-delay: 200ms;
+	transition-delay: 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-on:before, .org_osbee_vaadin_addons_designer_overlay .v-off:before {
+	content: "\f00c";
+	font-family: ThemeIcons;
+	font-size: 0.9em;
+	margin-right: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-on div, .org_osbee_vaadin_addons_designer_overlay .v-off div {
+	display: inline;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-off:before {
+	visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay tbody.v-drag-element {
+	display: block;
+	overflow: visible;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	background: transparent;
+	opacity: 1;
+	filter: none ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay tbody.v-drag-element tr {
+	display: block;
+	
+	
+	-webkit-box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+	box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+	border-radius: 4px;
+	overflow: hidden;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+	background: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-body {
+	position: relative;
+	z-index: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-scrollposition {
+	position: absolute;
+	top: 50%;
+	width: 100%;
+	height: 37px;
+	line-height: 37px;
+	margin: -19px 0 0 !important;
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-drag {
+	overflow: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-drag .v-table-body {
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	border-color: #197de1;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-table-drag .v-table-body {
+	border-color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-drag .v-table-body .v-table-focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-row-drag-middle .v-table-cell-content {
+	background-color: #d1e5f9;
+	color: #214060;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-row-drag-bottom td.v-table-cell-content {
+	border-bottom: 2px solid #197de1;
+	height: 35px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-row-drag-bottom .v-table-cell-wrapper {
+	margin-bottom: -2px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-row-drag-top td.v-table-cell-content {
+	border-top: 2px solid #197de1;
+	height: 36px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-row-drag-top .v-table-cell-wrapper {
+	margin-top: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-no-stripes .v-table-row, .org_osbee_vaadin_addons_designer_overlay .v-table-no-stripes .v-table-row-odd {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-no-vertical-lines .v-table-cell-content {
+	border-left: none;
+	padding-left: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-no-vertical-lines.v-treetable .v-table-cell-content {
+	padding-left: 13px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-no-horizontal-lines .v-table-cell-content {
+	border-top: none;
+	border-bottom: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-no-horizontal-lines .v-table-row-drag-top .v-table-cell-content, .org_osbee_vaadin_addons_designer_overlay .v-table-no-horizontal-lines .v-table-row-drag-bottom .v-table-cell-content {
+	height: 36px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-no-header .v-table-header-wrap {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-borderless .v-table-header-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-borderless .v-table-footer-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-borderless .v-table-header-drag, .org_osbee_vaadin_addons_designer_overlay .v-table-borderless .v-table-body {
+	border: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-borderless .v-table-header-wrap {
+	border-bottom: 1px solid #d9d9d9;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-borderless .v-table-footer-wrap {
+	border-top: 1px solid #d9d9d9;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-header-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-footer-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-header-drag, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-header-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-footer-wrap, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-header-drag {
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-footer-container, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-footer-container {
+	padding: 8px 7px 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-caption-container, .org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-header-drag, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-caption-container, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-header-drag {
+	padding-top: 9px;
+	padding-bottom: 8px;
+	padding-left: 6px;
+	padding-right: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-caption-container-align-right, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-caption-container-align-right {
+	padding-right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-resizer, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-resizer {
+	height: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-cell-content, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-cell-content {
+	height: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-cell-wrapper, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-cell-wrapper {
+	padding-left: 6px;
+	padding-right: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-cell-wrapper  > .v-widget, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-cell-wrapper  > .v-widget {
+	margin: 2px -3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-cell-wrapper  > .v-widget.v-label, .org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-cell-wrapper  > .v-widget.v-checkbox, .org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-cell-wrapper  > .v-widget.v-select-optiongroup, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-cell-wrapper  > .v-widget.v-label, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-cell-wrapper  > .v-widget.v-checkbox, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-cell-wrapper  > .v-widget.v-select-optiongroup {
+	margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-cell-wrapper  > .v-widget.v-progressbar, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-cell-wrapper  > .v-widget.v-progressbar {
+	margin-left: 0;
+	margin-right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-header-cell-asc .v-table-sort-indicator, .org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-header-cell-desc .v-table-sort-indicator, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-header-cell-asc .v-table-sort-indicator, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-header-cell-desc .v-table-sort-indicator {
+	height: 31px;
+	line-height: 31px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-header-drag, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-header-drag {
+	margin-top: -16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact.v-treetable .v-table-cell-wrapper, .org_osbee_vaadin_addons_designer_overlay .v-table-small.v-treetable .v-table-cell-wrapper {
+	padding-left: 0;
+	padding-right: 0;
+	min-height: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact.v-treetable .v-table-cell-content, .org_osbee_vaadin_addons_designer_overlay .v-table-small.v-treetable .v-table-cell-content {
+	padding-left: 6px;
+	padding-right: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact.v-treetable .v-table-cell-content:first-child, .org_osbee_vaadin_addons_designer_overlay .v-table-small.v-treetable .v-table-cell-content:first-child {
+	padding-left: 7px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact.v-treetable .v-table-footer-container, .org_osbee_vaadin_addons_designer_overlay .v-table-small.v-treetable .v-table-footer-container {
+	padding-left: 6px;
+	padding-right: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-row-drag-top .v-table-cell-content, .org_osbee_vaadin_addons_designer_overlay .v-table-compact .v-table-row-drag-bottom .v-table-cell-content, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-row-drag-top .v-table-cell-content, .org_osbee_vaadin_addons_designer_overlay .v-table-small .v-table-row-drag-bottom .v-table-cell-content {
+	height: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-small {
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-table-small.v-treetable .v-table-cell-wrapper {
+	min-height: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="caption-container"], .org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="footer-container"], .org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="cell-wrapper"] {
+	-webkit-box-sizing: content-box;
+	-moz-box-sizing: content-box;
+	box-sizing: content-box;
+	padding-left: 0;
+	padding-right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="caption-container"], .org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="footer-container"] {
+	min-height: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="cell-wrapper"] {
+	min-height: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="caption-container"] {
+	padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="caption-container-align-right"] {
+	padding-left: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="footer-container"] {
+	padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="cell-content"] {
+	padding-left: 12px;
+	padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable [class*="cell-content"]:first-child {
+	padding-left: 13px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable-treespacer {
+	display: inline-block;
+	position: absolute;
+	width: 19px !important;
+	margin-left: -25px;
+	text-align: center;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable-node-closed:before {
+	content: "\f0da";
+	font-family: ThemeIcons;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-treetable-node-open:before {
+	content: "\f0d7";
+	font-family: ThemeIcons;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal  > div > .v-splitpanel-hsplitter {
+	width: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal  > div > .v-splitpanel-hsplitter:after {
+	left: -6px;
+	right: -6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal  > div > .v-splitpanel-hsplitter div:before {
+	height: 37px;
+	padding: 0 16px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	height: auto;
+	padding: 0;
+	border-radius: 0;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(left, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to right,#fafafa 2%, #efefef 98%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal  > div > .v-splitpanel-hsplitter div:before:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal  > div > .v-splitpanel-hsplitter div:before:hover:after {
+	background-color: rgba(186, 186, 186, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal  > div > .v-splitpanel-hsplitter div:before:focus:after {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal  > div > .v-splitpanel-hsplitter div:before:active:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal  > div > .v-splitpanel-second-container {
+	margin-left: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical  > div > .v-splitpanel-vsplitter {
+	height: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical  > div > .v-splitpanel-vsplitter:after {
+	top: -6px;
+	bottom: -6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical  > div > .v-splitpanel-vsplitter div:before {
+	height: 37px;
+	padding: 0 16px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	height: auto;
+	padding: 0;
+	border-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical  > div > .v-splitpanel-vsplitter div:before:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical  > div > .v-splitpanel-vsplitter div:before:hover:after {
+	background-color: rgba(186, 186, 186, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical  > div > .v-splitpanel-vsplitter div:before:focus:after {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical  > div > .v-splitpanel-vsplitter div:before:active:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large  > div > .v-splitpanel-hsplitter {
+	width: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large  > div > .v-splitpanel-hsplitter:after {
+	left: 0px;
+	right: 0px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large  > div > .v-splitpanel-hsplitter div:before {
+	height: 37px;
+	padding: 0 16px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	height: auto;
+	padding: 0;
+	border-radius: 0;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(left, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to right,#fafafa 2%, #efefef 98%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large  > div > .v-splitpanel-hsplitter div:before:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large  > div > .v-splitpanel-hsplitter div:before:hover:after {
+	background-color: rgba(186, 186, 186, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large  > div > .v-splitpanel-hsplitter div:before:focus:after {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large  > div > .v-splitpanel-hsplitter div:before:active:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large  > div > .v-splitpanel-hsplitter div:after {
+	content: "";
+	border: 1px solid #dadada;
+	border-top-color: #bababa;
+	border-left-color: #bababa;
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	width: 0;
+	height: 37px;
+	margin-left: -1px;
+	margin-top: -19px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-horizontal.large  > div > .v-splitpanel-second-container {
+	margin-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large  > div > .v-splitpanel-vsplitter {
+	height: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large  > div > .v-splitpanel-vsplitter:after {
+	top: 0px;
+	bottom: 0px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large  > div > .v-splitpanel-vsplitter div:before {
+	height: 37px;
+	padding: 0 16px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, none;
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	height: auto;
+	padding: 0;
+	border-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large  > div > .v-splitpanel-vsplitter div:before:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large  > div > .v-splitpanel-vsplitter div:before:hover:after {
+	background-color: rgba(186, 186, 186, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large  > div > .v-splitpanel-vsplitter div:before:focus:after {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large  > div > .v-splitpanel-vsplitter div:before:active:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-splitpanel-vertical.large  > div > .v-splitpanel-vsplitter div:after {
+	content: "";
+	border: 1px solid #dadada;
+	border-top-color: #bababa;
+	border-left-color: #bababa;
+	position: absolute;
+	top: 50%;
+	left: 50%;
+	width: 37px;
+	height: 0;
+	margin-left: -19px;
+	margin-top: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-progressbar-wrapper {
+	border-radius: 4px;
+	height: 9px;
+	background-color: #d4d4d4;
+	background-image: -webkit-linear-gradient(bottom, #d7d7d7 2%, #c7c7c7 98%);
+	background-image: linear-gradient(to top,#d7d7d7 2%, #c7c7c7 98%);
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	min-width: 74px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-progressbar-indicator {
+	border-radius: 4px;
+	height: inherit;
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	
+	
+	border: 1px solid #1362b1;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	max-width: 100%;
+	min-width: 8px;
+	-webkit-transition: width 160ms;
+	-moz-transition: width 160ms;
+	transition: width 160ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-progressbar-point .v-progressbar-indicator {
+	background: transparent;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	border: none;
+	text-align: right;
+	overflow: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-progressbar-point .v-progressbar-indicator:before {
+	content: "";
+	display: inline-block;
+	border-radius: 4px;
+	height: inherit;
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	
+	
+	border: 1px solid #1362b1;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	max-width: 100%;
+	width: 9px;
+	vertical-align: top;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-progressbar-indeterminate {
+	height: 24px !important;
+	width: 24px !important;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	border: 2px solid rgba(25, 125, 225, 0.2);
+	border-top-color: #197de1;
+	border-right-color: #197de1;
+	border-radius: 100%;
+	-webkit-animation: v-rotate-360 500ms infinite linear;
+	-moz-animation: v-rotate-360 500ms infinite linear;
+	animation: v-rotate-360 500ms infinite linear;
+	pointer-events: none;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-progressbar-indeterminate, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-progressbar-indeterminate {
+	border: none;
+	border-radius: 4px;
+	background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%;
+	background-size: 80%;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-progressbar-indeterminate {
+	min-width: 30px;
+	min-height: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-progressbar-indeterminate .v-progressbar-wrapper {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider:focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider:focus .v-slider-handle:after {
+	opacity: 1;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-slider:focus .v-slider-handle:after {
+	visibility: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-base {
+	border-radius: 4px;
+	height: 9px;
+	background-color: #d4d4d4;
+	background-image: -webkit-linear-gradient(bottom, #d7d7d7 2%, #c7c7c7 98%);
+	background-image: linear-gradient(to top,#d7d7d7 2%, #c7c7c7 98%);
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	min-width: 74px;
+	height: 6px;
+	margin: 16px 11px;
+	white-space: nowrap;
+	overflow: hidden;
+	
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-base:before {
+	content: "";
+	position: absolute;
+	top: 16px;
+	bottom: 16px;
+	left: 11px;
+	width: 8px;
+	border-radius: 4px;
+	border-left: 1px solid #1362b1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-base:after {
+	border-radius: 4px;
+	height: inherit;
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	
+	
+	border: 1px solid #1362b1;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	max-width: 100%;
+	content: "";
+	display: inline-block;
+	margin-left: -100%;
+	width: 100%;
+	vertical-align: top;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-slider-base:after {
+	position: relative;
+	left: -11px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-has-width > .v-slider-base {
+	min-width: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle {
+	margin-top: -16px;
+	width: 0.1px;
+	display: inline-block;
+	vertical-align: top;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle:before {
+	height: 37px;
+	padding: 0 16px;
+	color: #191919;
+	font-weight: 400;
+	
+	
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+	border-top-color: #c5c5c5;
+	border-bottom-color: #bcbcbc;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7, 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle:before:after {
+	border: inherit;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle:before:hover:after {
+	background-color: rgba(186, 186, 186, 0.1);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle:before:focus:after {
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle:before:active:after {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle:after {
+	border: 1px solid #c5c5c5;
+	border-color: #197de1;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	opacity: 0;
+	-webkit-transition: opacity 200ms;
+	-moz-transition: opacity 200ms;
+	transition: opacity 200ms;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-slider-handle:after {
+	visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-handle:before, .org_osbee_vaadin_addons_designer_overlay .v-slider-handle:after {
+	content: "";
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	padding: 0;
+	width: 22px;
+	height: 22px;
+	border-radius: 11px;
+	position: absolute;
+	z-index: 1;
+	margin-top: 8px;
+	margin-left: -11px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-feedback {
+	background-color: #323232;
+	background-color: rgba(50, 50, 50, 0.9);
+	-webkit-box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
+	box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2);
+	color: white;
+	padding: 5px 9px;
+	border-radius: 3px;
+	max-width: 35em;
+	overflow: hidden !important;
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-vertical {
+	padding: 11px 0;
+	height: 96px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-vertical .v-slider-base {
+	background-color: #d4d4d4;
+	background-image: -webkit-linear-gradient(right, #d7d7d7 2%, #c7c7c7 98%);
+	background-image: linear-gradient(to left,#d7d7d7 2%, #c7c7c7 98%);
+	width: 6px;
+	height: 100% !important;
+	min-width: 0;
+	margin: 0 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-vertical .v-slider-base:before {
+	top: auto;
+	bottom: 11px;
+	left: 16px;
+	right: 16px;
+	width: auto;
+	height: 8px;
+	border-left: none;
+	border-bottom: 1px solid #1362b1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-vertical .v-slider-base:after {
+	height: 101%;
+	margin-left: 0;
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(left, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to right,#1b87e3 2%, #166ed5 98%);
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-slider-vertical .v-slider-base:after {
+	top: 11px;
+	left: 0;
+	height: 130%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-vertical .v-slider-handle {
+	width: 0;
+	height: 0.1px;
+	width: 37px;
+	display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-vertical .v-slider-handle:before, .org_osbee_vaadin_addons_designer_overlay .v-slider-vertical .v-slider-handle:after {
+	width: 22px;
+	height: 22px;
+	margin-top: -11px;
+	margin-left: -8px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-slider-no-indicator .v-slider-base:before, .org_osbee_vaadin_addons_designer_overlay .v-slider-no-indicator .v-slider-base:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet:not(.v-has-width) {
+	width: auto !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-spacertd {
+	display: none !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabcontainer {
+	position: relative;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabcontainer:before {
+	content: "";
+	position: absolute;
+	height: 0;
+	border-top: 1px solid #dfdfdf;
+	bottom: 0;
+	left: 0;
+	right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabcontainer .v-tabsheet-tabs {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell {
+	vertical-align: bottom;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-tabsheet-tabitem {
+	line-height: 0;
+	overflow: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-caption {
+	margin-left: 19px;
+	padding: 0 4px;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	cursor: pointer;
+	text-align: center;
+	line-height: 37px;
+	font-size: 15px;
+	font-weight: 300;
+	color: #696969;
+	width: auto !important;
+	overflow: hidden;
+	text-overflow: ellipsis;
+	border-bottom: 2px solid transparent;
+	position: relative;
+	-webkit-transition: border-bottom 200ms, color 200ms;
+	-moz-transition: border-bottom 200ms, color 200ms;
+	transition: border-bottom 200ms, color 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-caption .v-captiontext {
+	display: inline;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-caption .v-icon + .v-captiontext {
+	margin-left: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-caption:hover {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-caption.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+	cursor: default;
+	color: inherit !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell:first-child .v-caption, .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell[aria-hidden="true"] + td .v-caption {
+	margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell:focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell:focus .v-caption {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-tabsheet-tabitem-selected .v-caption.v-caption {
+	border-bottom-color: #197de1;
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-caption-closable {
+	padding-right: 22px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell.icons-on-top .v-caption-closable {
+	padding-right: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-tabsheet-caption-close {
+	position: absolute;
+	right: 0;
+	top: 50%;
+	margin: -8px 0 0;
+	font-size: 18px;
+	line-height: 18px;
+	width: 18px;
+	text-align: center;
+	border-radius: 2px;
+	color: #969696;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-tabsheet-caption-close:hover {
+	background: rgba(0, 0, 0, 0.03);
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabitemcell .v-tabsheet-caption-close:active {
+	background: #197de1;
+	color: #c8dbed;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller {
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	padding-left: 19px;
+	background-color: transparent;
+	background-image: -webkit-linear-gradient(right, #fafafa 70%, rgba(250, 250, 250, 0) 100%);
+	background-image: linear-gradient(to left,#fafafa 70%, rgba(250, 250, 250, 0) 100%);
+	pointer-events: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller:after {
+	content: "";
+	height: 1px;
+	position: absolute;
+	bottom: 0;
+	left: 0;
+	right: 0;
+	display: block;
+	background-color: transparent;
+	background-image: -webkit-linear-gradient(right, #dfdfdf 70%, rgba(223, 223, 223, 0) 100%);
+	background-image: linear-gradient(to left,#dfdfdf 70%, rgba(223, 223, 223, 0) 100%);
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller {
+	background-color: #fafafa;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller:after, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller:after {
+	background-color: #dfdfdf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller button {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	border: none;
+	background: transparent;
+	font: inherit;
+	color: inherit;
+	height: 100%;
+	margin: 0;
+	padding: 0 9px;
+	outline: none;
+	cursor: pointer;
+	pointer-events: auto;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller button:hover {
+	opacity: 1;
+	filter: none ;
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller button:active {
+	opacity: 0.7;
+	filter: alpha(opacity=70) ;
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller button::-moz-focus-inner {
+	padding: 0;
+	border: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller [class*="Next"] {
+	padding-left: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller [class*="Next"]:before {
+	font-family: ThemeIcons;
+	content: "\f054";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller [class*="Prev"] {
+	padding-right: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller [class*="Prev"]:before {
+	font-family: ThemeIcons;
+	content: "\f053";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-scroller [class*="disabled"] {
+	cursor: default;
+	color: inherit !important;
+	opacity: 0.1 !important;
+	filter: alpha(opacity=10) !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-tabsheetpanel > .v-scrollable > .v-widget {
+	-webkit-animation: valo-animate-in-fade 300ms backwards;
+	-moz-animation: valo-animate-in-fade 300ms backwards;
+	animation: valo-animate-in-fade 300ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-deco {
+	height: 20px !important;
+	width: 20px !important;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	border: 2px solid rgba(25, 125, 225, 0.2);
+	border-top-color: #197de1;
+	border-right-color: #197de1;
+	border-radius: 100%;
+	-webkit-animation: v-rotate-360 500ms infinite linear;
+	-moz-animation: v-rotate-360 500ms infinite linear;
+	animation: v-rotate-360 500ms infinite linear;
+	pointer-events: none;
+	display: none;
+	position: absolute;
+	z-index: 1;
+	bottom: 50%;
+	margin-bottom: -29px;
+	left: 50%;
+	margin-left: -10px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-deco, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-deco {
+	border: none;
+	border-radius: 4px;
+	background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%;
+	background-size: 80%;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-deco {
+	min-width: 30px;
+	min-height: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-loading .v-tabsheet-deco {
+	display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-equal-width-tabs  > .v-tabsheet-tabcontainer table, .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-equal-width-tabs  > .v-tabsheet-tabcontainer tbody, .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-equal-width-tabs  > .v-tabsheet-tabcontainer tr {
+	width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-equal-width-tabs  > .v-tabsheet-tabcontainer tr {
+	display: table;
+	table-layout: fixed;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-equal-width-tabs  > .v-tabsheet-tabcontainer td {
+	display: table-cell;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-equal-width-tabs  > .v-tabsheet-tabcontainer .v-caption {
+	margin: 0;
+	display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed  > .v-tabsheet-tabcontainer .v-caption {
+	margin-left: 4px;
+	padding: 0 12px;
+	background-color: #fafafa;
+	border: 1px solid transparent;
+	line-height: 36px;
+	border-radius: 4px 4px 0 0;
+	font-weight: 400;
+	-webkit-transition: background-color 160ms;
+	-moz-transition: background-color 160ms;
+	transition: background-color 160ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed  > .v-tabsheet-tabcontainer .v-caption:hover {
+	background-color: #f2f2f2;
+	border-bottom-color: #dfdfdf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed  > .v-tabsheet-tabcontainer .v-caption.v-disabled:hover {
+	background-color: #fafafa;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed  > .v-tabsheet-tabcontainer .v-caption-closable {
+	padding-right: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed  > .v-tabsheet-tabcontainer .v-tabsheet-caption-close {
+	top: 4px;
+	right: 4px;
+	margin-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed  > .v-tabsheet-tabcontainer td:first-child .v-caption, .org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed  > .v-tabsheet-tabcontainer [aria-hidden="true"] + td .v-caption {
+	margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed  > .v-tabsheet-tabcontainer .v-tabsheet-tabitem .v-caption {
+	border-color: #dfdfdf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed  > .v-tabsheet-tabcontainer .v-tabsheet-tabitem-selected .v-caption {
+	background: white;
+	border-color: #dfdfdf;
+	border-bottom: none;
+	padding-bottom: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed  > .v-tabsheet-content {
+	border: 1px solid #dfdfdf;
+	border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed  > .v-tabsheet-content  > div {
+	background: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed.padded-tabbar  > .v-tabsheet-tabcontainer {
+	border: 1px solid #dfdfdf;
+	border-bottom: none;
+	background: #fafafa;
+	padding-top: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-framed.icons-on-top  > .v-tabsheet-tabcontainer .v-tabsheet-tabitem-selected .v-caption {
+	padding-bottom: 7px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-centered-tabs  > .v-tabsheet-tabcontainer {
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-right-aligned-tabs  > .v-tabsheet-tabcontainer {
+	text-align: right;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-padded-tabbar  > .v-tabsheet-tabcontainer .v-tabsheet-tabs {
+	padding: 0 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-icons-on-top  > .v-tabsheet-tabcontainer .v-caption {
+	padding-top: 6px;
+	padding-bottom: 6px;
+	line-height: 1.2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-icons-on-top  > .v-tabsheet-tabcontainer .v-icon {
+	display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-icons-on-top  > .v-tabsheet-tabcontainer .v-icon  + .v-captiontext.v-captiontext {
+	margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-icons-on-top  > .v-tabsheet-tabcontainer .v-caption-closable {
+	padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-icons-on-top  > .v-tabsheet-tabcontainer .v-tabsheet-caption-close {
+	top: 4px;
+	margin-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-compact-tabbar  > .v-tabsheet-tabcontainer-compact-tabbar .v-caption {
+	line-height: 1.8;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-only-selected-closable  > .v-tabsheet-tabcontainer .v-tabsheet-caption-close {
+	visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-tabsheet-only-selected-closable  > .v-tabsheet-tabcontainer .v-tabsheet-tabitem-selected .v-tabsheet-caption-close {
+	visibility: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup.v-window {
+	min-width: 220px !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-tabsheet-tabs {
+	padding: 0 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup [class$="sliders"] {
+	padding: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup [class$="sliders"] .v-widget {
+	width: 100% !important;
+	vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup [class$="sliders"] .v-has-caption {
+	white-space: nowrap;
+	padding-left: 48px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup [class$="sliders"] .v-caption {
+	display: inline-block;
+	margin-left: -48px;
+	width: 48px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup [class$="sliders"] .v-slot-hue-slider + .v-slot .v-has-caption {
+	padding-left: 80px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup [class$="sliders"] .v-slot-hue-slider + .v-slot .v-caption {
+	margin-left: -80px;
+	width: 80px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-slider-red .v-slider-base:after {
+	background: red;
+	border: none;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-slider-green .v-slider-base:after {
+	background: green;
+	border: none;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-slider-blue .v-slider-base:after {
+	background: blue;
+	border: none;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-margin-bottom {
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .resize-button {
+	width: 100% !important;
+	height: auto !important;
+	text-align: center;
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .resize-button:before {
+	font-family: ThemeIcons;
+	content: "\f141";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .resize-button-caption {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-horizontallayout {
+	height: auto !important;
+	padding: 9px 0;
+	background-color: #fafafa;
+	border-top: 1px solid #ededed;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-horizontallayout .v-expand {
+	overflow: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-popup .v-horizontallayout .v-button {
+	width: 80% !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-preview {
+	width: 100% !important;
+	height: auto !important;
+	padding: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-preview-textfield {
+	height: auto !important;
+	text-align: center;
+	border: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker {
+	width: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-button-color {
+	position: absolute;
+	top: 6px;
+	right: 6px;
+	bottom: 6px;
+	left: 6px;
+	border-radius: 3px;
+	border: 1px solid rgba(0, 0, 0, 0.5);
+	max-width: 23px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-colorpicker-button-color  + .v-button-caption:not(:empty) {
+	margin-left: 19px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-colorpicker-button-color {
+	position: relative;
+	top: auto;
+	right: auto;
+	bottom: auto;
+	left: auto;
+	width: 16px;
+	height: 16px;
+	display: inline-block;
+	vertical-align: middle;
+	margin: 0 -8px;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-colorpicker-button-color  + .v-button-caption {
+	margin-left: 19px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel {
+	background: white;
+	color: #474747;
+	border-radius: 4px;
+	border: 1px solid #d5d5d5;
+	-webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+	overflow: visible !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-caption {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	padding: 0 12px;
+	line-height: 36px;
+	border-bottom: 1px solid #d5d5d5;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #f6f6f6 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #f6f6f6 98%);
+	color: #464646;
+	font-weight: 400;
+	font-size: 14px;
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #eeeeee;
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #eeeeee;
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	border-radius: 3px 3px 0 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-content {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	width: 100%;
+	height: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-content  > .v-margin-top {
+	padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-content  > .v-margin-right {
+	padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-content  > .v-margin-bottom {
+	padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-content  > .v-margin-left {
+	padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-borderless {
+	background: transparent;
+	color: inherit;
+	border: none;
+	border-radius: 0;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-borderless  > div > [class*="-caption"] {
+	background: transparent;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	color: inherit;
+	padding: 0;
+	margin: 0 12px;
+	border-bottom: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-well {
+	background: #f5f5f5;
+	color: #454545;
+	-webkit-box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 1px 0 0 rgba(255, 255, 255, 0.05), inset 0 2px 3px rgba(0, 0, 0, 0.05);
+	border-radius: 4px;
+	border: 1px solid #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-well  > div > [class*="-caption"] {
+	background: transparent;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-scroll-divider  > [class*="-captionwrap"] {
+	position: relative;
+	z-index: 2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-scroll-divider  > [class*="-captionwrap"]:after {
+	content: "";
+	position: absolute;
+	bottom: -1px;
+	right: 0;
+	left: 0;
+	height: 0;
+	border-top: 1px solid #dfdfdf;
+	border-color: rgba(197, 197, 197, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-scroll-divider  > [class*="-content"]:before {
+	content: "";
+	position: absolute;
+	z-index: 2;
+	top: 0;
+	height: 0;
+	border-top: 1px solid #fafafa;
+	left: 0;
+	right: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-caption.v-horizontallayout {
+	height: auto !important;
+	line-height: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-caption.v-horizontallayout .v-slot {
+	vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-panel-caption.v-horizontallayout .v-label {
+	line-height: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion {
+	background: white;
+	color: #474747;
+	border-radius: 4px;
+	border: 1px solid #d5d5d5;
+	-webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #f4f4f4 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #f4f4f4 98%);
+	overflow: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item:first-child {
+	border-top-left-radius: 3px;
+	border-top-right-radius: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item:last-child {
+	border-bottom-left-radius: 3px;
+	border-bottom-right-radius: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item:last-child [class*="item-content"] {
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item[class*="item-open"]:last-child > div > .v-caption {
+	border-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item:not([class*="item-open"]):last-child > div > .v-caption {
+	border-bottom: none;
+	margin-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item[class*="item-open"] + [class*="item"] {
+	border-top: 1px solid #d9d9d9;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-caption {
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-caption  > .v-caption {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	padding: 0 12px;
+	line-height: 36px;
+	border-bottom: 1px solid #d5d5d5;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #f6f6f6 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #f6f6f6 98%);
+	color: #464646;
+	font-weight: 400;
+	font-size: 14px;
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #eeeeee;
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #eeeeee;
+	text-shadow: 0 1px 0 rgba(255, 255, 255, 0.05);
+	display: block;
+	background: transparent;
+	border-bottom-color: #c9c9c9;
+	border-radius: inherit;
+	cursor: pointer;
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-caption  > .v-caption:hover:before, .org_osbee_vaadin_addons_designer_overlay .v-accordion-item-caption  > .v-caption:active:before {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+	border-radius: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-caption  > .v-caption:hover:before {
+	background-color: rgba(186, 186, 186, 0.1);
+	border: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-caption  > .v-caption:active:before {
+	background-color: rgba(125, 125, 125, 0.2);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-content {
+	-webkit-box-shadow: inset 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: inset 0 2px 3px rgba(0, 0, 0, 0.05);
+	background-color: white;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-content  > .v-margin-top {
+	padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-content  > .v-margin-right {
+	padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-content  > .v-margin-bottom {
+	padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-item-content  > .v-margin-left {
+	padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-borderless {
+	border: none;
+	border-radius: 0;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-accordion-borderless  > .v-accordion-item, .org_osbee_vaadin_addons_designer_overlay .v-accordion-borderless  > .v-accordion-item > div > .v-caption, .org_osbee_vaadin_addons_designer_overlay .v-accordion-borderless  > .v-accordion-item > .v-accordion-item-content {
+	border-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol {
+	white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol select {
+	border: 1px solid #c5c5c5;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	color: #464646;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol select:focus {
+	outline: none;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol .v-textfield, .org_osbee_vaadin_addons_designer_overlay .v-select-twincol .v-nativebutton {
+	width: auto !important;
+	margin-top: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol .v-nativebutton {
+	margin-left: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-caption-left, .org_osbee_vaadin_addons_designer_overlay .v-select-twincol-caption-right {
+	font-size: 14px;
+	font-weight: 400;
+	padding-bottom: 0.3em;
+	padding-left: 1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons {
+	white-space: nowrap;
+	display: inline-block;
+	vertical-align: top;
+	position: relative;
+	min-width: 3.5em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	display: inline-block;
+	vertical-align: top;
+	text-align: left;
+	white-space: normal;
+	position: absolute;
+	left: 9px;
+	right: 9px;
+	top: 36px;
+	padding: 0;
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button:first-child {
+	top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button-caption {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button:focus {
+	z-index: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button:first-child {
+	border-radius: 4px 4px 0 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button:last-child {
+	border-radius: 0 0 4px 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button-wrap:before {
+	font-family: ThemeIcons;
+	content: "\f053";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-twincol-buttons .v-button:first-child .v-button-wrap:before {
+	font-family: ThemeIcons;
+	content: "\f054";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select select {
+	border: 1px solid #c5c5c5;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	color: #464646;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select select:focus {
+	outline: none;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-select {
+	display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-select  + .v-textfield {
+	width: auto !important;
+	margin-top: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-select  + .v-textfield  + .v-nativebutton {
+	margin-top: 9px;
+	margin-left: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-day {
+	font-weight: 400;
+	text-align: center;
+	padding: 7px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-back, .org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-next {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	background: transparent;
+	border: none;
+	padding: 0;
+	margin: 0;
+	cursor: pointer;
+	outline: none;
+	color: inherit;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-back:focus, .org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-next:focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-back:hover, .org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-next:hover {
+	opacity: 1;
+	filter: none ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-back:active, .org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-next:active {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-back:before {
+	font-family: ThemeIcons;
+	content: "\f053";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-next:before {
+	font-family: ThemeIcons;
+	content: "\f054";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month {
+	outline: none;
+	overflow: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month td {
+	vertical-align: top;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-number {
+	cursor: pointer;
+	width: 20px;
+	text-align: center;
+	font-size: 0.8em;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-number:hover {
+	opacity: 1;
+	filter: none ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month-day {
+	outline: none;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	line-height: 1.2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-bottom-spacer, .org_osbee_vaadin_addons_designer_overlay .v-calendar-spacer, .org_osbee_vaadin_addons_designer_overlay .v-calendar-bottom-spacer-empty {
+	height: 19px;
+	margin-bottom: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-bottom-spacer {
+	font-size: 0.8em;
+	padding: 0 5px;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-bottom-spacer:hover {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-day-number {
+	line-height: 25px;
+	font-size: 16px;
+	text-align: right;
+	margin: 0 5px;
+	white-space: nowrap;
+	border-top: 1px solid #f2f2f2;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-day-number:hover {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month-day-today {
+	background: #eef3f8;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month-day-today .v-calendar-day-number {
+	font-weight: 400;
+	color: #197de1;
+	border-top: 2px solid #197de1;
+	line-height: 24px;
+	margin: 0;
+	padding: 0 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month-day-selected {
+	background-color: #e3edf7;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month-day-dragemphasis {
+	background-color: #a8a8a8;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-month-day-scrollable {
+	overflow-y: scroll;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-weekly-longevents {
+	margin-left: 50px;
+	border-bottom: 3px solid #e0e0e0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-weekly-longevents .v-calendar-event-all-day {
+	height: 22px;
+	line-height: 1.6;
+	margin-bottom: 3px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week td {
+	vertical-align: middle !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-header-week .v-calendar-header-day {
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-times {
+	width: 50px;
+	font-size: 0.77em;
+	line-height: 1;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-time {
+	text-align: right;
+	padding-right: 9px;
+	margin-top: -6px;
+	padding-bottom: 6px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-day-times, .org_osbee_vaadin_addons_designer_overlay .v-calendar-day-times-today {
+	outline: none;
+	border-right: 1px solid transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-day-times:focus, .org_osbee_vaadin_addons_designer_overlay .v-calendar-day-times-today:focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-datecellslot, .org_osbee_vaadin_addons_designer_overlay .v-calendar .v-datecellslot-even {
+	border-top: 1px solid #dfdfdf;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-datecellslot:first-child, .org_osbee_vaadin_addons_designer_overlay .v-calendar .v-datecellslot-even:first-child {
+	border-top-color: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-datecellslot {
+	border-top-style: dotted;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-datecellslot, .org_osbee_vaadin_addons_designer_overlay .v-calendar .v-datecellslot-even {
+	margin-right: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-current-time {
+	background: #197de1;
+	line-height: 1px;
+	pointer-events: none;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-current-time:before {
+	content: "\2022";
+	color: #197de1;
+	font-size: 22px;
+	margin-left: -0.07em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-daterange {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-daterange:before {
+	content: "";
+	position: absolute;
+	top: 0;
+	right: 0;
+	bottom: -1px;
+	left: 0;
+	background: #197de1;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+	border-radius: 4px 4px 0 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-daterange  + .v-daterange {
+	border-color: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar .v-daterange  + .v-daterange:before {
+	border-radius: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event {
+	font-size: 0.85em;
+	overflow: hidden;
+	cursor: pointer;
+	outline: none;
+	border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event:focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month {
+	padding: 0 5px;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	margin-bottom: 3px;
+	white-space: nowrap;
+	text-overflow: ellipsis;
+	height: 19px;
+	line-height: 19px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month .v-calendar-event-time {
+	float: right;
+	font-size: 0.9em;
+	line-height: 19px;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month:before {
+	content: "\25cf";
+	margin-right: 0.2em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-all-day {
+	padding: 0 5px;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	height: 19px;
+	line-height: 19px;
+	border-radius: 0;
+	margin-left: -1px;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-all-day:before {
+	content: "";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-start {
+	overflow: visible;
+	margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-start.v-calendar-event-continued-to, .org_osbee_vaadin_addons_designer_overlay .v-calendar-event-start.v-calendar-event-end {
+	overflow: hidden;
+	text-overflow: ellipsis;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-start {
+	border-top-left-radius: 4px;
+	border-bottom-left-radius: 4px;
+	margin-left: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-end {
+	border-top-right-radius: 4px;
+	border-bottom-right-radius: 4px;
+	margin-right: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-caption {
+	font-weight: 500;
+	line-height: 1.2;
+	padding: 5px 0;
+	position: absolute;
+	overflow: hidden;
+	right: 9px;
+	left: 5px;
+	bottom: 0;
+	top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-caption span {
+	font-weight: 300;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event {
+	overflow: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event-content {
+	margin-top: -1px;
+	border-radius: 5px;
+	border: 1px solid #fafafa;
+	padding-top: 3px;
+	margin-right: 5px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month:before {
+	color: #00ace0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-all-day {
+	background-color: #c8eaf4;
+	background-color: rgba(200, 234, 244, 0.8);
+	color: #00ace0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event {
+	color: #00ace0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event .v-calendar-event-content {
+	background-color: #c8eaf4;
+	background-color: rgba(200, 234, 244, 0.8);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month[class*="color2"]:before {
+	color: #2d9f19;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-all-day[class*="color2"] {
+	background-color: #d1e7cd;
+	background-color: rgba(209, 231, 205, 0.8);
+	color: #2d9f19;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color2"] {
+	color: #2d9f19;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color2"] .v-calendar-event-content {
+	background-color: #d1e7cd;
+	background-color: rgba(209, 231, 205, 0.8);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month[class*="color3"]:before {
+	color: #d18100;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-all-day[class*="color3"] {
+	background-color: #f1e1c8;
+	background-color: rgba(241, 225, 200, 0.8);
+	color: #d18100;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color3"] {
+	color: #d18100;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color3"] .v-calendar-event-content {
+	background-color: #f1e1c8;
+	background-color: rgba(241, 225, 200, 0.8);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month[class*="color4"]:before {
+	color: #ce3812;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-all-day[class*="color4"] {
+	background-color: #f1d3cb;
+	background-color: rgba(241, 211, 203, 0.8);
+	color: #ce3812;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color4"] {
+	color: #ce3812;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color4"] .v-calendar-event-content {
+	background-color: #f1d3cb;
+	background-color: rgba(241, 211, 203, 0.8);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-month[class*="color5"]:before {
+	color: #2d55cd;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-event-all-day[class*="color5"] {
+	background-color: #d1d9f1;
+	background-color: rgba(209, 217, 241, 0.8);
+	color: #2d55cd;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color5"] {
+	color: #2d55cd;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar-week-wrapper .v-calendar-event[class*="color5"] .v-calendar-event-content {
+	background-color: #d1d9f1;
+	background-color: rgba(209, 217, 241, 0.8);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-calendar.v-disabled * {
+	cursor: default;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label {
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-undef-w {
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay h1, .org_osbee_vaadin_addons_designer_overlay .v-label-h1, .org_osbee_vaadin_addons_designer_overlay h2, .org_osbee_vaadin_addons_designer_overlay .v-label-h2, .org_osbee_vaadin_addons_designer_overlay h3, .org_osbee_vaadin_addons_designer_overlay .v-label-h3 {
+	line-height: 1.1;
+	font-weight: 200;
+	color: #141414;
+}
+
+.org_osbee_vaadin_addons_designer_overlay h1, .org_osbee_vaadin_addons_designer_overlay .v-label-h1 {
+	font-size: 2.4em;
+	margin-top: 1.4em;
+	margin-bottom: 1em;
+	
+	letter-spacing: -0.03em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay h2, .org_osbee_vaadin_addons_designer_overlay .v-label-h2 {
+	font-size: 1.6em;
+	
+	margin-top: 1.6em;
+	margin-bottom: 0.77em;
+	letter-spacing: -0.02em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay h3, .org_osbee_vaadin_addons_designer_overlay .v-label-h3 {
+	font-size: 1.2em;
+	
+	margin-top: 1.8em;
+	margin-bottom: 0.77em;
+	letter-spacing: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay h4, .org_osbee_vaadin_addons_designer_overlay .v-label-h4 {
+	line-height: 1.1;
+	font-weight: 500;
+	font-size: 14px;
+	color: #414141;
+	text-transform: uppercase;
+	letter-spacing: 0;
+	margin-top: 2.4em;
+	margin-bottom: 0.8em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-csslayout  > h1:first-child, .org_osbee_vaadin_addons_designer_overlay .v-csslayout  > h2:first-child, .org_osbee_vaadin_addons_designer_overlay .v-csslayout  > h3:first-child, .org_osbee_vaadin_addons_designer_overlay .v-csslayout  > h4 > .v-label-h1:first-child, .org_osbee_vaadin_addons_designer_overlay .v-csslayout  > .v-label-h2:first-child, .org_osbee_vaadin_addons_designer_overlay .v-csslayout  > .v-label-h3:first-child, .org_osbee_vaadin_addons_designer_overlay .v-csslayout  > .v-label-h4:first-child {
+	margin-top: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-label-h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child h4, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-label-h4, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-label-h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child h4, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-label-h4 {
+	margin-top: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell .v-label-h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell h4, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > .v-slot:first-child .v-formlayout-contentcell .v-label-h4, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell .v-label-h1, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell h4, .org_osbee_vaadin_addons_designer_overlay .v-verticallayout > div > .v-slot:first-child .v-formlayout-contentcell .v-label-h4 {
+	margin-top: -0.5em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay h1.no-margin, .org_osbee_vaadin_addons_designer_overlay .v-label-h1.no-margin, .org_osbee_vaadin_addons_designer_overlay h2.no-margin, .org_osbee_vaadin_addons_designer_overlay .v-label-h2.no-margin, .org_osbee_vaadin_addons_designer_overlay h3.no-margin, .org_osbee_vaadin_addons_designer_overlay .v-label-h3.no-margin, .org_osbee_vaadin_addons_designer_overlay h4.no-margin, .org_osbee_vaadin_addons_designer_overlay .v-label-h4.no-margin {
+	margin: 0 !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-colored {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-large {
+	font-size: 20px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-small {
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-tiny {
+	font-size: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-huge {
+	font-size: 26px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-bold {
+	font-weight: 500;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-light {
+	font-weight: 200;
+	color: #7d7d7d;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-align-right {
+	text-align: right;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-align-center {
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-spinner {
+	height: 24px !important;
+	width: 24px !important;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	border: 2px solid rgba(25, 125, 225, 0.2);
+	border-top-color: #197de1;
+	border-right-color: #197de1;
+	border-radius: 100%;
+	-webkit-animation: v-rotate-360 500ms infinite linear;
+	-moz-animation: v-rotate-360 500ms infinite linear;
+	animation: v-rotate-360 500ms infinite linear;
+	pointer-events: none;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-label-spinner, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-label-spinner {
+	border: none;
+	border-radius: 4px;
+	background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%;
+	background-size: 80%;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-label-spinner {
+	min-width: 30px;
+	min-height: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-success, .org_osbee_vaadin_addons_designer_overlay .v-label-failure {
+	background: white;
+	color: #474747;
+	border: 2px solid #2c9720;
+	border-radius: 4px;
+	padding: 7px 19px 7px 37px;
+	font-weight: 400;
+	font-size: 15px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-success:before, .org_osbee_vaadin_addons_designer_overlay .v-label-failure:before {
+	font-family: ThemeIcons;
+	content: "\f00c";
+	margin-right: 0.5em;
+	margin-left: -19px;
+	color: #2c9720;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-failure {
+	border-color: #ed473b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-label-failure:before {
+	content: "\f05e";
+	color: #ed473b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay [draggable=true] {
+	-khtml-user-drag: element;
+	-webkit-user-drag: element;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-ddwrapper {
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over:before, .org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over:after {
+	content: "";
+	position: absolute;
+	z-index: 10;
+	top: -1px;
+	right: -1px;
+	bottom: -1px;
+	left: -1px;
+	border: 0 solid #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over-top:before {
+	border-top-width: 2px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over-right:before {
+	border-right-width: 2px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over-bottom:before {
+	border-bottom-width: 2px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over-left:before {
+	border-left-width: 2px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints .v-ddwrapper-over-top:before, .org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints.v-ddwrapper-over-top:before {
+	border-top-width: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints .v-ddwrapper-over-top:after, .org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints.v-ddwrapper-over-top:after {
+	border-width: 2px;
+	border-radius: 4px;
+	opacity: 0.3;
+	filter: alpha(opacity=30.0) ;
+	background: #8abef2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints .v-ddwrapper-over-bottom:before, .org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints.v-ddwrapper-over-bottom:before {
+	border-bottom-width: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints .v-ddwrapper-over-bottom:after, .org_osbee_vaadin_addons_designer_overlay .no-vertical-drag-hints.v-ddwrapper-over-bottom:after {
+	border-width: 2px;
+	border-radius: 4px;
+	opacity: 0.3;
+	filter: alpha(opacity=30.0) ;
+	background: #8abef2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints.v-ddwrapper-over-left:before, .org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints .v-ddwrapper-over-left:before {
+	border-left-width: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints.v-ddwrapper-over-left:after, .org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints .v-ddwrapper-over-left:after {
+	border-width: 2px;
+	border-radius: 4px;
+	opacity: 0.3;
+	filter: alpha(opacity=30.0) ;
+	background: #8abef2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints.v-ddwrapper-over-right:before, .org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints .v-ddwrapper-over-right:before {
+	border-right-width: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints.v-ddwrapper-over-right:after, .org_osbee_vaadin_addons_designer_overlay .no-horizontal-drag-hints .v-ddwrapper-over-right:after {
+	border-width: 2px;
+	border-radius: 4px;
+	opacity: 0.3;
+	filter: alpha(opacity=30.0) ;
+	background: #8abef2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over-middle:after, .org_osbee_vaadin_addons_designer_overlay .v-ddwrapper-over-center:after {
+	border-width: 2px;
+	border-radius: 4px;
+	opacity: 0.3;
+	filter: alpha(opacity=30.0) ;
+	background: #8abef2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .no-box-drag-hints.v-ddwrapper:after, .org_osbee_vaadin_addons_designer_overlay .no-box-drag-hints .v-ddwrapper:after {
+	display: none !important;
+	content: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-nativebutton {
+	-webkit-touch-callout: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select select {
+	border: 1px solid #c5c5c5;
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	color: #464646;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select select:focus {
+	outline: none;
+	-webkit-box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+	box-shadow: 0 0 0 2px rgba(25, 125, 225, 0.5);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-select {
+	display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-select  + .v-textfield {
+	width: auto !important;
+	margin-top: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-select-select  + .v-textfield  + .v-nativebutton {
+	margin-top: 9px;
+	margin-left: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview {
+	cursor: pointer;
+	color: #197de1;
+	text-decoration: underline;
+	font-weight: inherit;
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview:hover {
+	color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview.v-disabled {
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-popup {
+	padding: 4px 4px;
+	border-radius: 4px;
+	background-color: white;
+	color: #474747;
+	-webkit-box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+	box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.1), 0 3px 5px 0 rgba(0, 0, 0, 0.05), 0 0 0 1px rgba(0, 0, 0, 0.09098);
+	-webkit-backface-visibility: hidden;
+	-moz-backface-visibility: hidden;
+	-ms-backface-visibility: hidden;
+	backface-visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-popup[class*="animate-in"] {
+	-webkit-animation: v-popupview-animate-in 120ms;
+	-moz-animation: v-popupview-animate-in 120ms;
+	animation: v-popupview-animate-in 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-popup[class*="animate-out"] {
+	-webkit-animation: valo-animate-out-fade 120ms;
+	-moz-animation: valo-animate-out-fade 120ms;
+	animation: valo-animate-out-fade 120ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-popup .popupContent  > .v-margin-top {
+	padding-top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-popup .popupContent  > .v-margin-right {
+	padding-right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-popup .popupContent  > .v-margin-bottom {
+	padding-bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-popup .popupContent  > .v-margin-left {
+	padding-left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-popupview-loading {
+	margin: 12px 12px;
+	height: 24px !important;
+	width: 24px !important;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	border: 2px solid rgba(25, 125, 225, 0.2);
+	border-top-color: #197de1;
+	border-right-color: #197de1;
+	border-radius: 100%;
+	-webkit-animation: v-rotate-360 500ms infinite linear;
+	-moz-animation: v-rotate-360 500ms infinite linear;
+	animation: v-rotate-360 500ms infinite linear;
+	pointer-events: none;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-popupview-loading, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-popupview-loading {
+	border: none;
+	border-radius: 4px;
+	background: #fff url(../valo/shared/img/spinner.gif) no-repeat 50% 50%;
+	background-size: 80%;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-popupview-loading {
+	min-width: 30px;
+	min-height: 30px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea {
+	-webkit-appearance: none;
+	-moz-appearance: none;
+	-ms-appearance: none;
+	-o-appearance: none;
+	appearance: none;
+	-webkit-user-select: text;
+	-moz-user-select: text;
+	-ms-user-select: text;
+	user-select: text;
+	margin: 0;
+	font: inherit;
+	
+	font-weight: 400;
+	line-height: normal;
+	height: 37px;
+	border-radius: 4px;
+	padding: 0;
+	border: 1px solid #c5c5c5;
+	background: white;
+	color: #474747;
+	-webkit-box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	box-shadow: inset 0 1px 0 #f7f7f7, 0 1px 0 rgba(255, 255, 255, 0.1);
+	-webkit-transition: box-shadow 180ms, border 180ms;
+	-moz-transition: box-shadow 180ms, border 180ms;
+	transition: box-shadow 180ms, border 180ms;
+	height: auto;
+	overflow: hidden;
+}
+
+.v-ie8 .org_osbee_vaadin_addons_designer_overlay .v-richtextarea, .v-ie9 .org_osbee_vaadin_addons_designer_overlay .v-richtextarea {
+	line-height: 37px;
+	padding-top: 0;
+	padding-bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea[class*="prompt"] {
+	color: #a3a3a3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar {
+	background-color: #fafafa;
+	background-image: -webkit-linear-gradient(top, #fafafa 2%, #efefef 98%);
+	background-image: linear-gradient(to bottom,#fafafa 2%, #efefef 98%);
+	-webkit-box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7;
+	box-shadow: inset 0 1px 0 white, inset 0 -1px 0 #e7e7e7;
+	border-bottom: 1px solid #c5c5c5;
+	color: #464646;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-ToggleButton, .org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-PushButton {
+	display: inline-block;
+	line-height: 37px;
+	width: 37px;
+	text-align: center;
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-ToggleButton:hover, .org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-PushButton:hover {
+	color: black;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-ToggleButton-down, .org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-ToggleButton-down-hovering {
+	background-color: #e0e0e0;
+	background-image: -webkit-linear-gradient(bottom, #e0e0e0 2%, #dcdcdc 98%);
+	background-image: linear-gradient(to top,#e0e0e0 2%, #dcdcdc 98%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top img {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div:before {
+	font-family: ThemeIcons;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Bold"]:before {
+	content: "\f032";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Italic"]:before {
+	content: "\f033";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Underline"]:before {
+	content: "\f0cd";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Subscript"]:before {
+	content: "\f12c";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Superscript"]:before {
+	content: "\f12b";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Left Justify"]:before {
+	content: "\f036";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Center"]:before {
+	content: "\f037";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Right Justify"]:before {
+	content: "\f038";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Toggle Strikethrough"]:before {
+	content: "\f0cc";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Indent Right"]:before {
+	content: "\f03c";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Indent Left"]:before {
+	content: "\f03b";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Insert Horizontal Rule"]:before {
+	content: "\2014";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Insert Ordered List"]:before {
+	content: "\f0cb";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Insert Unordered List"]:before {
+	content: "\f0ca";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Insert Image"]:before {
+	content: "\f03e";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Create Link"]:before {
+	content: "\f0c1";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Remove Link"]:before {
+	content: "\f127";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-top div[title="Remove Formatting"]:before {
+	content: "\f12d";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-bottom {
+	font-size: 13px;
+	padding: 0 9px 9px 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextToolbar-bottom select {
+	margin: 9px 0 0 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea .gwt-RichTextArea {
+	background: #fff;
+	border: none;
+	display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-richtextarea-readonly {
+	padding: 5px 7px;
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-upload .v-button {
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+	display: inline-block;
+	vertical-align: top;
+	text-align: left;
+	white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-upload-immediate .v-button {
+	width: 100%;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-upload-immediate input[type="file"] {
+	opacity: 0;
+	filter: alpha(opacity=0) ;
+	z-index: -1;
+	position: absolute;
+	right: 0;
+	height: 37px;
+	text-align: right;
+	border: none;
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.v-position-top {
+	top: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.v-position-right {
+	right: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.v-position-bottom {
+	bottom: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.v-position-left {
+	left: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.v-position-assistive {
+	top: -9999px;
+	left: -9999px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-animate-in {
+	-webkit-animation: valo-animate-in-fade 180ms 10ms backwards;
+	-moz-animation: valo-animate-in-fade 180ms 10ms backwards;
+	animation: valo-animate-in-fade 180ms 10ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-animate-in.v-position-top {
+	-webkit-animation: valo-animate-in-slide-down 400ms 10ms backwards;
+	-moz-animation: valo-animate-in-slide-down 400ms 10ms backwards;
+	animation: valo-animate-in-slide-down 400ms 10ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-animate-in.v-position-bottom {
+	-webkit-animation: valo-animate-in-slide-up 400ms 10ms backwards;
+	-moz-animation: valo-animate-in-slide-up 400ms 10ms backwards;
+	animation: valo-animate-in-slide-up 400ms 10ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-animate-out {
+	-webkit-animation: valo-animate-out-fade 150ms;
+	-moz-animation: valo-animate-out-fade 150ms;
+	animation: valo-animate-out-fade 150ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-animate-out.v-position-top, .org_osbee_vaadin_addons_designer_overlay .v-Notification-animate-out.v-position-bottom {
+	-webkit-animation: valo-animate-out-slide-down-fade 200ms;
+	-moz-animation: valo-animate-out-slide-down-fade 200ms;
+	animation: valo-animate-out-slide-down-fade 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification {
+	border-radius: 4px;
+	text-align: center;
+	position: fixed !important;
+	-webkit-backface-visibility: hidden;
+	-moz-backface-visibility: hidden;
+	-ms-backface-visibility: hidden;
+	backface-visibility: hidden;
+	background: white;
+	-webkit-box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.15);
+	box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.15);
+	padding: 19px 22px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification .v-Notification-caption {
+	color: #197de1;
+	font-size: 19px;
+	line-height: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification .v-Notification-description {
+	line-height: 1.4;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-caption {
+	margin: 0;
+	display: inline-block;
+	text-align: left;
+	font-weight: inherit;
+	line-height: inherit;
+	white-space: nowrap;
+	letter-spacing: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-description, .org_osbee_vaadin_addons_designer_overlay .v-Notification-details {
+	margin: 0;
+	display: inline-block;
+	vertical-align: middle;
+	max-width: 30em;
+	text-align: left;
+	max-height: 20em;
+	overflow: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-caption ~ .v-Notification-description, .org_osbee_vaadin_addons_designer_overlay .v-Notification-caption ~ .v-Notification-details {
+	margin-left: 24px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-icon + .v-Notification-caption {
+	margin-left: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system {
+	left: 0 !important;
+	right: 0;
+	max-width: 100%;
+	margin: 0 !important;
+	border-radius: 0;
+	-webkit-box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25);
+	box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25);
+	padding: 12px 15px;
+	background-color: #444;
+	background-color: rgba(68, 68, 68, 0.9);
+	font-weight: 400;
+	line-height: 22px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system .v-Notification-description, .org_osbee_vaadin_addons_designer_overlay .v-Notification-system .v-Notification-details {
+	max-width: 50em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system.v-position-top {
+	top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system.v-position-top[class*="animate-in"] {
+	-webkit-animation: valo-animate-in-slide-down 300ms 10ms backwards;
+	-moz-animation: valo-animate-in-slide-down 300ms 10ms backwards;
+	animation: valo-animate-in-slide-down 300ms 10ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system.v-position-top[class*="animate-out"] {
+	-webkit-animation: valo-animate-out-slide-up 200ms;
+	-moz-animation: valo-animate-out-slide-up 200ms;
+	animation: valo-animate-out-slide-up 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system.v-position-bottom {
+	bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system.v-position-bottom[class*="animate-in"] {
+	-webkit-animation: valo-animate-in-slide-up 300ms 10ms backwards;
+	-moz-animation: valo-animate-in-slide-up 300ms 10ms backwards;
+	animation: valo-animate-in-slide-up 300ms 10ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system.v-position-bottom[class*="animate-out"] {
+	-webkit-animation: valo-animate-out-slide-down 200ms;
+	-moz-animation: valo-animate-out-slide-down 200ms;
+	animation: valo-animate-out-slide-down 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system .v-Notification-caption {
+	color: #fff;
+	vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system .v-Notification-description, .org_osbee_vaadin_addons_designer_overlay .v-Notification-system .v-Notification-details {
+	color: #e6e6e6;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification-system u {
+	text-decoration: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.tray {
+	text-align: left;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.tray .v-Notification-caption + .v-Notification-description {
+	display: block;
+	margin: 0.5em 0 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.warning {
+	background: #FFF3D2;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.warning .v-Notification-caption {
+	color: #AC7C00;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.warning .v-Notification-description {
+	color: #9D874D;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.error {
+	background: #ed473b;
+	font-weight: 400;
+	-webkit-box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.25);
+	box-shadow: 0px 5px 15px 0px rgba(0, 0, 0, 0.25);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.error .v-Notification-caption {
+	color: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.error .v-Notification-description {
+	color: #f4e0df;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.dark {
+	background-color: #444;
+	background-color: rgba(68, 68, 68, 0.9);
+	font-weight: 400;
+	line-height: 22px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.dark .v-Notification-caption {
+	color: #fff;
+	vertical-align: middle;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.dark .v-Notification-description, .org_osbee_vaadin_addons_designer_overlay .v-Notification.dark .v-Notification-details {
+	color: #e6e6e6;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar {
+	left: 0 !important;
+	right: 0;
+	max-width: 100%;
+	margin: 0 !important;
+	border-radius: 0;
+	-webkit-box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25);
+	box-shadow: 0 0 20px 0 rgba(0, 0, 0, 0.25);
+	padding: 12px 15px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar .v-Notification-description, .org_osbee_vaadin_addons_designer_overlay .v-Notification.bar .v-Notification-details {
+	max-width: 50em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar.v-position-top {
+	top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar.v-position-top[class*="animate-in"] {
+	-webkit-animation: valo-animate-in-slide-down 300ms 10ms backwards;
+	-moz-animation: valo-animate-in-slide-down 300ms 10ms backwards;
+	animation: valo-animate-in-slide-down 300ms 10ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar.v-position-top[class*="animate-out"] {
+	-webkit-animation: valo-animate-out-slide-up 200ms;
+	-moz-animation: valo-animate-out-slide-up 200ms;
+	animation: valo-animate-out-slide-up 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar.v-position-bottom {
+	bottom: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar.v-position-bottom[class*="animate-in"] {
+	-webkit-animation: valo-animate-in-slide-up 300ms 10ms backwards;
+	-moz-animation: valo-animate-in-slide-up 300ms 10ms backwards;
+	animation: valo-animate-in-slide-up 300ms 10ms backwards;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.bar.v-position-bottom[class*="animate-out"] {
+	-webkit-animation: valo-animate-out-slide-down 200ms;
+	-moz-animation: valo-animate-out-slide-down 200ms;
+	animation: valo-animate-out-slide-down 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.small {
+	padding: 11px 13px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.small .v-Notification-caption {
+	font-size: 16px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.small .v-Notification-description {
+	font-size: 14px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.closable {
+	padding-right: 59px;
+	overflow: hidden !important;
+	cursor: pointer;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.closable:after {
+	content: "\00d7";
+	font-size: 1.5em;
+	position: absolute;
+	top: 50%;
+	margin-top: -12px;
+	right: 12px;
+	width: 25px;
+	height: 25px;
+	line-height: 24px;
+	cursor: pointer;
+	color: #000;
+	opacity: 0.5;
+	filter: alpha(opacity=50) ;
+	text-align: center;
+	border: 1px solid #000;
+	border-color: rgba(0, 0, 0, 0.3);
+	border-radius: 50%;
+	-webkit-transition: opacity 200ms;
+	-moz-transition: opacity 200ms;
+	transition: opacity 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.closable:hover:after {
+	opacity: 1;
+	filter: none ;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.closable:active:after {
+	background-color: #000;
+	color: #fff;
+	opacity: 0.3;
+	filter: alpha(opacity=30.0) ;
+	-webkit-transition: none 200ms;
+	-moz-transition: none 200ms;
+	transition: none 200ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.closable.dark:after, .org_osbee_vaadin_addons_designer_overlay .v-Notification.closable.error:after, .org_osbee_vaadin_addons_designer_overlay .v-Notification.closable.system:after {
+	color: #fff;
+	border-color: #fff;
+	border-color: rgba(255, 255, 255, 0.3);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.closable.dark:active:after, .org_osbee_vaadin_addons_designer_overlay .v-Notification.closable.error:active:after, .org_osbee_vaadin_addons_designer_overlay .v-Notification.closable.system:active:after {
+	background-color: #fff;
+	color: #000;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.closable.tray:after {
+	top: 16px;
+	margin-top: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.success, .org_osbee_vaadin_addons_designer_overlay .v-Notification.failure {
+	background: #fff;
+	color: #555;
+	border: 2px solid #2c9720;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.success .v-Notification-caption, .org_osbee_vaadin_addons_designer_overlay .v-Notification.failure .v-Notification-caption {
+	color: #2c9720;
+	font-weight: 400;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.success .v-Notification-caption:before, .org_osbee_vaadin_addons_designer_overlay .v-Notification.failure .v-Notification-caption:before {
+	font-family: ThemeIcons;
+	content: "\f00c";
+	margin-right: 0.5em;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.success.bar, .org_osbee_vaadin_addons_designer_overlay .v-Notification.failure.bar {
+	margin: -2px !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.failure {
+	border-color: #ed473b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.failure .v-Notification-caption {
+	color: #ed473b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-Notification.failure .v-Notification-caption:before {
+	content: "\f05e";
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu {
+	height: 100%;
+	background-color: #4b4b4b;
+	background-image: -webkit-linear-gradient(right, #414141 0%, #4b4b4b 9px);
+	background-image: linear-gradient(to left,#414141 0%, #4b4b4b 9px);
+	color: #a5a5a5;
+	font-size: 14px;
+	line-height: 30px;
+	border-right: 1px solid #3b3b3b;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-toggle {
+	display: none;
+	position: fixed;
+	z-index: 200;
+	top: 3px;
+	left: 3px;
+	min-width: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part {
+	border-left: 1px solid #414141;
+	height: 100%;
+	padding-bottom: 37px;
+	overflow: auto;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part:first-child {
+	border-left: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-title, .org_osbee_vaadin_addons_designer_overlay .valo-menu-subtitle, .org_osbee_vaadin_addons_designer_overlay .valo-menu-item {
+	display: block;
+	line-height: inherit;
+	white-space: nowrap;
+	position: relative;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-title .valo-menu-badge, .org_osbee_vaadin_addons_designer_overlay .valo-menu-subtitle .valo-menu-badge, .org_osbee_vaadin_addons_designer_overlay .valo-menu-item .valo-menu-badge {
+	position: absolute;
+	right: 19px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-title {
+	line-height: 1.2;
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	color: white;
+	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+	padding: 12px 19px;
+	font-size: 14px;
+	border-bottom: 1px solid #1362b1;
+	-webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+	text-align: center;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-title .v-menubar.v-menubar {
+	background: transparent;
+	border-color: #1362b1;
+	color: inherit;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	text-shadow: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-title .v-menubar-menuitem {
+	background: transparent;
+	-webkit-box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca;
+	box-shadow: inset 0 1px 0 #4d98e6, inset 0 -1px 0 #166bca;
+	text-shadow: inherit;
+	font-size: 16px;
+	border-color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-title h1, .org_osbee_vaadin_addons_designer_overlay .valo-menu-title .v-label-h1, .org_osbee_vaadin_addons_designer_overlay .valo-menu-title h2, .org_osbee_vaadin_addons_designer_overlay .valo-menu-title .v-label-h2, .org_osbee_vaadin_addons_designer_overlay .valo-menu-title h3, .org_osbee_vaadin_addons_designer_overlay .valo-menu-title .v-label-h3, .org_osbee_vaadin_addons_designer_overlay .valo-menu-title h4, .org_osbee_vaadin_addons_designer_overlay .valo-menu-title .v-label-h4 {
+	margin-top: 0;
+	margin-bottom: 0;
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu {
+	border: none;
+	border-radius: 0;
+	padding: 1px;
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	text-shadow: none;
+	background: transparent;
+	color: inherit;
+	margin: 19px 7px;
+	display: block;
+	overflow: hidden;
+	text-align: center;
+	height: auto;
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu:focus:after {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem {
+	-webkit-box-shadow: none;
+	box-shadow: none;
+	border: none;
+	margin-right: 1px;
+	border-radius: 4px;
+	color: #197de1;
+	padding: 0 12px;
+	-webkit-transition: color 140ms;
+	-moz-transition: color 140ms;
+	transition: color 140ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem:first-child, .org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem:last-child, .org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem:first-child:last-child {
+	border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem:before {
+	content: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem:hover {
+	color: #4396ea;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem:active {
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-checked, .org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-checked:first-child {
+	border: 1px solid #c5c5c5;
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-checked .v-menubar-menuitem-caption, .org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-checked:first-child .v-menubar-menuitem-caption {
+	position: relative;
+	top: -1px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-selected {
+	color: #ecf2f8;
+	text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-selected:hover {
+	color: #ecf2f8;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-disabled, .org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-disabled:hover {
+	color: inherit;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu  > .v-menubar-menuitem {
+	color: inherit;
+	white-space: normal;
+	line-height: 1.4;
+	margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu  > .v-menubar-menuitem img.v-icon {
+	width: 56px;
+	height: 56px;
+	border-radius: 29px;
+	box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+	display: block;
+	margin: 0 auto 0.3em;
+	border: 1px solid #c5c5c5;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu  > .v-menubar-menuitem:after {
+	top: 0;
+	right: 0;
+	bottom: 0;
+	left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .v-menubar-user-menu .v-menubar-menuitem-selected {
+	background: transparent;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-subtitle {
+	color: #868686;
+	margin: 7px 0 7px 19px;
+	border-bottom: 1px solid #666666;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-subtitle [class*="badge"] {
+	color: #73a5d7;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menuitems {
+	display: block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item {
+	outline: none;
+	font-weight: 400;
+	padding: 0 37px 0 19px;
+	cursor: pointer;
+	position: relative;
+	overflow: hidden;
+	text-shadow: 0 2px 0 rgba(0, 0, 0, 0.05);
+	-webkit-transition: background-color 300ms, color 60ms;
+	-moz-transition: background-color 300ms, color 60ms;
+	transition: background-color 300ms, color 60ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item [class*="caption"] {
+	vertical-align: middle;
+	display: inline-block;
+	width: 90%;
+	max-width: 15em;
+	padding-right: 19px;
+	text-overflow: ellipsis;
+	overflow: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item [class*="badge"] {
+	color: #73a5d7;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item.selected {
+	background: #434343;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item.selected .v-icon {
+	color: #197de1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item.selected [class*="badge"] {
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	color: #c8dbed;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item:focus, .org_osbee_vaadin_addons_designer_overlay .valo-menu-item:hover, .org_osbee_vaadin_addons_designer_overlay .valo-menu-item.selected {
+	color: white;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item span.v-icon {
+	min-width: 1em;
+	margin-right: 19px;
+	text-align: center;
+	vertical-align: middle;
+	-webkit-mask-image: -webkit-gradient(linear, left top, left bottom, from(black), to(rgba(0, 0, 0, 0.75)));
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item span.v-icon  + span {
+	margin-left: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-item [class*="badge"] {
+	background-color: #585858;
+	-webkit-transition: background-color 300ms;
+	-moz-transition: background-color 300ms;
+	transition: background-color 300ms;
+	line-height: 1;
+	padding: 4px 6px;
+	min-width: 11px;
+	text-align: center;
+	top: 4px;
+	border-radius: 4px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons {
+	background-color: #4b4b4b;
+	min-width: 74px;
+	max-width: 111px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-title {
+	font-size: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-title .v-label-undef-w {
+	white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .v-menubar-user-menu {
+	margin-left: 0;
+	margin-right: 0;
+	font-size: 11px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .v-menubar-user-menu img.v-icon {
+	width: 28px;
+	height: 28px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons [class*="subtitle"] {
+	margin: 9px 0 0;
+	padding: 7px 25px 7px 9px;
+	line-height: 1;
+	border: none;
+	text-overflow: ellipsis;
+	overflow: hidden;
+	background: #3c3c3c;
+	font-size: 13px;
+	box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons [class*="subtitle"] [class*="badge"] {
+	right: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons [class*="subtitle"]  + .valo-menu-item {
+	border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item {
+	display: block;
+	font-size: 26px;
+	line-height: 1;
+	padding: 12px;
+	text-align: center;
+	border-top: 1px solid #555555;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item:first-child {
+	border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item [class*="caption"] {
+	display: block;
+	width: auto;
+	margin: 0.3em 0 0;
+	padding: 0;
+	font-size: 11px;
+	line-height: 1.3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item .v-icon {
+	margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item span.v-icon {
+	opacity: 0.8;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item.selected {
+	background: #434343;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item.selected .v-icon {
+	opacity: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item.selected [class*="badge"] {
+	border-color: #434343;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-part.large-icons .valo-menu-item [class*="badge"] {
+	padding-left: 4px;
+	padding-right: 4px;
+	top: 7px;
+	right: 7px;
+	border: 2px solid #4b4b4b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-logo {
+	display: block;
+	overflow: hidden;
+	width: 44px !important;
+	height: 44px;
+	border-radius: 4px;
+	text-align: center;
+	background-color: #197de1;
+	background-image: -webkit-linear-gradient(top, #1b87e3 2%, #166ed5 98%);
+	background-image: linear-gradient(to bottom,#1b87e3 2%, #166ed5 98%);
+	color: white;
+	font-size: 25px;
+	line-height: 44px;
+	margin: 19px auto;
+	-webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+	box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-logo:focus {
+	outline: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part {
+	background-color: #4b4b4b;
+	min-width: 74px;
+	max-width: 111px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-title {
+	font-size: 12px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-title .v-label-undef-w {
+	white-space: normal;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .v-menubar-user-menu {
+	margin-left: 0;
+	margin-right: 0;
+	font-size: 11px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .v-menubar-user-menu img.v-icon {
+	width: 28px;
+	height: 28px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part [class*="subtitle"] {
+	margin: 9px 0 0;
+	padding: 7px 25px 7px 9px;
+	line-height: 1;
+	border: none;
+	text-overflow: ellipsis;
+	overflow: hidden;
+	background: #3c3c3c;
+	font-size: 13px;
+	box-shadow: 0 2px 3px rgba(0, 0, 0, 0.05);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part [class*="subtitle"] [class*="badge"] {
+	right: 9px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part [class*="subtitle"]  + .valo-menu-item {
+	border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item {
+	display: block;
+	font-size: 26px;
+	line-height: 1;
+	padding: 12px;
+	text-align: center;
+	border-top: 1px solid #555555;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item:first-child {
+	border-top: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item [class*="caption"] {
+	display: block;
+	width: auto;
+	margin: 0.3em 0 0;
+	padding: 0;
+	font-size: 11px;
+	line-height: 1.3;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item .v-icon {
+	margin: 0;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item span.v-icon {
+	opacity: 0.8;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item.selected {
+	background: #434343;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item.selected .v-icon {
+	opacity: 1;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item.selected [class*="badge"] {
+	border-color: #434343;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="801px-1100px"] .valo-menu-part .valo-menu-item [class*="badge"] {
+	padding-left: 4px;
+	padding-right: 4px;
+	top: 7px;
+	right: 7px;
+	border: 2px solid #4b4b4b;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] {
+	padding-top: 37px;
+	-webkit-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .v-loading-indicator {
+	top: 37px;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"]  > .v-widget {
+	position: relative !important;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu {
+	border-right: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu-part {
+	overflow: visible;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu-toggle {
+	display: inline-block;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu-title {
+	position: fixed;
+	z-index: 100;
+	top: 0;
+	left: 0;
+	right: 0;
+	height: 37px !important;
+	padding-top: 0;
+	padding-bottom: 0;
+	-webkit-backface-visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu .v-menubar-user-menu {
+	position: fixed;
+	z-index: 100;
+	top: 0;
+	right: 0;
+	margin: 0;
+	padding: 0;
+	height: 37px;
+	color: #97bee5;
+	max-width: 30%;
+	-webkit-backface-visibility: hidden;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu .v-menubar-user-menu .v-menubar-menuitem {
+	line-height: 36px;
+	white-space: nowrap;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu .v-menubar-user-menu img.v-icon {
+	display: inline-block;
+	margin: 0 6px 0 0;
+	width: 19px;
+	height: 19px;
+	border-radius: 10px;
+	border: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menuitems {
+	height: 100%;
+	background-color: #4b4b4b;
+	background-image: -webkit-linear-gradient(right, #414141 0%, #4b4b4b 9px);
+	background-image: linear-gradient(to left,#414141 0%, #4b4b4b 9px);
+	color: #a5a5a5;
+	font-size: 14px;
+	line-height: 30px;
+	border-right: 1px solid #3b3b3b;
+	white-space: nowrap;
+	position: fixed;
+	z-index: 9000;
+	top: 37px;
+	bottom: 0;
+	height: auto;
+	max-width: 100%;
+	overflow: auto;
+	padding: 19px 0;
+	-webkit-transform: translatex(-100%);
+	-moz-transform: translatex(-100%);
+	-ms-transform: translatex(-100%);
+	-o-transform: translatex(-100%);
+	transform: translatex(-100%);
+	-webkit-transition: all 300ms;
+	-moz-transition: all 300ms;
+	transition: all 300ms;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-800px"] .valo-menu-visible .valo-menuitems {
+	-webkit-transform: translatex(0%);
+	-moz-transform: translatex(0%);
+	-ms-transform: translatex(0%);
+	-o-transform: translatex(0%);
+	transform: translatex(0%);
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-500px"] .valo-menu-toggle .v-button-caption {
+	display: none;
+}
+
+.org_osbee_vaadin_addons_designer_overlay .valo-menu-responsive[width-range~="0-500px"] .valo-menu .v-menubar-user-menu .v-menubar-menuitem-caption {
+	display: inline-block;
+	width: 19px;
+	overflow: hidden;
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/.project b/org.eclipse.osbp.vaadin.addons.designer.overlay/.project
new file mode 100644
index 0000000..bcf7e85
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/.project
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.vaadin.addons.designer.overlay</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.vaadin.integration.eclipse.widgetsetBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.vaadin.integration.eclipse.addonStylesBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>com.vaadin.integration.eclipse.widgetsetNature</nature>
+		<nature>org.apache.ivyde.eclipse.ivynature</nature>
+		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/LICENSE.txt b/org.eclipse.osbp.vaadin.addons.designer.overlay/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/META-INF/MANIFEST.MF b/org.eclipse.osbp.vaadin.addons.designer.overlay/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..f464b05
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/META-INF/MANIFEST.MF
@@ -0,0 +1,32 @@
+Manifest-Version: 1.0
+Bnd-LastModified: 1491902102912
+Build-Jdk: 1.8.0_91
+Built-By: mollik
+Bundle-ActivationPolicy: lazy
+Bundle-Description: A parent POM aimed to set up the build of general Ma
+ ven based projects.
+Bundle-DocURL: http://www.eclipse.org/osbp
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.vaadin.addons.designer.overlay
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-SymbolicName: org.eclipse.osbp.vaadin.addons.designer.overlay
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Created-By: Apache Maven Bundle Plugin
+Export-Package: org.eclipse.osbp.vaadin.addons.designer.overlay;version=
+ "0.9.0",org.eclipse.osbp.vaadin.addons.designer.overlay.client;version=
+ "0.9.0",org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+ version="0.9.0",org.eclipse.osbp.vaadin.addons.designer.overlay.public.
+ designer_overlay;version="0.9.0"
+Import-Package: javax.servlet.annotation;resolution:=optional;version="[
+ 3.0,4)",com.vaadin.annotations;version="[7.7,8)",com.vaadin.client;vers
+ ion="[7.7,8)",com.vaadin.client.communication;version="[7.7,8)",com.vaa
+ din.server;version="[7.7,8)",com.vaadin.ui;version="[7.7,8)",org.eclips
+ e.osbp.vaadin.addons.designer.overlay.client;version="[0.9,1)",org.ecli
+ pse.osbp.vaadin.addons.designer.overlay.client.widgets;version="[0.9,1)
+ ",org.junit
+Require-Bundle: com.vaadin.server;bundle-version="[7.5.7,7.7.0)",com.vaa
+ din.client;bundle-version="[7.5.7,7.7.0)",com.vaadin.shared;bundle-vers
+ ion="[7.5.7,7.7.0)",org.jsoup;bundle-version="[1.8.3,1.8.4)"
+Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
+Tool: Bnd-3.2.0.201605172007
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/META-INF/git.properties b/org.eclipse.osbp.vaadin.addons.designer.overlay/META-INF/git.properties
new file mode 100644
index 0000000..f8505c5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/META-INF/git.properties
@@ -0,0 +1,14 @@
+#Generated by Git-Commit-Id-Plugin
+#Tue Apr 11 11:17:33 CEST 2017
+git.remote.origin.url=ssh\://compex@10.1.13.14/osbpgit/org.eclipse.osbp.vaadin.addons.git
+git.closest.tag.name=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39
+git.commit.id.describe-short=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39-dirty
+git.commit.time=02.02.2017 @ 18\:04\:55 MEZ
+git.commit.message.full=remove the feature from build
+git.commit.message.short=remove the feature from build
+git.commit.id.abbrev=90dd482
+git.branch=OSBP-initial-commit-2-Eclipse-4-luna
+git.closest.tag.commit.count=0
+git.commit.id.describe=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39-dirty
+git.commit.id=90dd482e5bc78cd1a404d12445cebc868ee417b0
+git.tags=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.designer.overlay.launch b/org.eclipse.osbp.vaadin.addons.designer.overlay/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.designer.overlay.launch
new file mode 100644
index 0000000..c8dc517
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.designer.overlay.launch
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;org.eclipse.osbp.vaadin.addons.designer.overlay&quot;/&gt;&#10;&lt;/runtimeClasspathEntry&gt;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.eclipse.osbp.vaadin.addons.designer.overlay/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.eclipse.osbp.vaadin.addons.designer.overlay/sample&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.eclipse.osbp.vaadin.addons.designer.overlay/test&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.codeserver.CodeServer"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value=" org.eclipse.osbp.vaadin.addons.designer.overlay.OverlayWidgetset"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.osbp.vaadin.addons.designer.overlay"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xss8M -Xmx512M -XX:MaxPermSize=512M"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="/Users/florianpirchner/Work/dev/osbp_client/git/org.eclipse.osbp.vaadin.addons/org.eclipse.osbp.vaadin.addons.designer.overlay"/>
+</launchConfiguration>
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/epl-v10.html b/org.eclipse.osbp.vaadin.addons.designer.overlay/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/ivy.xml b/org.eclipse.osbp.vaadin.addons.designer.overlay/ivy.xml
new file mode 100644
index 0000000..7d808a5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/ivy.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<!DOCTYPE ivy-module [
+	<!ENTITY vaadin.version "7.5.7">
+]>
+<ivy-module version="2.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
+	<info organisation="com.example" module="v7proj" />
+	<configurations>
+		<!-- The default configuration, which should be deployed to the server -->
+		<conf name="default" />
+		<!-- A configuration only needed when compiling the widget set. Should 
+			not be deployed to the server -->
+		<conf name="widgetset-compile" />
+		<!-- A configuration used in compilation of server side classes only.
+			Should be deployed to the server -->
+		<conf name="nodeploy" />
+	</configurations>
+	<dependencies defaultconf="default" defaultconfmapping="default->default">
+		<!-- The core server part of Vaadin -->
+		<dependency org="com.vaadin" name="vaadin-server" rev="&vaadin.version;" />
+
+		<!-- Vaadin themes -->
+		<dependency org="com.vaadin" name="vaadin-themes" rev="&vaadin.version;" />
+
+		<!-- Push support -->
+		<dependency org="com.vaadin" name="vaadin-push" rev="&vaadin.version;" />
+
+		<!-- Servlet 3.0 API -->
+		<dependency org="javax.servlet" name="javax.servlet-api" rev="3.0.1" conf="nodeploy->default" />
+
+		<!-- TestBench 4 -->
+		<dependency org="com.vaadin" name="vaadin-testbench-api" rev="latest.release" conf="nodeploy -> default" />
+
+		<!-- Precompiled DefaultWidgetSet -->
+		<dependency org="com.vaadin" name="vaadin-client-compiled"
+			rev="&vaadin.version;" />
+
+		<!-- Vaadin client side, needed for widget set compilation -->
+		<dependency org="com.vaadin" name="vaadin-client" rev="&vaadin.version;"
+			 conf="widgetset-compile->default" />
+
+		<!-- Compiler for custom widget sets. Should not be deployed -->
+		<dependency org="com.vaadin" name="vaadin-client-compiler"
+			rev="&vaadin.version;" conf="widgetset-compile->default" />
+	</dependencies>
+</ivy-module>
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/ivysettings.xml b/org.eclipse.osbp.vaadin.addons.designer.overlay/ivysettings.xml
new file mode 100644
index 0000000..9c0f653
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/ivysettings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ivysettings>
+	<settings defaultResolver="default" />
+	<resolvers>
+		<chain name="default">
+			<!-- Public Maven repository -->
+			<ibiblio name="public" m2compatible="true" />
+
+			<!-- Vaadin Add-on repository -->
+			<ibiblio name="vaadin-addons" usepoms="true" m2compatible="true"
+				root="http://maven.vaadin.com/vaadin-addons" />
+
+			<!-- Vaadin snapshots repository -->
+			<ibiblio name="vaadin-snapshots" usepoms="true" m2compatible="true"
+				root="https://oss.sonatype.org/content/repositories/vaadin-snapshots" />
+			<!-- Repository used for Vaadin modified smartsprites library -->
+			<dual name="custom-smartsprites">
+				<filesystem name="smartsprites-ivy">
+					<ivy pattern="${basedir}/ivymodule/[module]-ivy-[revision].xml" />
+				</filesystem>
+				<url name="smartsprites-artifact">
+					<artifact
+						pattern="http://dev.vaadin.com/svn/versions/6.8/build/smartsprites/lib/[artifact](-[revision]).[ext]" />
+				</url>
+			</dual>
+		</chain>
+	</resolvers>
+	<modules>
+		<!-- Vaadin patched SmartSprites -->
+		<module organisation="com.carrotsearch" name="smartsprites"
+			revision="0.2.3-itmill" resolver="custom-smartsprites" />
+	</modules>
+
+
+</ivysettings>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/license.html b/org.eclipse.osbp.vaadin.addons.designer.overlay/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/license.html
@@ -0,0 +1,164 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the 
+Eclipse Public License Version 1.0
+   ("EPL").  A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, 
+documentation and other files maintained in the Eclipse Foundation 
+source code
+   repository ("Repository") in software modules ("Modules") and made 
+available as downloadable archives ("Downloads").</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to 
+facilitate delivering, extending, and upgrading the Content.  Typical 
+modules may include plug-ins ("Plug-ins"), plug-in fragments 
+("Fragments"), and features ("Features").</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&#8482; ARchive) in a directory named "plugins".</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or 
+Fragments and associated material.  Each Feature may be packaged as a 
+sub-directory in a directory named "features".  Within a Feature, files 
+named "feature.xml" may contain a list of the names and version numbers 
+of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features ("Included 
+Features"). Within a Feature, files named "feature.xml" may contain a 
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be 
+contained in files named "about.html" ("Abouts"). The terms and 
+conditions governing Features and
+Included Features should be contained in files named "license.html" 
+("Feature Licenses").  Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is 
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process.  If the Feature contains Included Features, the 
+Feature Update License should either provide you with the terms and 
+conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be 
+found in the "license" property of files named "feature.properties" 
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the 
+terms and conditions (or references to such terms and conditions) that 
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER 
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND 
+CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, 
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions 
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, 
+examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager ("Provisioning Technology") for the purpose of 
+allowing users to install software, documentation, information and/or
+   other materials (collectively "Installable Software"). This 
+capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about 
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning 
+Technology
+   in accordance with the Specification. By using Provisioning 
+Technology in such a manner and making it available in accordance with 
+the
+   Specification, you further acknowledge your agreement to, and the 
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur ("Provisioning Process") in 
+which a user may execute the Provisioning Technology
+       on a machine ("Target Machine") with the intent of installing, 
+extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology 
+may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user 
+the terms and conditions that govern the use of the Installable
+       Software ("Installable Software Agreement") and such Installable 
+Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable 
+Software Agreement must inform the user of the terms and conditions that
+ govern
+       the Installable Software and must solicit acceptance by the end 
+user in the manner prescribed in such Installable Software Agreement. 
+Upon such
+       indication of agreement by the user, the provisioning Technology 
+will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use, 
+and/or re-export to
+   another country, of encryption software. BEFORE using any encryption 
+software, please check the country's laws, regulations and policies 
+concerning the import,
+   possession, or use, and re-export of encryption software, to see if 
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/pom.xml b/org.eclipse.osbp.vaadin.addons.designer.overlay/pom.xml
new file mode 100644
index 0000000..cb11805
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/pom.xml
@@ -0,0 +1,184 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.eclipse.osbp.releng.maven</groupId>
+		<artifactId>org.eclipse.osbp.releng.maven.parent.mbp</artifactId>
+		<version>0.9.0-SNAPSHOT</version>
+		<relativePath />
+	</parent>
+
+	<groupId>org.eclipse.osbp.vaadin.addons</groupId>
+	<artifactId>org.eclipse.osbp.vaadin.addons.designer.overlay</artifactId>
+	<packaging>bundle</packaging>
+
+	<dependencies>
+		<dependency>
+			<groupId>com.vaadin</groupId>
+			<artifactId>vaadin-server</artifactId>
+			<version>${vaadin.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.vaadin</groupId>
+			<artifactId>vaadin-client</artifactId>
+			<version>${vaadin.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>javax.servlet-api</artifactId>
+			<version>3.0.1</version>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<sourceDirectory>${basedir}/src</sourceDirectory>
+
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-resources-plugin</artifactId>
+				<configuration>
+					<encoding>UTF-8</encoding>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.0</version>
+				<configuration>
+					<encoding>UTF-8</encoding>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+
+			<!--<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> 
+				<version>2.3.1</version> <configuration> <archive> <index>true</index> <manifestEntries> 
+				<Bundle-SymbolicName>org.eclipse.osbp.vaadin.addons.absolutelayout</Bundle-SymbolicName> 
+				<Vaadin-Stylesheets>/VAADIN/addons/osbee/vaadin/addons/absolutelayout/styles.scss</Vaadin-Stylesheets> 
+				</manifestEntries> </archive> </configuration> </plugin> -->
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<extensions>true</extensions>
+				<configuration>
+					<instructions>
+						<Bundle-Name>OSBP Addon for Vaadin: Designer Overlay</Bundle-Name>
+						<Bundle-SymbolicName>org.eclipse.osbp.vaadin.addons.designer.overlay</Bundle-SymbolicName>
+                        <Bundle-Version>0.9.0.{osgi-version-qualifier}</Bundle-Version>
+						<Require-Bundle>com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
+							com.vaadin.client;bundle-version="[7.5.7,7.7.0)",
+							com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
+							org.jsoup;bundle-version="[1.8.3,1.8.4)"
+						</Require-Bundle>
+						<Import-Package>
+                            javax.servlet.annotation;resolution:=optional,
+							*
+						</Import-Package>
+						<Export-Package>
+							!LICENSE,!LICENSE.txt,!THIRD-PARTY.txt,!NOTICE,!README.txt,!VERSION.txt,!build.properties,
+							!VAADIN.*,
+							org.eclipse.osbp.vaadin.addons.*;version="0.9.0"
+						</Export-Package>
+						<Include-Resource>{maven-resources},LICENSE.txt,epl-v10.html</Include-Resource>
+						<_nouses>true</_nouses>
+					</instructions>
+				</configuration>
+			</plugin>
+			<!-- <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-javadoc-plugin</artifactId> 
+				<version>2.9</version> <executions> <execution> <id>attach-javadoc</id> <goals> 
+				<goal>jar</goal> </goals> </execution> </executions> </plugin> -->
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-source-plugin</artifactId>
+				<version>2.2.1</version>
+				<executions>
+					<execution>
+						<id>attach-sources</id>
+						<goals>
+							<goal>jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+		<pluginManagement>
+			<plugins>
+
+				<!--This plugin's configuration is used to store Eclipse m2e settings 
+					only. It has no influence on the Maven build itself. -->
+				<plugin>
+					<groupId>org.eclipse.m2e</groupId>
+					<artifactId>lifecycle-mapping</artifactId>
+					<version>1.0.0</version>
+					<configuration>
+						<lifecycleMappingMetadata>
+							<pluginExecutions>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>
+											org.apache.maven.plugins
+										</groupId>
+										<artifactId>
+											maven-dependency-plugin
+										</artifactId>
+										<versionRange>
+											[2.0.0,)
+										</versionRange>
+										<goals>
+											<goal>
+												copy-dependencies
+											</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore></ignore>
+									</action>
+								</pluginExecution>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>com.vaadin</groupId>
+										<artifactId>
+											vaadin-maven-plugin
+										</artifactId>
+										<versionRange>
+											[7.0-SNAPSHOT,)
+										</versionRange>
+										<goals>
+											<goal>compile</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore></ignore>
+									</action>
+								</pluginExecution>
+							</pluginExecutions>
+						</lifecycleMappingMetadata>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+		<!-- This is needed for the sources required by the client-side compiler 
+			to be included in the produced JARs -->
+		<resources>
+			<resource>
+				<directory>src</directory>
+			</resource>
+		</resources>
+
+	</build>
+
+</project>
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/sample/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayApplication.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/sample/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayApplication.java
new file mode 100644
index 0000000..422fb70
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/sample/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayApplication.java
@@ -0,0 +1,485 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay;
+
+import javax.servlet.annotation.WebServlet;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.AddChildEvent;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.RemoveChildEvent;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.ShowPropertiesEvent;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.ShowPropertiesListener;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.SwitchEditableEvent;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.AlignmentInfo;
+
+import com.vaadin.annotations.Theme;
+import com.vaadin.annotations.VaadinServletConfiguration;
+import com.vaadin.server.ThemeResource;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.server.VaadinServlet;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Notification;
+import com.vaadin.ui.TabSheet;
+import com.vaadin.ui.TextField;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("serial")
+@Theme("valo")
+public class OverlayApplication extends UI {
+
+	@WebServlet(value = "/*", asyncSupported = true)
+	@VaadinServletConfiguration(productionMode = false, ui = OverlayApplication.class, widgetset = "org.eclipse.osbp.vaadin.addons.designer.overlay.OverlayWidgetset")
+	public static class Servlet extends VaadinServlet {
+	}
+
+	@Override
+	protected void init(VaadinRequest request) {
+
+		TabSheet tabSheet = new TabSheet();
+		tabSheet.setSizeFull();
+		setContent(tabSheet);
+
+		addGridlayout(tabSheet);
+		addHorizontallayout(tabSheet);
+		addVerticallayout(tabSheet);
+		addLayoutInlayout(tabSheet);
+	}
+
+	/**
+	 * Add gridlayout to the tabsheet.
+	 * 
+	 * @param tabSheet
+	 */
+	private void addGridlayout(TabSheet tabSheet) {
+		final GridLayout gridLayout = new GridLayout(3, 3);
+		gridLayout.setSizeFull();
+		gridLayout.setMargin(true);
+		tabSheet.addTab(gridLayout, "GridLayout");
+
+		DesignerOverlayExtension layoutExt = DesignerOverlayExtension.create(gridLayout);
+		layoutExt.setSupportsAlignments(false);
+		layoutExt.setSupportsMargins(true);
+		layoutExt.setSupportsSpacing(true);
+		layoutExt.setSupportsPropertiesDialog(true);
+		layoutExt.setSupportsRemove(false);
+		layoutExt.setSupportsAdd(true);
+		layoutExt.setIcon(new ThemeResource("sample/sample.gif"));
+		layoutExt.addSwitchEditableListener(new DesignerOverlayExtension.SwitchEditableListener() {
+			@Override
+			public void switchEditable(DesignerOverlayExtension.SwitchEditableEvent event) {
+				gridLayout.setEnabled(!gridLayout.isReadOnly());
+			}
+		});
+
+		layoutExt.addSwitchMarginListener(new DesignerOverlayExtension.SwitchMarginListener() {
+			@Override
+			public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
+				gridLayout.setMargin(gridLayout.getMargin().getBitMask() == 0);
+			}
+		});
+
+		layoutExt.addSwitchSpacingListener(new DesignerOverlayExtension.SwitchSpacingListener() {
+			@Override
+			public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
+				gridLayout.setSpacing(!gridLayout.isSpacing());
+			}
+		});
+
+		layoutExt.addShowPropertiesListener(new ShowPropertiesListener() {
+			@Override
+			public void showProperties(ShowPropertiesEvent event) {
+				Notification.show("Requested properties dialog");
+			}
+		});
+		
+		layoutExt.addAddChildListener(new DesignerOverlayExtension.AddChildListener() {
+			@Override
+			public void addChild(DesignerOverlayExtension.AddChildEvent event) {
+				gridLayout.addComponent(new TextField("added"));
+			}
+		});
+		
+		addToGrid(gridLayout, 0, 0);
+		addToGrid(gridLayout, 0, 1);
+		addToGrid(gridLayout, 0, 2);
+		addToGrid(gridLayout, 1, 0);
+		addToGrid(gridLayout, 1, 1);
+		addToGrid(gridLayout, 1, 2);
+		addToGrid(gridLayout, 2, 0);
+		addToGrid(gridLayout, 2, 1);
+		addToGrid(gridLayout, 2, 2);
+	}
+
+	private void addToGrid(final GridLayout gridLayout, int col, int row) {
+		final Component text = new TextField("Text " + col + "/" + row);
+		text.setId("Text " + col + "/" + row);
+		gridLayout.addComponent(text, col, row);
+
+		DesignerOverlayExtension extension = DesignerOverlayExtension.create(text);
+		extension.setSupportsAlignments(true);
+		extension.setSupportsMargins(false);
+		extension.setSupportsSpacing(false);
+		extension.setSupportsPropertiesDialog(true);
+		extension.setSupportsRemove(true);
+		extension.setSupportsEditable(true);
+
+		extension.addAlignmentChangedListener(new DesignerOverlayExtension.AlignmentChangedListener() {
+			@Override
+			public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
+				AlignmentInfoUtil.apply(gridLayout, text, event.getAlignment());
+			}
+		});
+
+		extension.addRemoveChildListener(new DesignerOverlayExtension.RemoveChildListener() {
+			@Override
+			public void removeChild(RemoveChildEvent event) {
+				gridLayout.removeComponent(event.getComponent());
+			}
+		});
+
+		extension.addSwitchEditableListener(new DesignerOverlayExtension.SwitchEditableListener() {
+			@Override
+			public void switchEditable(SwitchEditableEvent event) {
+				text.setReadOnly(!text.isReadOnly());
+			}
+		});
+
+		extension.addShowPropertiesListener(new ShowPropertiesListener() {
+			@Override
+			public void showProperties(ShowPropertiesEvent event) {
+				Notification.show("Requested properties dialog");
+			}
+		});
+
+		extension.getState().alignment = AlignmentInfo.MIDDLE_CENTER;
+		AlignmentInfoUtil.apply(gridLayout, text, AlignmentInfo.MIDDLE_CENTER);
+	}
+
+	/**
+	 * Add verticallayout to the tabsheet.
+	 * 
+	 * @param tabSheet
+	 */
+	private void addVerticallayout(TabSheet tabSheet) {
+		final VerticalLayout verticalLayout = new VerticalLayout();
+		verticalLayout.setSizeFull();
+		verticalLayout.setMargin(true);
+		tabSheet.addTab(verticalLayout, "VerticalLayout");
+
+		DesignerOverlayExtension layoutExt = DesignerOverlayExtension.create(verticalLayout);
+		layoutExt.setSupportsAlignments(false);
+		layoutExt.setSupportsMargins(true);
+		layoutExt.setSupportsSpacing(true);
+		layoutExt.setSupportsPropertiesDialog(true);
+		layoutExt.setSupportsRemove(false);
+		layoutExt.setSupportsAdd(true);
+		layoutExt.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
+			@Override
+			public void switchEditable(DesignerOverlayExtension.SwitchEditableEvent event) {
+				verticalLayout.setReadOnly(!verticalLayout.isReadOnly());
+			}
+
+			@Override
+			public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
+				verticalLayout.setMargin(verticalLayout.getMargin().getBitMask() == 0);
+			}
+
+			@Override
+			public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
+				verticalLayout.setSpacing(!verticalLayout.isSpacing());
+			}
+
+			@Override
+			public void showProperties(ShowPropertiesEvent event) {
+				Notification.show("Requested properties dialog");
+			}
+			
+			@Override
+			public void addChild(AddChildEvent event) {
+				addToVerticalLayout(verticalLayout, 10);
+			}
+		});
+
+		addToVerticalLayout(verticalLayout, 0);
+		addToVerticalLayout(verticalLayout, 1);
+		addToVerticalLayout(verticalLayout, 2);
+		addToVerticalLayout(verticalLayout, 3);
+		addToVerticalLayout(verticalLayout, 4);
+		addToVerticalLayout(verticalLayout, 5);
+	}
+
+	private void addToVerticalLayout(final VerticalLayout verticalLayout, int index) {
+		final TextField text = new TextField("Mouse over " + index);
+		text.setId("Mouse over " + index);
+		verticalLayout.addComponent(text);
+
+		DesignerOverlayExtension extension = DesignerOverlayExtension.create(text);
+		extension.setSupportsAlignments(true);
+		extension.setSupportsMargins(false);
+		extension.setSupportsSpacing(false);
+		extension.setSupportsPropertiesDialog(true);
+		extension.setSupportsRemove(true);
+		extension.setSupportsEditable(true);
+
+		extension.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
+			@Override
+			public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
+				AlignmentInfoUtil.apply(verticalLayout, text, event.getAlignment());
+			}
+
+			@Override
+			public void removeChild(RemoveChildEvent event) {
+				verticalLayout.removeComponent(event.getComponent());
+			}
+
+			@Override
+			public void switchEditable(SwitchEditableEvent event) {
+				text.setReadOnly(!text.isReadOnly());
+			}
+
+			@Override
+			public void showProperties(ShowPropertiesEvent event) {
+				Notification.show("Requested properties dialog");
+			}
+		});
+
+		extension.getState().alignment = AlignmentInfo.TOP_CENTER;
+		AlignmentInfoUtil.apply(verticalLayout, text, AlignmentInfo.TOP_CENTER);
+	}
+
+	/**
+	 * Add horizontallayout to the tabsheet.
+	 * 
+	 * @param tabSheet
+	 */
+	private void addHorizontallayout(TabSheet tabSheet) {
+		final HorizontalLayout horizontalLayout = new HorizontalLayout();
+		horizontalLayout.setSizeFull();
+		horizontalLayout.setMargin(true);
+		tabSheet.addTab(horizontalLayout, "HorizontalLayout");
+
+		DesignerOverlayExtension layoutExt = DesignerOverlayExtension.create(horizontalLayout);
+		layoutExt.setSupportsAlignments(false);
+		layoutExt.setSupportsMargins(true);
+		layoutExt.setSupportsSpacing(true);
+		layoutExt.setSupportsPropertiesDialog(true);
+		layoutExt.setSupportsRemove(false);
+		layoutExt.setSupportsAdd(true);
+		layoutExt.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
+			@Override
+			public void switchEditable(DesignerOverlayExtension.SwitchEditableEvent event) {
+				horizontalLayout.setReadOnly(!horizontalLayout.isReadOnly());
+			}
+
+			public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
+				horizontalLayout.setMargin(horizontalLayout.getMargin().getBitMask() == 0);
+			}
+
+			public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
+				horizontalLayout.setSpacing(!horizontalLayout.isSpacing());
+			}
+
+			@Override
+			public void showProperties(ShowPropertiesEvent event) {
+				Notification.show("Requested properties dialog");
+			}
+
+			@Override
+			public void addChild(AddChildEvent event) {
+				addToHorizontalLayout(horizontalLayout, 10);
+			}
+		});
+
+		addToHorizontalLayout(horizontalLayout, 0);
+		addToHorizontalLayout(horizontalLayout, 1);
+		addToHorizontalLayout(horizontalLayout, 2);
+		addToHorizontalLayout(horizontalLayout, 3);
+	}
+
+	private void addToHorizontalLayout(final HorizontalLayout horizontalLayout, int index) {
+		final TextField text = new TextField("Mouse over " + index);
+		text.setId("Mouse over " + index);
+		horizontalLayout.addComponent(text);
+
+		DesignerOverlayExtension extension = DesignerOverlayExtension.create(text);
+		extension.setSupportsAlignments(true);
+		extension.setSupportsMargins(false);
+		extension.setSupportsSpacing(false);
+		extension.setSupportsPropertiesDialog(true);
+		extension.setSupportsRemove(true);
+		extension.setSupportsEditable(true);
+
+		extension.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
+			@Override
+			public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
+				AlignmentInfoUtil.apply(horizontalLayout, text, event.getAlignment());
+			}
+
+			@Override
+			public void removeChild(RemoveChildEvent event) {
+				horizontalLayout.removeComponent(event.getComponent());
+			}
+
+			@Override
+			public void switchEditable(SwitchEditableEvent event) {
+				text.setReadOnly(!text.isReadOnly());
+			}
+
+			@Override
+			public void showProperties(ShowPropertiesEvent event) {
+				Notification.show("Requested properties dialog");
+			}
+		});
+
+		extension.getState().alignment = AlignmentInfo.TOP_CENTER;
+		AlignmentInfoUtil.apply(horizontalLayout, text, AlignmentInfo.TOP_CENTER);
+	}
+
+	/**
+	 * Add texts in horizontal layouts in verticallayout to the tabsheet.
+	 * 
+	 * @param tabSheet
+	 */
+	private void addLayoutInlayout(TabSheet tabSheet) {
+		final VerticalLayout verticalLayout = new VerticalLayout();
+		verticalLayout.setSizeFull();
+		verticalLayout.setMargin(true);
+		tabSheet.addTab(verticalLayout, "Layout in Layout");
+
+		DesignerOverlayExtension layoutExt = DesignerOverlayExtension.create(verticalLayout);
+		layoutExt.setSupportsAlignments(false);
+		layoutExt.setSupportsMargins(true);
+		layoutExt.setSupportsSpacing(true);
+		layoutExt.setSupportsPropertiesDialog(true);
+		layoutExt.setSupportsRemove(false);
+
+		layoutExt.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
+
+			@Override
+			public void switchEditable(DesignerOverlayExtension.SwitchEditableEvent event) {
+				verticalLayout.setReadOnly(!verticalLayout.isReadOnly());
+			}
+
+			@Override
+			public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
+				verticalLayout.setMargin(verticalLayout.getMargin().getBitMask() == 0);
+			}
+
+			@Override
+			public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
+				verticalLayout.setSpacing(!verticalLayout.isSpacing());
+			}
+
+			@Override
+			public void showProperties(ShowPropertiesEvent event) {
+				Notification.show("Requested properties dialog");
+			}
+		});
+
+		addToLayoutInLayout(verticalLayout, 0);
+		addToLayoutInLayout(verticalLayout, 1);
+		addToLayoutInLayout(verticalLayout, 2);
+		addToLayoutInLayout(verticalLayout, 3);
+		addToLayoutInLayout(verticalLayout, 4);
+		addToLayoutInLayout(verticalLayout, 5);
+	}
+
+	private void addToLayoutInLayout(final VerticalLayout verticalLayout, int index) {
+		final HorizontalLayout hl = new HorizontalLayout();
+		verticalLayout.addComponent(hl);
+
+		DesignerOverlayExtension extension = DesignerOverlayExtension.create(hl);
+		extension.setSupportsAlignments(true);
+		extension.setSupportsMargins(true);
+		extension.setSupportsSpacing(true);
+		extension.setSupportsPropertiesDialog(true);
+		extension.setSupportsRemove(true);
+
+		extension.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
+			@Override
+			public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
+				AlignmentInfoUtil.apply(verticalLayout, hl, event.getAlignment());
+			}
+
+			@Override
+			public void removeChild(RemoveChildEvent event) {
+				verticalLayout.removeComponent(event.getComponent());
+			}
+			
+			@Override
+			public void switchMargin(DesignerOverlayExtension.SwitchMarginEvent event) {
+				hl.setMargin(hl.getMargin().getBitMask() == 0);
+			}
+
+			@Override
+			public void switchSpacing(DesignerOverlayExtension.SwitchSpacingEvent event) {
+				hl.setSpacing(!hl.isSpacing());
+			}
+
+			@Override
+			public void switchEditable(SwitchEditableEvent event) {
+				hl.setReadOnly(!hl.isReadOnly());
+			}
+
+			@Override
+			public void showProperties(ShowPropertiesEvent event) {
+				Notification.show("Requested properties dialog");
+			}
+		});
+
+		extension.getState().alignment = AlignmentInfo.TOP_CENTER;
+		AlignmentInfoUtil.apply(verticalLayout, hl, AlignmentInfo.TOP_CENTER);
+
+		addToHorizontalLayoutNoAlignment(hl, 0);
+		addToHorizontalLayoutNoAlignment(hl, 1);
+		addToHorizontalLayoutNoAlignment(hl, 2);
+		addToHorizontalLayoutNoAlignment(hl, 3);
+		addToHorizontalLayoutNoAlignment(hl, 4);
+		addToHorizontalLayoutNoAlignment(hl, 5);
+	}
+
+	private void addToHorizontalLayoutNoAlignment(final HorizontalLayout horizontalLayout, int index) {
+		final TextField text = new TextField("Mouse over " + index);
+		text.setId("Mouse over " + index);
+		text.setSizeFull();
+		horizontalLayout.addComponent(text);
+
+		DesignerOverlayExtension extension = DesignerOverlayExtension.create(text);
+		extension.setSupportsAlignments(false);
+		extension.addAllEventHanndler(new DesignerOverlayExtension.AllEventHanndler() {
+			@Override
+			public void alignmentChanged(DesignerOverlayExtension.AlignmentChangedEvent event) {
+				AlignmentInfoUtil.apply(horizontalLayout, text, event.getAlignment());
+			}
+
+			@Override
+			public void removeChild(RemoveChildEvent event) {
+				horizontalLayout.removeComponent(event.getComponent());
+			}
+
+			@Override
+			public void switchEditable(SwitchEditableEvent event) {
+				text.setReadOnly(!text.isReadOnly());
+			}
+
+			@Override
+			public void showProperties(ShowPropertiesEvent event) {
+				Notification.show("Requested properties dialog");
+			}
+		});
+
+		AlignmentInfoUtil.apply(horizontalLayout, text, AlignmentInfo.FILL_FILL);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/AlignmentInfoUtil.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/AlignmentInfoUtil.java
new file mode 100644
index 0000000..b33da83
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/AlignmentInfoUtil.java
@@ -0,0 +1,175 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.AlignmentInfo;
+
+import com.vaadin.ui.Alignment;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.VerticalLayout;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Util to deal with {@link AlignmentInfo}.
+ */
+public class AlignmentInfoUtil {
+
+	/**
+	 * Returns the horizontal width for the given alignment.
+	 *
+	 * @param alignment the alignment
+	 * @return the horizonal width
+	 */
+	public static String getHorizonalWidth(AlignmentInfo alignment) {
+		if (alignment.isHorizontalFill()) {
+			return "100%";
+		} else {
+			return "-1px";
+		}
+	}
+
+	/**
+	 * Returns the vertical height for the given alignment.
+	 *
+	 * @param alignment the alignment
+	 * @return the vertical height
+	 */
+	public static String getVerticalHeight(AlignmentInfo alignment) {
+		if (alignment.isVerticalFill()) {
+			return "100%";
+		} else {
+			return "-1px";
+		}
+	}
+
+	/**
+	 * Converts alignment info to vaadin alignment.
+	 *
+	 * @param alignment the alignment
+	 * @return the alignment
+	 */
+	public static Alignment toVaadin(AlignmentInfo alignment) {
+		switch (alignment) {
+		case BOTTOM_CENTER:
+			return Alignment.BOTTOM_CENTER;
+		case BOTTOM_LEFT:
+			return Alignment.BOTTOM_LEFT;
+		case BOTTOM_RIGHT:
+			return Alignment.BOTTOM_RIGHT;
+		case MIDDLE_CENTER:
+			return Alignment.MIDDLE_CENTER;
+		case MIDDLE_LEFT:
+			return Alignment.MIDDLE_LEFT;
+		case MIDDLE_RIGHT:
+			return Alignment.MIDDLE_RIGHT;
+		case TOP_LEFT:
+			return Alignment.TOP_LEFT;
+		case TOP_RIGHT:
+			return Alignment.TOP_RIGHT;
+		case TOP_CENTER:
+			return Alignment.TOP_CENTER;
+		// fill here
+		case BOTTOM_FILL:
+			// fill the bottom line -> position at origin
+			return Alignment.BOTTOM_LEFT;
+		case MIDDLE_FILL:
+			// fill the middle line -> position at origin
+			return Alignment.MIDDLE_LEFT;
+		case TOP_FILL:
+			// fill the top line -> position at origin
+			return Alignment.TOP_LEFT;
+		case FILL_CENTER:
+			// fill the center row -> position at origin
+			return Alignment.TOP_CENTER;
+		case FILL_FILL:
+			// fill the all -> position at origin
+			return Alignment.TOP_LEFT;
+		case FILL_LEFT:
+			// fill the left row -> position at origin
+			return Alignment.TOP_LEFT;
+		case FILL_RIGHT:
+			// fill the right row -> position at origin
+			return Alignment.TOP_RIGHT;
+		}
+
+		return Alignment.TOP_LEFT;
+	}
+
+	/**
+	 * Applies the alignment to the given layout and child.
+	 *
+	 * @param layout the layout
+	 * @param child the child
+	 * @param alignment the alignment
+	 */
+	public static void apply(GridLayout layout, Component child, AlignmentInfo alignment) {
+		layout.setComponentAlignment(child, AlignmentInfoUtil.toVaadin(alignment));
+
+		child.setWidth(AlignmentInfoUtil.getHorizonalWidth(alignment));
+		child.setHeight(AlignmentInfoUtil.getVerticalHeight(alignment));
+
+		if (alignment.isHorizontalFill()) {
+			layout.setColumnExpandRatio(layout.getComponentArea(child).getColumn1(), 1.0f);
+		} else {
+			layout.setColumnExpandRatio(layout.getComponentArea(child).getColumn1(), 0f);
+		}
+
+		if (alignment.isVerticalFill()) {
+			layout.setRowExpandRatio(layout.getComponentArea(child).getRow1(), 1.0f);
+		} else {
+			layout.setRowExpandRatio(layout.getComponentArea(child).getRow1(), 0f);
+		}
+	}
+
+	/**
+	 * Applies the alignment to the given layout and child.
+	 *
+	 * @param layout the layout
+	 * @param child the child
+	 * @param alignment the alignment
+	 */
+	public static void apply(VerticalLayout layout, Component child, AlignmentInfo alignment) {
+		layout.setComponentAlignment(child, AlignmentInfoUtil.toVaadin(alignment));
+
+		child.setWidth(AlignmentInfoUtil.getHorizonalWidth(alignment));
+		child.setHeight(AlignmentInfoUtil.getVerticalHeight(alignment));
+
+		if (alignment.isVerticalFill()) {
+			layout.setExpandRatio(child, 1.0f);
+		} else {
+			layout.setExpandRatio(child, 0f);
+		}
+	}
+
+	/**
+	 * Applies the alignment to the given layout and child.
+	 *
+	 * @param layout the layout
+	 * @param child the child
+	 * @param alignment the alignment
+	 */
+	public static void apply(HorizontalLayout layout, Component child, AlignmentInfo alignment) {
+		layout.setComponentAlignment(child, AlignmentInfoUtil.toVaadin(alignment));
+
+		child.setWidth(AlignmentInfoUtil.getHorizonalWidth(alignment));
+		child.setHeight(AlignmentInfoUtil.getVerticalHeight(alignment));
+
+		if (alignment.isHorizontalFill()) {
+			layout.setExpandRatio(child, 1.0f);
+		} else {
+			layout.setExpandRatio(child, 0f);
+		}
+	}
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/DesignerOverlayExtension.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/DesignerOverlayExtension.java
new file mode 100644
index 0000000..4bf2d40
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/DesignerOverlayExtension.java
@@ -0,0 +1,997 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.DesignerExtensionServerRpc;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.DesignerExtensionState;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.AlignmentInfo;
+
+import com.vaadin.server.AbstractClientConnector;
+import com.vaadin.server.AbstractExtension;
+import com.vaadin.server.Resource;
+import com.vaadin.shared.ComponentConstants;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.Component.Event;
+import com.vaadin.util.ReflectTools;
+
+// TODO: Auto-generated Javadoc
+/**
+ * This extension adds an overlay to children of layouts. Listeners are being
+ * notified if events.
+ */
+@SuppressWarnings("serial")
+public class DesignerOverlayExtension extends AbstractExtension {
+
+	/** The owner. */
+	private Component owner;
+
+	/** The rpc. */
+	private DesignerExtensionServerRpc rpc = new DesignerExtensionServerRpc() {
+		@Override
+		public void alignmentChanged(AlignmentInfo alignment) {
+			fireEvent(new AlignmentChangedEvent(owner, alignment));
+		}
+
+		@Override
+		public void removeChild() {
+			fireEvent(new RemoveChildEvent(owner));
+		}
+
+		@Override
+		public void openProperties() {
+			fireEvent(new ShowPropertiesEvent(owner));
+		}
+
+		@Override
+		public void switchEditable() {
+			fireEvent(new SwitchEditableEvent(owner));
+		}
+
+		@Override
+		public void switchMargin() {
+			fireEvent(new SwitchMarginEvent(owner));
+		}
+
+		@Override
+		public void switchSpacing() {
+			fireEvent(new SwitchSpacingEvent(owner));
+		}
+
+		@Override
+		public void addChild() {
+			fireEvent(new AddChildEvent(owner));
+		}
+	};
+
+	/**
+	 * Creates the.
+	 *
+	 * @param target
+	 *            the target
+	 * @return the designer overlay extension
+	 */
+	public static DesignerOverlayExtension create(Component target) {
+		DesignerOverlayExtension extension = new DesignerOverlayExtension();
+		extension.owner = target;
+		extension.extend((AbstractClientConnector) target);
+		return extension;
+	}
+
+	/**
+	 * Instantiates a new designer overlay extension.
+	 */
+	private DesignerOverlayExtension() {
+		registerRpc(rpc);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.vaadin.server.AbstractClientConnector#getState()
+	 */
+	@Override
+	protected DesignerExtensionState getState() {
+		return (DesignerExtensionState) super.getState();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.vaadin.server.AbstractClientConnector#getState(boolean)
+	 */
+	@Override
+	protected DesignerExtensionState getState(boolean markDirty) {
+		return (DesignerExtensionState) super.getState(markDirty);
+	}
+
+	/**
+	 * Sets the icon to be shown at the overlay.
+	 *
+	 * @param source
+	 *            the new icon
+	 */
+	public void setIcon(Resource source) {
+		setResource(ComponentConstants.ICON_RESOURCE, source);
+	}
+
+	/**
+	 * Returns the icon which is shown at the overlay.
+	 *
+	 * @return the icon
+	 */
+	public Resource getIcon() {
+		return getResource(ComponentConstants.ICON_RESOURCE);
+	}
+
+	/**
+	 * Checks if is supports remove.
+	 *
+	 * @return true, if is supports remove
+	 */
+	public boolean isSupportsRemove() {
+		return getState(false).supportsRemove;
+	}
+
+	/**
+	 * Sets the supports remove.
+	 *
+	 * @param supportsRemove
+	 *            the new supports remove
+	 */
+	public void setSupportsRemove(boolean supportsRemove) {
+		if (isSupportsRemove() != supportsRemove) {
+			getState(true).supportsRemove = supportsRemove;
+		}
+	}
+
+	/**
+	 * Checks if is supports add.
+	 *
+	 * @return true, if is supports add
+	 */
+	public boolean isSupportsAdd() {
+		return getState(false).supportsAdd;
+	}
+
+	/**
+	 * Sets the supports add.
+	 *
+	 * @param supportsAdd
+	 *            the new supports add
+	 */
+	public void setSupportsAdd(boolean supportsAdd) {
+		if (isSupportsAdd() != supportsAdd) {
+			getState(true).supportsAdd = supportsAdd;
+		}
+	}
+
+	/**
+	 * Checks if is supports editable.
+	 *
+	 * @return true, if is supports editable
+	 */
+	public boolean isSupportsEditable() {
+		return getState(false).supportsEditable;
+	}
+
+	/**
+	 * Sets the supports editable.
+	 *
+	 * @param supportsEditable
+	 *            the new supports editable
+	 */
+	public void setSupportsEditable(boolean supportsEditable) {
+		if (isSupportsEditable() != supportsEditable) {
+			getState(true).supportsEditable = supportsEditable;
+		}
+	}
+
+	/**
+	 * Checks if is supports properties dialog.
+	 *
+	 * @return true, if is supports properties dialog
+	 */
+	public boolean isSupportsPropertiesDialog() {
+		return getState(false).supportsPropertiesDialog;
+	}
+
+	/**
+	 * Sets the supports properties dialog.
+	 *
+	 * @param supportsPropertiesDialog
+	 *            the new supports properties dialog
+	 */
+	public void setSupportsPropertiesDialog(boolean supportsPropertiesDialog) {
+		if (isSupportsPropertiesDialog() != supportsPropertiesDialog) {
+			getState(true).supportsPropertiesDialog = supportsPropertiesDialog;
+		}
+	}
+
+	/**
+	 * Checks if is supports margins.
+	 *
+	 * @return true, if is supports margins
+	 */
+	public boolean isSupportsMargins() {
+		return getState(false).supportsMargins;
+	}
+
+	/**
+	 * Sets the supports margins.
+	 *
+	 * @param supportsMargins
+	 *            the new supports margins
+	 */
+	public void setSupportsMargins(boolean supportsMargins) {
+		if (isSupportsMargins() != supportsMargins) {
+			getState(true).supportsMargins = supportsMargins;
+		}
+	}
+
+	/**
+	 * Checks if is supports spacing.
+	 *
+	 * @return true, if is supports spacing
+	 */
+	public boolean isSupportsSpacing() {
+		return getState(false).supportsSpacing;
+	}
+
+	/**
+	 * Sets the supports spacing.
+	 *
+	 * @param supportsSpacing
+	 *            the new supports spacing
+	 */
+	public void setSupportsSpacing(boolean supportsSpacing) {
+		if (isSupportsSpacing() != supportsSpacing) {
+			getState(true).supportsSpacing = supportsSpacing;
+		}
+	}
+
+	/**
+	 * Checks if is supports alignments.
+	 *
+	 * @return true, if is supports alignments
+	 */
+	public boolean isSupportsAlignments() {
+		return getState(false).supportsAlignments;
+	}
+
+	/**
+	 * Sets the supports alignments.
+	 *
+	 * @param supportsAlignments
+	 *            the new supports alignments
+	 */
+	public void setSupportsAlignments(boolean supportsAlignments) {
+		if (isSupportsAlignments() != supportsAlignments) {
+			getState(true).supportsAlignments = supportsAlignments;
+		}
+	}
+
+	/**
+	 * Gets the description remove.
+	 *
+	 * @return the descriptionRemove
+	 */
+	public String getDescriptionRemove() {
+		return getState(false).descriptionRemove;
+	}
+
+	/**
+	 * Sets the description remove.
+	 *
+	 * @param descriptionRemove
+	 *            the descriptionRemove to set
+	 */
+	public void setDescriptionRemove(String descriptionRemove) {
+		getState(true).descriptionRemove = descriptionRemove;
+	}
+
+	/**
+	 * Gets the description editable.
+	 *
+	 * @return the descriptionEditable
+	 */
+	public String getDescriptionEditable() {
+		return getState(false).descriptionEditable;
+	}
+
+	/**
+	 * Sets the description editable.
+	 *
+	 * @param descriptionEditable
+	 *            the descriptionEditable to set
+	 */
+	public void setDescriptionEditable(String descriptionEditable) {
+		getState(true).descriptionEditable = descriptionEditable;
+	}
+
+	/**
+	 * Gets the description properties dialog.
+	 *
+	 * @return the descriptionPropertiesDialog
+	 */
+	public String getDescriptionPropertiesDialog() {
+		return getState(false).descriptionPropertiesDialog;
+	}
+
+	/**
+	 * Sets the description properties dialog.
+	 *
+	 * @param descriptionPropertiesDialog
+	 *            the descriptionPropertiesDialog to set
+	 */
+	public void setDescriptionPropertiesDialog(String descriptionPropertiesDialog) {
+		getState(true).descriptionPropertiesDialog = descriptionPropertiesDialog;
+	}
+
+	/**
+	 * Gets the description margins.
+	 *
+	 * @return the descriptionMargins
+	 */
+	public String getDescriptionMargins() {
+		return getState(false).descriptionMargins;
+	}
+
+	/**
+	 * Sets the description margins.
+	 *
+	 * @param descriptionMargins
+	 *            the descriptionMargins to set
+	 */
+	public void setDescriptionMargins(String descriptionMargins) {
+		getState(true).descriptionMargins = descriptionMargins;
+	}
+
+	/**
+	 * Gets the description spacing.
+	 *
+	 * @return the descriptionSpacing
+	 */
+	public String getDescriptionSpacing() {
+		return getState(false).descriptionSpacing;
+	}
+
+	/**
+	 * Sets the description spacing.
+	 *
+	 * @param descriptionSpacing
+	 *            the descriptionSpacing to set
+	 */
+	public void setDescriptionSpacing(String descriptionSpacing) {
+		getState(true).descriptionSpacing = descriptionSpacing;
+	}
+
+	/**
+	 * Gets the description alignments.
+	 *
+	 * @return the descriptionAlignments
+	 */
+	public String getDescriptionAlignments() {
+		return getState(false).descriptionAlignments;
+	}
+
+	/**
+	 * Sets the description alignments.
+	 *
+	 * @param descriptionAlignments
+	 *            the descriptionAlignments to set
+	 */
+	public void setDescriptionAlignments(String descriptionAlignments) {
+		getState(true).descriptionAlignments = descriptionAlignments;
+	}
+
+	/**
+	 * Gets the description add.
+	 *
+	 * @return the descriptionAdd
+	 */
+	public String getDescriptionAdd() {
+		return getState(false).descriptionAdd;
+	}
+
+	/**
+	 * Sets the description add.
+	 *
+	 * @param descriptionAdd
+	 *            the descriptionAdd to set
+	 */
+	public void setDescriptionAdd(String descriptionAdd) {
+		getState(true).descriptionAdd = descriptionAdd;
+	}
+
+	/**
+	 * Adds the all event hanndler.
+	 *
+	 * @param handler
+	 *            the handler
+	 */
+	public void addAllEventHanndler(AllEventHanndler handler) {
+		addSwitchEditableListener(handler);
+		addAlignmentChangedListener(handler);
+		addRemoveChildListener(handler);
+		addShowPropertiesListener(handler);
+		addSwitchMarginListener(handler);
+		addSwitchSpacingListener(handler);
+		addAddChildListener(handler);
+	}
+
+	/**
+	 * Removes the all event hanndler.
+	 *
+	 * @param handler
+	 *            the handler
+	 */
+	public void removeAllEventHanndler(AllEventHanndler handler) {
+		removeSwitchEditableListener(handler);
+		removeAlignmentChangedListener(handler);
+		removeRemoveChildListener(handler);
+		removeShowPropertiesListener(handler);
+		removeSwitchMarginListener(handler);
+		removeSwitchSpacingListener(handler);
+		removeAddChildListener(handler);
+	}
+
+	/**
+	 * Add listener which is being notified if the alignment changes.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void addAlignmentChangedListener(AlignmentChangedListener listener) {
+		addListener(AlignmentChangedEvent.class, listener, AlignmentChangedListener.ALIGNMENT_CHANGED_METHOD);
+	}
+
+	/**
+	 * Removes listener which is being notified if the alignment changes.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void removeAlignmentChangedListener(AlignmentChangedListener listener) {
+		removeListener(AlignmentChangedEvent.class, listener);
+	}
+
+	/**
+	 * Add listener which is being notified if a child should be removed.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void addRemoveChildListener(RemoveChildListener listener) {
+		addListener(RemoveChildEvent.class, listener, RemoveChildListener.REMOVE_CHILD_METHOD);
+	}
+
+	/**
+	 * Removes listener which is being notified if a child should be removed.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void removeRemoveChildListener(RemoveChildListener listener) {
+		removeListener(RemoveChildEvent.class, listener);
+	}
+
+	/**
+	 * Add listener which is being notified if a child should be added.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void addAddChildListener(AddChildListener listener) {
+		addListener(AddChildEvent.class, listener, AddChildListener.ADD_CHILD_METHOD);
+	}
+
+	/**
+	 * Removes listener which is being notified if a child should be added.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void removeAddChildListener(AddChildListener listener) {
+		removeListener(AddChildEvent.class, listener);
+	}
+
+	/**
+	 * Add listener which is being notified if the editable state should be
+	 * switched.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void addSwitchEditableListener(SwitchEditableListener listener) {
+		addListener(SwitchEditableEvent.class, listener, SwitchEditableListener.SWITCH_EDITABLE_METHOD);
+	}
+
+	/**
+	 * Removes listener which is being notified if the editable state should be
+	 * switched.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void removeSwitchEditableListener(SwitchEditableListener listener) {
+		removeListener(SwitchEditableEvent.class, listener);
+	}
+
+	/**
+	 * Add listener which is being notified if a properties dialog should be
+	 * shown.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void addShowPropertiesListener(ShowPropertiesListener listener) {
+		addListener(ShowPropertiesEvent.class, listener, ShowPropertiesListener.SHOW_PROPERTIES_METHOD);
+	}
+
+	/**
+	 * Removes listener which is being notified if a properties dialog should be
+	 * shown.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void removeShowPropertiesListener(ShowPropertiesListener listener) {
+		removeListener(ShowPropertiesEvent.class, listener);
+	}
+
+	/**
+	 * Add listener which is being notified if the spacing state should be
+	 * switched.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void addSwitchSpacingListener(SwitchSpacingListener listener) {
+		addListener(SwitchSpacingEvent.class, listener, SwitchSpacingListener.SWITCH_SPACING_METHOD);
+	}
+
+	/**
+	 * Remove listener which is being notified if the spacing state should be
+	 * switched.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void removeSwitchSpacingListener(SwitchSpacingListener listener) {
+		removeListener(SwitchSpacingEvent.class, listener);
+	}
+
+	/**
+	 * Add listener which is being notified if the margin state should be
+	 * switched.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void addSwitchMarginListener(SwitchMarginListener listener) {
+		addListener(SwitchMarginEvent.class, listener, SwitchMarginListener.SWITCH_MARGIN_METHOD);
+	}
+
+	/**
+	 * Remove listener which is being notified if the margin state should be
+	 * switched.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void removeSwitchMarginListener(SwitchMarginListener listener) {
+		removeListener(SwitchMarginEvent.class, listener);
+	}
+
+	/**
+	 * The Class AlignmentChangedEvent.
+	 */
+	public static class AlignmentChangedEvent extends Event {
+
+		/** The alignment. */
+		private final AlignmentInfo alignment;
+
+		/**
+		 * Instantiates a new alignment changed event.
+		 *
+		 * @param source
+		 *            the source
+		 * @param alignment
+		 *            the alignment
+		 */
+		public AlignmentChangedEvent(Component source, AlignmentInfo alignment) {
+			super(source);
+			this.alignment = alignment;
+		}
+
+		/**
+		 * Gets the alignment.
+		 *
+		 * @return the alignment
+		 */
+		public AlignmentInfo getAlignment() {
+			return alignment;
+		}
+
+	}
+
+	/**
+	 * The listener interface for receiving alignmentChanged events. The class
+	 * that is interested in processing a alignmentChanged event implements this
+	 * interface, and the object created with that class is registered with a
+	 * component using the component's <code>addAlignmentChangedListener</code>
+	 * method. When the alignmentChanged event occurs, that object's appropriate
+	 * method is invoked.
+	 *
+	 * @see AlignmentChangedEvent
+	 */
+	public interface AlignmentChangedListener extends Serializable {
+
+		/** The Constant ALIGNMENT_CHANGED_METHOD. */
+		public static final Method ALIGNMENT_CHANGED_METHOD = ReflectTools.findMethod(AlignmentChangedListener.class,
+				"alignmentChanged", AlignmentChangedEvent.class);
+
+		/**
+		 * Alignment changed.
+		 *
+		 * @param event
+		 *            the event
+		 */
+		void alignmentChanged(AlignmentChangedEvent event);
+
+	}
+
+	/**
+	 * This event is fired, if a properties dialog should be shown.
+	 */
+	public class ShowPropertiesEvent extends Event {
+
+		/**
+		 * Instantiates a new show properties event.
+		 *
+		 * @param source
+		 *            the source
+		 */
+		public ShowPropertiesEvent(Component source) {
+			super(source);
+		}
+	}
+
+	/**
+	 * Listens for ShowPropertiesEvent.
+	 *
+	 * @see ShowPropertiesEvent
+	 */
+	public interface ShowPropertiesListener {
+
+		/** The Constant SHOW_PROPERTIES_METHOD. */
+		public static final Method SHOW_PROPERTIES_METHOD = ReflectTools.findMethod(ShowPropertiesListener.class,
+				"showProperties", ShowPropertiesEvent.class);
+
+		/**
+		 * Show properties.
+		 *
+		 * @param event
+		 *            the event
+		 */
+		void showProperties(ShowPropertiesEvent event);
+
+	}
+
+	/**
+	 * The Class RemoveChildEvent.
+	 */
+	public static class RemoveChildEvent extends Event {
+
+		/**
+		 * Instantiates a new removes the child event.
+		 *
+		 * @param source
+		 *            the source
+		 */
+		public RemoveChildEvent(Component source) {
+			super(source);
+		}
+	}
+
+	/**
+	 * The listener interface for receiving removeChild events. The class that
+	 * is interested in processing a removeChild event implements this
+	 * interface, and the object created with that class is registered with a
+	 * component using the component's <code>addRemoveChildListener</code>
+	 * method. When the removeChild event occurs, that object's appropriate
+	 * method is invoked.
+	 *
+	 * @see RemoveChildEvent
+	 */
+	public interface RemoveChildListener extends Serializable {
+
+		/** The Constant REMOVE_CHILD_METHOD. */
+		public static final Method REMOVE_CHILD_METHOD = ReflectTools.findMethod(RemoveChildListener.class,
+				"removeChild", RemoveChildEvent.class);
+
+		/**
+		 * Removes the child.
+		 *
+		 * @param event
+		 *            the event
+		 */
+		void removeChild(RemoveChildEvent event);
+	}
+
+	/**
+	 * The Class AddChildEvent.
+	 */
+	public static class AddChildEvent extends Event {
+
+		/**
+		 * Instantiates a new adds the child event.
+		 *
+		 * @param source
+		 *            the source
+		 */
+		public AddChildEvent(Component source) {
+			super(source);
+		}
+	}
+
+	/**
+	 * The listener interface for receiving addChild events. The class that is
+	 * interested in processing a addChild event implements this interface, and
+	 * the object created with that class is registered with a component using
+	 * the component's <code>addAddChildListener</code> method. When the
+	 * addChild event occurs, that object's appropriate method is invoked.
+	 *
+	 * @see AddChildEvent
+	 */
+	public interface AddChildListener extends Serializable {
+
+		/** The Constant ADD_CHILD_METHOD. */
+		public static final Method ADD_CHILD_METHOD = ReflectTools.findMethod(AddChildListener.class, "addChild",
+				AddChildEvent.class);
+
+		/**
+		 * Adds the child.
+		 *
+		 * @param event
+		 *            the event
+		 */
+		void addChild(AddChildEvent event);
+	}
+
+	/**
+	 * The Class SwitchEditableEvent.
+	 */
+	public static class SwitchEditableEvent extends Event {
+
+		/**
+		 * Instantiates a new switch editable event.
+		 *
+		 * @param source
+		 *            the source
+		 */
+		public SwitchEditableEvent(Component source) {
+			super(source);
+		}
+	}
+
+	/**
+	 * The listener interface for receiving switchEditable events. The class
+	 * that is interested in processing a switchEditable event implements this
+	 * interface, and the object created with that class is registered with a
+	 * component using the component's <code>addSwitchEditableListener</code>
+	 * method. When the switchEditable event occurs, that object's appropriate
+	 * method is invoked.
+	 *
+	 * @see SwitchEditableEvent
+	 */
+	public interface SwitchEditableListener extends Serializable {
+
+		/** The Constant SWITCH_EDITABLE_METHOD. */
+		public static final Method SWITCH_EDITABLE_METHOD = ReflectTools.findMethod(SwitchEditableListener.class,
+				"switchEditable", SwitchEditableEvent.class);
+
+		/**
+		 * Switch editable.
+		 *
+		 * @param event
+		 *            the event
+		 */
+		void switchEditable(SwitchEditableEvent event);
+	}
+
+	/**
+	 * The Class AllEventHanndler.
+	 */
+	public static abstract class AllEventHanndler
+			implements AlignmentChangedListener, RemoveChildListener, SwitchEditableListener, ShowPropertiesListener,
+			SwitchMarginListener, SwitchSpacingListener, AddChildListener {
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.osbp.vaadin.addons.designer.overlay.
+		 * DesignerOverlayExtension.SwitchEditableListener#switchEditable(org.
+		 * eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.
+		 * SwitchEditableEvent)
+		 */
+		@Override
+		public void switchEditable(SwitchEditableEvent event) {
+
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.osbp.vaadin.addons.designer.overlay.
+		 * DesignerOverlayExtension.RemoveChildListener#removeChild(org.eclipse.
+		 * osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.
+		 * RemoveChildEvent)
+		 */
+		@Override
+		public void removeChild(RemoveChildEvent event) {
+
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.osbp.vaadin.addons.designer.overlay.
+		 * DesignerOverlayExtension.AddChildListener#addChild(org.eclipse.osbp.
+		 * vaadin.addons.designer.overlay.DesignerOverlayExtension.
+		 * AddChildEvent)
+		 */
+		@Override
+		public void addChild(AddChildEvent event) {
+
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.osbp.vaadin.addons.designer.overlay.
+		 * DesignerOverlayExtension.AlignmentChangedListener#alignmentChanged(
+		 * org.eclipse.osbp.vaadin.addons.designer.overlay.
+		 * DesignerOverlayExtension.AlignmentChangedEvent)
+		 */
+		@Override
+		public void alignmentChanged(AlignmentChangedEvent event) {
+
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.osbp.vaadin.addons.designer.overlay.
+		 * DesignerOverlayExtension.ShowPropertiesListener#showProperties(org.
+		 * eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.
+		 * ShowPropertiesEvent)
+		 */
+		@Override
+		public void showProperties(ShowPropertiesEvent event) {
+
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.osbp.vaadin.addons.designer.overlay.
+		 * DesignerOverlayExtension.SwitchSpacingListener#switchSpacing(org.
+		 * eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.
+		 * SwitchSpacingEvent)
+		 */
+		@Override
+		public void switchSpacing(SwitchSpacingEvent event) {
+
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.osbp.vaadin.addons.designer.overlay.
+		 * DesignerOverlayExtension.SwitchMarginListener#switchMargin(org.
+		 * eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension.
+		 * SwitchMarginEvent)
+		 */
+		@Override
+		public void switchMargin(SwitchMarginEvent event) {
+
+		}
+
+	}
+
+	/**
+	 * The Class SwitchMarginEvent.
+	 */
+	public static class SwitchMarginEvent extends Event {
+
+		/**
+		 * Instantiates a new switch margin event.
+		 *
+		 * @param source
+		 *            the source
+		 */
+		public SwitchMarginEvent(Component source) {
+			super(source);
+		}
+	}
+
+	/**
+	 * The listener interface for receiving switchMargin events. The class that
+	 * is interested in processing a switchMargin event implements this
+	 * interface, and the object created with that class is registered with a
+	 * component using the component's <code>addSwitchMarginListener</code>
+	 * method. When the switchMargin event occurs, that object's appropriate
+	 * method is invoked.
+	 *
+	 * @see SwitchMarginEvent
+	 */
+	public interface SwitchMarginListener extends Serializable {
+
+		/** The Constant SWITCH_MARGIN_METHOD. */
+		public static final Method SWITCH_MARGIN_METHOD = ReflectTools.findMethod(SwitchMarginListener.class,
+				"switchMargin", SwitchMarginEvent.class);
+
+		/**
+		 * Switch margin.
+		 *
+		 * @param event
+		 *            the event
+		 */
+		void switchMargin(SwitchMarginEvent event);
+	}
+
+	/**
+	 * The Class SwitchSpacingEvent.
+	 */
+	public static class SwitchSpacingEvent extends Event {
+
+		/**
+		 * Instantiates a new switch spacing event.
+		 *
+		 * @param source
+		 *            the source
+		 */
+		public SwitchSpacingEvent(Component source) {
+			super(source);
+		}
+	}
+
+	/**
+	 * The listener interface for receiving switchSpacing events. The class that
+	 * is interested in processing a switchSpacing event implements this
+	 * interface, and the object created with that class is registered with a
+	 * component using the component's <code>addSwitchSpacingListener</code>
+	 * method. When the switchSpacing event occurs, that object's appropriate
+	 * method is invoked.
+	 *
+	 * @see SwitchSpacingEvent
+	 */
+	public interface SwitchSpacingListener extends Serializable {
+
+		/** The Constant SWITCH_SPACING_METHOD. */
+		public static final Method SWITCH_SPACING_METHOD = ReflectTools.findMethod(SwitchSpacingListener.class,
+				"switchSpacing", SwitchSpacingEvent.class);
+
+		/**
+		 * Switch spacing.
+		 *
+		 * @param event
+		 *            the event
+		 */
+		void switchSpacing(SwitchSpacingEvent event);
+	}
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayWidgetset.gwt.xml b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayWidgetset.gwt.xml
new file mode 100644
index 0000000..80e78b1
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayWidgetset.gwt.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.5.1/distro-source/core/src/gwt-module.dtd">
+<module>
+	<inherits name="com.vaadin.DefaultWidgetSet" />
+
+	<!-- Uncomment the following to compile the widgetset for one browser only. 
+		Multiple browsers can be specified as a comma separated list. The supported 
+		user agents at the moment of writing were: ie8,ie9,gecko1_8,safari,opera 
+		The value gecko1_8 is used for Firefox and safari is used for webkit based 
+		browsers including Google Chrome. -->
+
+ 	<!-- To enable SuperDevMode, uncomment this line. See https://vaadin.com/wiki/-/wiki/Main/Using%20SuperDevMode 
+ 		for more information and instructions. --> 
+ 	<!-- <set-configuration-property name="devModeRedirectEnabled" value="true" /> --> 
+	
+<!-- 	<add-linker name="xsiframe" /> -->
+<!-- 	<set-configuration-property name="devModeRedirectEnabled" -->
+<!-- 		value="true" /> -->
+<!-- 	<set-property name="user.agent" value="safari" /> -->
+
+	<stylesheet src="designer_overlay/styles.css" />
+</module>
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionClientRpc.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionClientRpc.java
new file mode 100644
index 0000000..c51a89a
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionClientRpc.java
@@ -0,0 +1,22 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client;
+
+import com.vaadin.shared.communication.ClientRpc;
+
+/**
+ * The Interface DesignerExtensionClientRpc.
+ */
+public interface DesignerExtensionClientRpc extends ClientRpc {
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionConnector.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionConnector.java
new file mode 100644
index 0000000..52a3a96
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionConnector.java
@@ -0,0 +1,232 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.DesignerOverlayExtension;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.OAlignmentChangedEvent;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.OAlignmentChangedHandler;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.OButtonClickEvent;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.OButtonClickHandler;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.OOverlayController;
+
+import com.google.gwt.core.shared.GWT;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.Event.NativePreviewEvent;
+import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.ComponentConnector;
+import com.vaadin.client.ServerConnector;
+import com.vaadin.client.communication.RpcProxy;
+import com.vaadin.client.communication.StateChangeEvent;
+import com.vaadin.client.extensions.AbstractExtensionConnector;
+import com.vaadin.shared.ui.Connect;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class DesignerExtensionConnector.
+ */
+@Connect(DesignerOverlayExtension.class)
+public class DesignerExtensionConnector extends AbstractExtensionConnector implements OAlignmentChangedHandler,
+		OButtonClickHandler, com.google.gwt.user.client.Event.NativePreviewHandler {
+
+	/** The Constant serialVersionUID. */
+	private static final long serialVersionUID = -3501965859455838012L;
+
+	/** The rpc. */
+	private DesignerExtensionServerRpc rpc = RpcProxy.create(DesignerExtensionServerRpc.class, this);
+
+	/** The hreg. */
+	private HandlerRegistration hreg;
+
+	/** The overlay. */
+	private ODesignerOverlay overlay;
+
+	private Widget widget;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.vaadin.client.extensions.AbstractExtensionConnector#extend(com.vaadin
+	 * .client.ServerConnector)
+	 */
+	@Override
+	protected void extend(ServerConnector target) {
+		widget = ((ComponentConnector) target).getWidget();
+
+		overlay = GWT.create(ODesignerOverlay.class);
+		overlay.setConnector(DesignerExtensionConnector.this);
+		overlay.setOwner(widget);
+
+		OOverlayController.getInstance().register(widget.getElement(), overlay);
+
+		hreg = Event.addNativePreviewHandler(this);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.google.gwt.user.client.ui.PopupPanel#onPreviewNativeEvent(com.google.
+	 * gwt.user.client.Event.NativePreviewEvent)
+	 */
+	public void onPreviewNativeEvent(final NativePreviewEvent event) {
+		Element target = Element.as(event.getNativeEvent().getEventTarget());
+		int type = event.getTypeInt();
+
+		if (type == Event.ONCLICK) {
+			if (!event.getNativeEvent().getAltKey()) {
+				return;
+			}
+			if (event.isCanceled()) {
+				return;
+			}
+			if (!isEventOnTarget(target)) {
+				return;
+			}
+
+			if (!overlay.isShowing()) {
+				int top = widget.getAbsoluteTop() + widget.getOffsetHeight();
+				int windowHeight = RootPanel.get().getOffsetHeight();
+				if (windowHeight - top < 30) {
+					// place the popup above
+					top = widget.getAbsoluteTop();
+				}
+
+				OOverlayController.getInstance().show(overlay, event.getNativeEvent().getClientX(),
+						event.getNativeEvent().getClientY());
+				event.cancel();
+			}
+			overlay.setAlignmentInfo(getState().alignment);
+
+		} else if (type == Event.ONKEYUP) {
+			if (event.isCanceled()) {
+				return;
+			}
+			if (!isEventOnTarget(target)) {
+				return;
+			}
+			int keyCode = event.getNativeEvent().getKeyCode();
+			if (KeyCodes.KEY_UP == keyCode && event.getNativeEvent().getAltKey()) {
+				OOverlayController.getInstance().navigateUp();
+				event.cancel();
+			} else if (KeyCodes.KEY_DOWN == keyCode && event.getNativeEvent().getAltKey()) {
+				OOverlayController.getInstance().navigateDown();
+				event.cancel();
+			} else if (KeyCodes.KEY_ESCAPE == keyCode) {
+				OOverlayController.getInstance().close();
+				event.cancel();
+			}
+		}
+	}
+
+	/**
+	 * Checks if is mouse on target.
+	 *
+	 * @param target
+	 *            the target
+	 * @return true, if is mouse on target
+	 */
+	protected boolean isEventOnTarget(Element target) {
+		// is owner the target?
+		boolean eventTargetsThis = widget.getElement().isOrHasChild(target);
+		return eventTargetsThis;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.vaadin.client.ui.AbstractConnector#getState()
+	 */
+	@Override
+	public DesignerExtensionState getState() {
+		return (DesignerExtensionState) super.getState();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.vaadin.client.ui.AbstractConnector#onStateChanged(com.vaadin.client.
+	 * communication.StateChangeEvent)
+	 */
+	@Override
+	public void onStateChanged(StateChangeEvent stateChangeEvent) {
+		super.onStateChanged(stateChangeEvent);
+
+		if (overlay != null) {
+			overlay.setAlignmentInfo(getState().alignment);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.vaadin.client.ui.AbstractConnector#onUnregister()
+	 */
+	@Override
+	public void onUnregister() {
+
+		OOverlayController.getInstance().unregister(widget.getElement());
+
+		hreg.removeHandler();
+		hreg = null;
+
+		if (overlay != null) {
+			overlay.destroy();
+			overlay = null;
+		}
+
+		super.onUnregister();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.
+	 * OAlignmentChangedHandler#onAlignmentChanged(org.eclipse.osbp.vaadin.
+	 * addons.designer.overlay.client.widgets.OAlignmentChangedEvent)
+	 */
+	@Override
+	public void onAlignmentChanged(OAlignmentChangedEvent event) {
+		getState().alignment = event.getAlignment();
+		rpc.alignmentChanged(event.getAlignment());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.
+	 * OButtonClickHandler#clicked(org.eclipse.osbp.vaadin.addons.designer.
+	 * overlay.client.widgets.OButtonClickEvent)
+	 */
+	@Override
+	public void clicked(OButtonClickEvent event) {
+		if (event.getCustomEventType().equals(OIConstants.EVENT_TYPE__REMOVE_CHILD)) {
+			rpc.removeChild();
+		} else if (event.getCustomEventType().equals(OIConstants.EVENT_TYPE__ADD_CHILD)) {
+			rpc.addChild();
+		} else if (event.getCustomEventType().equals(OIConstants.EVENT_TYPE__SWITCH_EDITABLE)) {
+			rpc.switchEditable();
+		} else if (event.getCustomEventType().equals(OIConstants.EVENT_TYPE__OPEN_PROPERTIES)) {
+			rpc.openProperties();
+		} else if (event.getCustomEventType().equals(OIConstants.EVENT_TYPE__SWITCH_MARGIN)) {
+			rpc.switchMargin();
+		} else if (event.getCustomEventType().equals(OIConstants.EVENT_TYPE__SWITCH_SPACING)) {
+			rpc.switchSpacing();
+		}
+	}
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionServerRpc.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionServerRpc.java
new file mode 100644
index 0000000..299d917
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionServerRpc.java
@@ -0,0 +1,62 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.AlignmentInfo;
+
+import com.vaadin.shared.communication.ServerRpc;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface DesignerExtensionServerRpc.
+ */
+public interface DesignerExtensionServerRpc extends ServerRpc {
+
+	/**
+	 * Is called to change the alignment of the child.
+	 *
+	 * @param alignment the alignment
+	 */
+	void alignmentChanged(AlignmentInfo alignment);
+
+	/**
+	 * Is called to remove the child from its layout.
+	 */
+	void removeChild();
+
+	/**
+	 * Is called to add a child to its layout.
+	 */
+	void addChild();
+
+	/**
+	 * Is called to open the properties dialog.
+	 */
+	void openProperties();
+
+	/**
+	 * Switches the editable state.
+	 */
+	void switchEditable();
+
+	/**
+	 * Switches the margin state.
+	 */
+	void switchMargin();
+
+	/**
+	 * Switchs the spacing state.
+	 */
+	void switchSpacing();
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionState.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionState.java
new file mode 100644
index 0000000..3510c3f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/DesignerExtensionState.java
@@ -0,0 +1,58 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.AlignmentInfo;
+import com.vaadin.shared.communication.SharedState;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class DesignerExtensionState.
+ */
+public class DesignerExtensionState extends SharedState {
+
+	/** The Constant serialVersionUID. */
+	private static final long serialVersionUID = -138381612142479069L;
+
+	/** The alignment. */
+	public AlignmentInfo alignment;
+	
+	/** The supports remove. */
+	public boolean supportsRemove = false;
+	
+	/** The supports editable. */
+	public boolean supportsEditable = true;
+	
+	/** The supports properties dialog. */
+	public boolean supportsPropertiesDialog = true;
+	
+	/** The supports margins. */
+	public boolean supportsMargins = false;
+	
+	/** The supports spacing. */
+	public boolean supportsSpacing = false;
+	
+	/** The supports alignments. */
+	public boolean supportsAlignments = true;
+	
+	/** The supports add. */
+	public boolean supportsAdd = false;
+	
+	public String descriptionRemove = "remove";
+	public String descriptionEditable = "editable";
+	public String descriptionPropertiesDialog = "properties";
+	public String descriptionMargins = "margins";
+	public String descriptionSpacing = "spacing";
+	public String descriptionAlignments = "alignments";
+	public String descriptionAdd = "add";
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/OAbstractOverlay.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/OAbstractOverlay.java
new file mode 100644
index 0000000..89133a4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/OAbstractOverlay.java
@@ -0,0 +1,79 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client;
+
+import java.util.logging.Logger;
+
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.user.client.DOM;
+import com.vaadin.client.ui.VOverlay;
+
+/**
+ * The Class OAbstractOverlay.
+ */
+@SuppressWarnings("deprecation")
+public class OAbstractOverlay extends VOverlay {
+
+	/** The Constant CSS_DESIGNER_OVERLAYED. */
+	private static final String CSS_DESIGNER_OVERLAYED = "o-designer-overlayed";
+
+	private final Logger logger = Logger.getLogger("DesignerOverlay");
+
+	/**
+	 * Instantiates a new o abstract overlay.
+	 */
+	public OAbstractOverlay() {
+		super(true, false);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.vaadin.client.ui.VOverlay#show()
+	 */
+	@Override
+	public void show() {
+		super.show();
+
+		getOwner().addStyleName(CSS_DESIGNER_OVERLAYED);
+
+		logger.info("Showing overlay for " + getOwner().getElement().getId());
+		logger.info("Added marker css style for " + getOwner().getElement().getId());
+	}
+
+	public void hide(final boolean autoClosed, final boolean animateIn, final boolean animateOut) {
+		super.hide(autoClosed, animateIn, animateOut);
+
+		logger.info("Hiding overlay for " + getOwner().getElement().getId());
+
+		getOwner().removeStyleName(CSS_DESIGNER_OVERLAYED);
+		logger.info("Removed marker css style for " + getOwner().getElement().getId());
+	}
+
+	/**
+	 * Checks if is mouse on target.
+	 *
+	 * @param target
+	 *            the target
+	 * @return true, if is mouse on target
+	 */
+	protected boolean isMouseOnTarget(Element target) {
+		// is owner the target?
+		boolean eventTargetsThis = DOM.isOrHasChild(getOwner().getElement(), target);
+		if (!eventTargetsThis) {
+			eventTargetsThis = DOM.isOrHasChild(getElement(), target);
+		}
+		return eventTargetsThis;
+	}
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/ODesignerOverlay.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/ODesignerOverlay.java
new file mode 100644
index 0000000..d404d6b
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/ODesignerOverlay.java
@@ -0,0 +1,186 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.AlignmentInfo;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.OAlignmentWidget;
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets.OButtonWidget;
+
+import com.google.gwt.user.client.ui.FlowPanel;
+import com.vaadin.client.ui.VImage;
+import com.vaadin.shared.ComponentConstants;
+
+/**
+ * Overlay for designer stuff.
+ */
+public class ODesignerOverlay extends OAbstractOverlay {
+
+	/** The Constant CLASSNAME. */
+	private static final String CLASSNAME = "o-designer-overlay";
+
+	/** The alignment widget. */
+	private OAlignmentWidget alignmentWidget;
+
+	/** The remove button. */
+	private OButtonWidget removeButton;
+
+	/** The root. */
+	private FlowPanel root;
+
+	/** The editable button. */
+	private OButtonWidget editableButton;
+
+	/** The open properties button. */
+	private OButtonWidget openPropertiesButton;
+
+	/** The margin button. */
+	private OButtonWidget marginButton;
+
+	/** The spacing button. */
+	private OButtonWidget spacingButton;
+
+	/** The add button. */
+	private OButtonWidget addButton;
+
+	/**
+	 * Shows alignment lines for drag and resize operations.
+	 */
+	public ODesignerOverlay() {
+
+		getElement().setClassName(CLASSNAME);
+	}
+
+	/**
+	 * Initialize.
+	 *
+	 * @param connector the connector
+	 */
+	private void initialize(DesignerExtensionConnector connector) {
+		root = new FlowPanel();
+		add(root);
+
+		if (connector.getResourceUrl(ComponentConstants.ICON_RESOURCE) != null) {
+			VImage image = new VImage();
+			root.add(image);
+			String iconUrl = connector.getResourceUrl(ComponentConstants.ICON_RESOURCE);
+			image.setUrl(iconUrl);
+		}
+
+		if (connector.getState().supportsAlignments) {
+			alignmentWidget = new OAlignmentWidget();
+			alignmentWidget.setTitle(connector.getState().descriptionAlignments);
+			root.add(alignmentWidget);
+			alignmentWidget.setAlignmentChangedHandler(connector);
+		}
+
+		if (connector.getState().supportsMargins) {
+			marginButton = new OButtonWidget();
+			marginButton.addStyleName(OIConstants.EVENT_TYPE__SWITCH_MARGIN);
+			marginButton.setCustomEventType(OIConstants.EVENT_TYPE__SWITCH_MARGIN);
+			marginButton.setTitle(connector.getState().descriptionMargins);
+			root.add(marginButton);
+			marginButton.setClickHandler(connector);
+		}
+		if (connector.getState().supportsSpacing) {
+			spacingButton = new OButtonWidget();
+			spacingButton.addStyleName(OIConstants.EVENT_TYPE__SWITCH_SPACING);
+			spacingButton.setCustomEventType(OIConstants.EVENT_TYPE__SWITCH_SPACING);
+			spacingButton.setTitle(connector.getState().descriptionSpacing);
+			root.add(spacingButton);
+			spacingButton.setClickHandler(connector);
+		}
+
+		if (connector.getState().supportsEditable) {
+			editableButton = new OButtonWidget();
+			editableButton.addStyleName(OIConstants.EVENT_TYPE__SWITCH_EDITABLE);
+			editableButton.setCustomEventType(OIConstants.EVENT_TYPE__SWITCH_EDITABLE);
+			editableButton.setTitle(connector.getState().descriptionEditable);
+			root.add(editableButton);
+			editableButton.setClickHandler(connector);
+		}
+
+		if (connector.getState().supportsRemove) {
+			removeButton = new OButtonWidget();
+			removeButton.addStyleName(OIConstants.EVENT_TYPE__REMOVE_CHILD);
+			removeButton.setCustomEventType(OIConstants.EVENT_TYPE__REMOVE_CHILD);
+			removeButton.setTitle(connector.getState().descriptionRemove);
+			root.add(removeButton);
+			removeButton.setClickHandler(connector);
+		}
+
+		if (connector.getState().supportsAdd) {
+			addButton = new OButtonWidget();
+			addButton.addStyleName(OIConstants.EVENT_TYPE__ADD_CHILD);
+			addButton.setCustomEventType(OIConstants.EVENT_TYPE__ADD_CHILD);
+			addButton.setTitle(connector.getState().descriptionAdd);
+			root.add(addButton);
+			addButton.setClickHandler(connector);
+		}
+
+		if (connector.getState().supportsPropertiesDialog) {
+			openPropertiesButton = new OButtonWidget();
+			openPropertiesButton.addStyleName(OIConstants.EVENT_TYPE__OPEN_PROPERTIES);
+			openPropertiesButton.setCustomEventType(OIConstants.EVENT_TYPE__OPEN_PROPERTIES);
+			openPropertiesButton.setTitle(connector.getState().descriptionPropertiesDialog);
+			root.add(openPropertiesButton);
+			openPropertiesButton.setClickHandler(connector);
+		}
+	}
+
+	/**
+	 * Sets the connector.
+	 *
+	 * @param connector the new connector
+	 */
+	public void setConnector(DesignerExtensionConnector connector) {
+		initialize(connector);
+	}
+
+	/**
+	 * Sets the alignment info.
+	 *
+	 * @param alignment the new alignment info
+	 */
+	public void setAlignmentInfo(AlignmentInfo alignment) {
+		if(alignmentWidget != null) {
+			alignmentWidget.setAlignmentInfo(alignment);
+		}
+	}
+
+	/**
+	 * Destroy.
+	 */
+	public void destroy() {
+		if (alignmentWidget != null) {
+			alignmentWidget.destroy();
+		}
+		if (editableButton != null) {
+			editableButton.destroy();
+		}
+		if (removeButton != null) {
+			removeButton.destroy();
+		}
+		if (addButton != null) {
+			addButton.destroy();
+		}
+		if (openPropertiesButton != null) {
+			openPropertiesButton.destroy();
+		}
+		if (spacingButton != null) {
+			spacingButton.destroy();
+		}
+		if (marginButton != null) {
+			marginButton.destroy();
+		}
+	}
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/OIConstants.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/OIConstants.java
new file mode 100644
index 0000000..be52a95
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/OIConstants.java
@@ -0,0 +1,41 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface OIConstants.
+ */
+public interface OIConstants {
+
+	/** The Constant EVENT_TYPE__REMOVE_CHILD. */
+	// layout child properties
+	public static final String EVENT_TYPE__REMOVE_CHILD = "removeChild";
+	
+	/** The Constant EVENT_TYPE__ADD_CHILD. */
+	public static final String EVENT_TYPE__ADD_CHILD = "addChild";
+	
+	/** The Constant EVENT_TYPE__SWITCH_EDITABLE. */
+	public static final String EVENT_TYPE__SWITCH_EDITABLE = "switchEditable";
+	
+	/** The Constant EVENT_TYPE__OPEN_PROPERTIES. */
+	public static final String EVENT_TYPE__OPEN_PROPERTIES = "openProperties";
+
+	/** The Constant EVENT_TYPE__SWITCH_MARGIN. */
+	// layout properties
+	public static final String EVENT_TYPE__SWITCH_MARGIN = "switchMargin";
+	
+	/** The Constant EVENT_TYPE__SWITCH_SPACING. */
+	public static final String EVENT_TYPE__SWITCH_SPACING = "switchSpacing";
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/AlignmentInfo.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/AlignmentInfo.java
new file mode 100644
index 0000000..f0ea1da
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/AlignmentInfo.java
@@ -0,0 +1,125 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Alignment enum with FILL literals.
+ */
+public enum AlignmentInfo {
+	
+	/** The bottom left. */
+	BOTTOM_LEFT, 
+ /** The bottom center. */
+ BOTTOM_CENTER, 
+ /** The bottom right. */
+ BOTTOM_RIGHT, 
+ /** The bottom fill. */
+ BOTTOM_FILL, 
+ /** The middle left. */
+ MIDDLE_LEFT, 
+ /** The middle center. */
+ MIDDLE_CENTER, 
+ /** The middle right. */
+ MIDDLE_RIGHT, 
+ /** The middle fill. */
+ MIDDLE_FILL, 
+ /** The top left. */
+ TOP_LEFT, 
+ /** The top center. */
+ TOP_CENTER, 
+ /** The top right. */
+ TOP_RIGHT, 
+ /** The top fill. */
+ TOP_FILL, 
+ /** The fill fill. */
+ FILL_FILL, 
+ /** The fill left. */
+ FILL_LEFT, 
+ /** The fill center. */
+ FILL_CENTER, 
+ /** The fill right. */
+ FILL_RIGHT;
+
+	/**
+	 * Checks if is top.
+	 *
+	 * @return true, if is top
+	 */
+	public boolean isTop() {
+		return this == TOP_LEFT || this == TOP_CENTER || this == TOP_RIGHT || this == TOP_FILL;
+	}
+
+	/**
+	 * Checks if is middle.
+	 *
+	 * @return true, if is middle
+	 */
+	public boolean isMiddle() {
+		return this == MIDDLE_LEFT || this == MIDDLE_CENTER || this == MIDDLE_RIGHT || this == MIDDLE_FILL;
+	}
+
+	/**
+	 * Checks if is bottom.
+	 *
+	 * @return true, if is bottom
+	 */
+	public boolean isBottom() {
+		return this == BOTTOM_LEFT || this == BOTTOM_CENTER || this == BOTTOM_RIGHT || this == BOTTOM_FILL;
+	}
+
+	/**
+	 * Checks if is left.
+	 *
+	 * @return true, if is left
+	 */
+	public boolean isLeft() {
+		return this == TOP_LEFT || this == MIDDLE_LEFT || this == BOTTOM_LEFT || this == FILL_LEFT;
+	}
+
+	/**
+	 * Checks if is center.
+	 *
+	 * @return true, if is center
+	 */
+	public boolean isCenter() {
+		return this == TOP_CENTER || this == MIDDLE_CENTER || this == BOTTOM_CENTER || this == FILL_CENTER;
+	}
+
+	/**
+	 * Checks if is right.
+	 *
+	 * @return true, if is right
+	 */
+	public boolean isRight() {
+		return this == TOP_RIGHT || this == MIDDLE_RIGHT || this == BOTTOM_RIGHT || this == FILL_RIGHT;
+	}
+
+	/**
+	 * Checks if is horizontal fill.
+	 *
+	 * @return true, if is horizontal fill
+	 */
+	public boolean isHorizontalFill() {
+		return this == TOP_FILL || this == MIDDLE_FILL || this == BOTTOM_FILL || this == FILL_FILL;
+	}
+
+	/**
+	 * Checks if is vertical fill.
+	 *
+	 * @return true, if is vertical fill
+	 */
+	public boolean isVerticalFill() {
+		return this == FILL_LEFT || this == FILL_CENTER || this == FILL_RIGHT || this == FILL_FILL;
+	}
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentChangedEvent.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentChangedEvent.java
new file mode 100644
index 0000000..607aab7
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentChangedEvent.java
@@ -0,0 +1,73 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class OAlignmentChangedEvent.
+ */
+public class OAlignmentChangedEvent extends GwtEvent<OAlignmentChangedHandler> {
+
+	/**
+	 * Event type for alignment change events.
+	 */
+	private static final Type<OAlignmentChangedHandler> TYPE = new Type<OAlignmentChangedHandler>();
+
+	/** The alignment. */
+	private final AlignmentInfo alignment;
+
+	/**
+	 * Instantiates a new o alignment changed event.
+	 *
+	 * @param alignment the alignment
+	 */
+	public OAlignmentChangedEvent(AlignmentInfo alignment) {
+		this.alignment = alignment;
+	}
+
+	/**
+	 * Gets the alignment.
+	 *
+	 * @return the alignment
+	 */
+	public AlignmentInfo getAlignment() {
+		return alignment;
+	}
+
+	/**
+	 * Gets the type.
+	 *
+	 * @return the type
+	 */
+	public static Type<OAlignmentChangedHandler> getType() {
+		return TYPE;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType()
+	 */
+	@Override
+	public final Type<OAlignmentChangedHandler> getAssociatedType() {
+		return TYPE;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler)
+	 */
+	@Override
+	protected void dispatch(OAlignmentChangedHandler handler) {
+		handler.onAlignmentChanged(this);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentChangedHandler.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentChangedHandler.java
new file mode 100644
index 0000000..2415fb7
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentChangedHandler.java
@@ -0,0 +1,30 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+import com.google.gwt.event.shared.EventHandler;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Gets informed about the event.
+ */
+public interface OAlignmentChangedHandler extends EventHandler {
+
+	/**
+	 * Is called if the alignment changes.
+	 *
+	 * @param event the event
+	 */
+	void onAlignmentChanged(OAlignmentChangedEvent event);
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentWidget.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentWidget.java
new file mode 100644
index 0000000..1cf651f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OAlignmentWidget.java
@@ -0,0 +1,433 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.dom.client.EventTarget;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.EventListener;
+import com.google.gwt.user.client.ui.SimplePanel;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A widget which shows alignment of components.
+ */
+public class OAlignmentWidget extends SimplePanel {
+
+	/** The Constant O_SELECTED. */
+	private static final String O_SELECTED = "o-selected";
+
+	/** The Constant CLASSNAME. */
+	private static final String CLASSNAME = "o-alignment-widget";
+
+	/** The alignment div. */
+	// contains the single alignment buttons and also the fill buttons
+	private Element alignmentDiv = DOM.createDiv();
+	
+	/** The alignment single div. */
+	// contains the single alignment button without fill buttons
+	private Element alignmentSingleDiv = DOM.createDiv();
+	
+	/** The al_top_left_ div. */
+	private Element al_top_left_Div = DOM.createDiv();
+	
+	/** The al_top_center_ div. */
+	private Element al_top_center_Div = DOM.createDiv();
+	
+	/** The al_top_right_ div. */
+	private Element al_top_right_Div = DOM.createDiv();
+	
+	/** The al_middle_left_ div. */
+	private Element al_middle_left_Div = DOM.createDiv();
+	
+	/** The al_middle_center_ div. */
+	private Element al_middle_center_Div = DOM.createDiv();
+	
+	/** The al_middle_right_ div. */
+	private Element al_middle_right_Div = DOM.createDiv();
+	
+	/** The al_bottom_left_ div. */
+	private Element al_bottom_left_Div = DOM.createDiv();
+	
+	/** The al_bottom_center_ div. */
+	private Element al_bottom_center_Div = DOM.createDiv();
+	
+	/** The al_bottom_right_ div. */
+	private Element al_bottom_right_Div = DOM.createDiv();
+
+	/** The selected single div. */
+	private Element selectedSingleDiv;
+
+	/** The handler. */
+	private OAlignmentChangedHandler handler;
+
+	/** The al_v_fill_ div. */
+	// fill divs
+	private Element al_v_fill_Div = DOM.createDiv();
+	
+	/** The al_h_fill_ div. */
+	private Element al_h_fill_Div = DOM.createDiv();
+
+	/**
+	 * Instantiates a new o alignment widget.
+	 */
+	public OAlignmentWidget() {
+		getElement().setClassName(CLASSNAME);
+		initDOM();
+	}
+
+	/**
+	 * Inits the dom.
+	 */
+	private void initDOM() {
+		initializeAlignmentDivs();
+	}
+
+	/**
+	 * Initialize alignment divs.
+	 */
+	private void initializeAlignmentDivs() {
+
+		getElement().appendChild(alignmentDiv);
+
+		alignmentDiv.appendChild(alignmentSingleDiv);
+		alignmentSingleDiv.appendChild(al_top_left_Div);
+		alignmentSingleDiv.appendChild(al_top_center_Div);
+		alignmentSingleDiv.appendChild(al_top_right_Div);
+		alignmentSingleDiv.appendChild(al_middle_left_Div);
+		alignmentSingleDiv.appendChild(al_middle_center_Div);
+		alignmentSingleDiv.appendChild(al_middle_right_Div);
+		alignmentSingleDiv.appendChild(al_bottom_left_Div);
+		alignmentSingleDiv.appendChild(al_bottom_center_Div);
+		alignmentSingleDiv.appendChild(al_bottom_right_Div);
+
+		alignmentDiv.appendChild(al_h_fill_Div);
+		alignmentDiv.appendChild(al_v_fill_Div);
+
+		alignmentDiv.setClassName("alignment");
+		alignmentSingleDiv.setClassName("singles");
+
+		al_top_left_Div.setClassName("topleft");
+		al_top_center_Div.setClassName("topcenter");
+		al_top_right_Div.setClassName("topright");
+		al_middle_left_Div.setClassName("middleleft");
+		al_middle_center_Div.setClassName("middlecenter");
+		al_middle_right_Div.setClassName("middleright");
+		al_bottom_left_Div.setClassName("bottomleft");
+		al_bottom_center_Div.setClassName("bottomcenter");
+		al_bottom_right_Div.setClassName("bottomright");
+
+		al_h_fill_Div.setClassName("hfill");
+		al_v_fill_Div.setClassName("vfill");
+
+		Event.sinkEvents(al_top_left_Div, Event.ONCLICK);
+		Event.sinkEvents(al_top_center_Div, Event.ONCLICK);
+		Event.sinkEvents(al_top_right_Div, Event.ONCLICK);
+		Event.sinkEvents(al_middle_left_Div, Event.ONCLICK);
+		Event.sinkEvents(al_middle_center_Div, Event.ONCLICK);
+		Event.sinkEvents(al_middle_right_Div, Event.ONCLICK);
+		Event.sinkEvents(al_bottom_left_Div, Event.ONCLICK);
+		Event.sinkEvents(al_bottom_center_Div, Event.ONCLICK);
+		Event.sinkEvents(al_bottom_right_Div, Event.ONCLICK);
+
+		Event.sinkEvents(al_h_fill_Div, Event.ONCLICK);
+		Event.sinkEvents(al_v_fill_Div, Event.ONCLICK);
+
+		/*
+		 * Listener to get information about clicked divs.
+		 */
+		EventListener alignmentEvents = new EventListener() {
+			@Override
+			public void onBrowserEvent(Event event) {
+				EventTarget target = event.getCurrentEventTarget();
+				Element element = Element.as(target);
+
+				if (element == al_h_fill_Div || element == al_v_fill_Div) {
+					if (element.hasClassName(O_SELECTED)) {
+						element.removeClassName(O_SELECTED);
+					} else {
+						element.addClassName(O_SELECTED);
+					}
+				} else {
+					selectedSingleDiv = element;
+				}
+
+				AlignmentInfo newAlignment = calcAlignmentInfoFromSelection();
+				setAlignmentInfo(newAlignment);
+
+				if (handler != null) {
+					handler.onAlignmentChanged(new OAlignmentChangedEvent(newAlignment));
+				}
+			}
+		};
+
+		Event.setEventListener(al_top_left_Div, alignmentEvents);
+		Event.setEventListener(al_top_center_Div, alignmentEvents);
+		Event.setEventListener(al_top_right_Div, alignmentEvents);
+		Event.setEventListener(al_middle_left_Div, alignmentEvents);
+		Event.setEventListener(al_middle_center_Div, alignmentEvents);
+		Event.setEventListener(al_middle_right_Div, alignmentEvents);
+		Event.setEventListener(al_bottom_left_Div, alignmentEvents);
+		Event.setEventListener(al_bottom_center_Div, alignmentEvents);
+		Event.setEventListener(al_bottom_right_Div, alignmentEvents);
+
+		Event.setEventListener(al_h_fill_Div, alignmentEvents);
+		Event.setEventListener(al_v_fill_Div, alignmentEvents);
+
+		setAlignmentInfo(AlignmentInfo.TOP_LEFT);
+	}
+
+	/**
+	 * Calculates the {@link AlignmentInfo} for ui selections.
+	 *
+	 * @return the alignment info
+	 */
+	protected AlignmentInfo calcAlignmentInfoFromSelection() {
+		boolean isFillHorizontal = isFillHorizontalSelected();
+		boolean isFillVertical = isFillVerticalSelected();
+
+		if (isFillHorizontal && isFillVertical) {
+			return AlignmentInfo.FILL_FILL;
+		}
+
+		AlignmentInfo singleInfo = getSingleDivAlignment();
+		if (singleInfo == null) {
+			singleInfo = AlignmentInfo.TOP_LEFT;
+		}
+		if (!isFillHorizontal && !isFillVertical) {
+			return singleInfo;
+		}
+
+		if (isFillHorizontal) {
+			if (singleInfo.isTop()) {
+				return AlignmentInfo.TOP_FILL;
+			} else if (singleInfo.isMiddle()) {
+				return AlignmentInfo.MIDDLE_FILL;
+			} else if (singleInfo.isBottom()) {
+				return AlignmentInfo.BOTTOM_FILL;
+			}
+		} else if (isFillVertical) {
+			if (singleInfo.isLeft()) {
+				return AlignmentInfo.FILL_LEFT;
+			} else if (singleInfo.isCenter()) {
+				return AlignmentInfo.FILL_CENTER;
+			} else if (singleInfo.isRight()) {
+				return AlignmentInfo.FILL_RIGHT;
+			}
+		}
+
+		return AlignmentInfo.TOP_FILL;
+	}
+
+	/**
+	 * Resets all alignment infos.
+	 */
+	private void clearAll() {
+		clearSingleElements();
+		al_h_fill_Div.removeClassName(O_SELECTED);
+		al_v_fill_Div.removeClassName(O_SELECTED);
+	}
+
+	/**
+	 * Resets all alignment infos except h_fill and v_fill.
+	 */
+	private void clearSingleElements() {
+		al_top_left_Div.removeClassName(O_SELECTED);
+		al_top_center_Div.removeClassName(O_SELECTED);
+		al_top_right_Div.removeClassName(O_SELECTED);
+		al_middle_left_Div.removeClassName(O_SELECTED);
+		al_middle_center_Div.removeClassName(O_SELECTED);
+		al_middle_right_Div.removeClassName(O_SELECTED);
+		al_bottom_left_Div.removeClassName(O_SELECTED);
+		al_bottom_center_Div.removeClassName(O_SELECTED);
+		al_bottom_right_Div.removeClassName(O_SELECTED);
+	}
+
+	/**
+	 * Sets the alignment info.
+	 *
+	 * @param alignmentInfo the new alignment info
+	 */
+	public void setAlignmentInfo(AlignmentInfo alignmentInfo) {
+
+		if (alignmentInfo == null) {
+			alignmentInfo = AlignmentInfo.TOP_LEFT;
+		}
+
+		clearAll();
+
+		switch (alignmentInfo) {
+		case BOTTOM_CENTER:
+			al_bottom_center_Div.addClassName(O_SELECTED);
+			break;
+		case BOTTOM_FILL:
+			al_h_fill_Div.addClassName(O_SELECTED);
+			al_bottom_left_Div.addClassName(O_SELECTED);
+			al_bottom_center_Div.addClassName(O_SELECTED);
+			al_bottom_right_Div.addClassName(O_SELECTED);
+			break;
+		case BOTTOM_LEFT:
+			al_bottom_left_Div.addClassName(O_SELECTED);
+			break;
+		case BOTTOM_RIGHT:
+			al_bottom_right_Div.addClassName(O_SELECTED);
+			break;
+		case FILL_CENTER:
+			al_v_fill_Div.addClassName(O_SELECTED);
+			al_top_center_Div.addClassName(O_SELECTED);
+			al_middle_center_Div.addClassName(O_SELECTED);
+			al_bottom_center_Div.addClassName(O_SELECTED);
+			break;
+		case FILL_FILL:
+			al_v_fill_Div.addClassName(O_SELECTED);
+			al_h_fill_Div.addClassName(O_SELECTED);
+			al_top_left_Div.addClassName(O_SELECTED);
+			al_top_center_Div.addClassName(O_SELECTED);
+			al_top_right_Div.addClassName(O_SELECTED);
+			al_middle_left_Div.addClassName(O_SELECTED);
+			al_middle_center_Div.addClassName(O_SELECTED);
+			al_middle_right_Div.addClassName(O_SELECTED);
+			al_bottom_left_Div.addClassName(O_SELECTED);
+			al_bottom_center_Div.addClassName(O_SELECTED);
+			al_bottom_right_Div.addClassName(O_SELECTED);
+			break;
+		case FILL_LEFT:
+			al_v_fill_Div.addClassName(O_SELECTED);
+			al_top_left_Div.addClassName(O_SELECTED);
+			al_middle_left_Div.addClassName(O_SELECTED);
+			al_bottom_left_Div.addClassName(O_SELECTED);
+			break;
+		case FILL_RIGHT:
+			al_v_fill_Div.addClassName(O_SELECTED);
+			al_top_right_Div.addClassName(O_SELECTED);
+			al_middle_right_Div.addClassName(O_SELECTED);
+			al_bottom_right_Div.addClassName(O_SELECTED);
+			break;
+		case MIDDLE_CENTER:
+			al_middle_center_Div.addClassName(O_SELECTED);
+			break;
+		case MIDDLE_FILL:
+			al_h_fill_Div.addClassName(O_SELECTED);
+			al_middle_left_Div.addClassName(O_SELECTED);
+			al_middle_center_Div.addClassName(O_SELECTED);
+			al_middle_right_Div.addClassName(O_SELECTED);
+			break;
+		case MIDDLE_LEFT:
+			al_middle_left_Div.addClassName(O_SELECTED);
+			break;
+		case MIDDLE_RIGHT:
+			al_middle_right_Div.addClassName(O_SELECTED);
+			break;
+		case TOP_CENTER:
+			al_top_center_Div.addClassName(O_SELECTED);
+			break;
+		case TOP_FILL:
+			al_h_fill_Div.addClassName(O_SELECTED);
+			al_top_left_Div.addClassName(O_SELECTED);
+			al_top_center_Div.addClassName(O_SELECTED);
+			al_top_right_Div.addClassName(O_SELECTED);
+			break;
+		case TOP_LEFT:
+			al_top_left_Div.addClassName(O_SELECTED);
+			break;
+		case TOP_RIGHT:
+			al_top_right_Div.addClassName(O_SELECTED);
+			break;
+		}
+	}
+
+	/**
+	 * Gets the single div alignment.
+	 *
+	 * @return the single div alignment
+	 */
+	protected AlignmentInfo getSingleDivAlignment() {
+		if (selectedSingleDiv == null) {
+			return null;
+		}
+
+		if (selectedSingleDiv == al_top_left_Div) {
+			return AlignmentInfo.TOP_LEFT;
+		} else if (selectedSingleDiv == al_top_center_Div) {
+			return AlignmentInfo.TOP_CENTER;
+		} else if (selectedSingleDiv == al_top_right_Div) {
+			return AlignmentInfo.TOP_RIGHT;
+		} else if (selectedSingleDiv == al_middle_left_Div) {
+			return AlignmentInfo.MIDDLE_LEFT;
+		} else if (selectedSingleDiv == al_middle_center_Div) {
+			return AlignmentInfo.MIDDLE_CENTER;
+		} else if (selectedSingleDiv == al_middle_right_Div) {
+			return AlignmentInfo.MIDDLE_RIGHT;
+		} else if (selectedSingleDiv == al_bottom_left_Div) {
+			return AlignmentInfo.BOTTOM_LEFT;
+		} else if (selectedSingleDiv == al_bottom_center_Div) {
+			return AlignmentInfo.BOTTOM_CENTER;
+		} else if (selectedSingleDiv == al_bottom_right_Div) {
+			return AlignmentInfo.BOTTOM_RIGHT;
+		}
+		return null;
+	}
+
+	/**
+	 * Checks if is fill horizontal selected.
+	 *
+	 * @return true, if is fill horizontal selected
+	 */
+	protected boolean isFillHorizontalSelected() {
+		return al_h_fill_Div.hasClassName(O_SELECTED);
+	}
+
+	/**
+	 * Checks if is fill vertical selected.
+	 *
+	 * @return true, if is fill vertical selected
+	 */
+	protected boolean isFillVerticalSelected() {
+		return al_v_fill_Div.hasClassName(O_SELECTED);
+	}
+
+	/**
+	 * Gets the alignment changed handler.
+	 *
+	 * @return the alignment changed handler
+	 */
+	public OAlignmentChangedHandler getAlignmentChangedHandler() {
+		return handler;
+	}
+
+	/**
+	 * Sets the alignment changed handler.
+	 *
+	 * @param handler the new alignment changed handler
+	 */
+	public void setAlignmentChangedHandler(OAlignmentChangedHandler handler) {
+		this.handler = handler;
+	}
+
+	/**
+	 * Destroy.
+	 */
+	public void destroy() {
+		Event.setEventListener(al_top_left_Div, null);
+		Event.setEventListener(al_top_center_Div, null);
+		Event.setEventListener(al_top_right_Div, null);
+		Event.setEventListener(al_middle_left_Div, null);
+		Event.setEventListener(al_middle_center_Div, null);
+		Event.setEventListener(al_middle_right_Div, null);
+		Event.setEventListener(al_bottom_left_Div, null);
+		Event.setEventListener(al_bottom_center_Div, null);
+		Event.setEventListener(al_bottom_right_Div, null);
+	}
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonClickEvent.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonClickEvent.java
new file mode 100644
index 0000000..2bc06a0
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonClickEvent.java
@@ -0,0 +1,87 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+import com.google.gwt.event.shared.GwtEvent;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class OButtonClickEvent.
+ */
+public class OButtonClickEvent extends GwtEvent<OButtonClickHandler> {
+
+	/**
+	 * Event type for resize end events.
+	 */
+	private static final Type<OButtonClickHandler> TYPE = new Type<OButtonClickHandler>();
+	
+	/** The widget. */
+	private final OButtonWidget widget;
+	
+	/** The custom event type. */
+	private final String customEventType;
+
+	/**
+	 * Instantiates a new o button click event.
+	 *
+	 * @param widget the widget
+	 * @param customEventType the custom event type
+	 */
+	public OButtonClickEvent(OButtonWidget widget, String customEventType) {
+		this.widget = widget;
+		this.customEventType = customEventType;
+	}
+
+	/**
+	 * Gets the widget.
+	 *
+	 * @return the widget
+	 */
+	public OButtonWidget getWidget() {
+		return widget;
+	}
+
+	/**
+	 * Gets the custom event type.
+	 *
+	 * @return the custom event type
+	 */
+	public String getCustomEventType() {
+		return customEventType;
+	}
+
+	/**
+	 * Gets the event type associated with resize end events.
+	 *
+	 * @return the handler type
+	 */
+	public static Type<OButtonClickHandler> getType() {
+		return TYPE;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.google.gwt.event.shared.GwtEvent#getAssociatedType()
+	 */
+	@Override
+	public final Type<OButtonClickHandler> getAssociatedType() {
+		return TYPE;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.google.gwt.event.shared.GwtEvent#dispatch(com.google.gwt.event.shared.EventHandler)
+	 */
+	@Override
+	protected void dispatch(OButtonClickHandler handler) {
+		handler.clicked(this);
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonClickHandler.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonClickHandler.java
new file mode 100644
index 0000000..2ed584e
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonClickHandler.java
@@ -0,0 +1,30 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+import com.google.gwt.event.shared.EventHandler;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface OButtonClickHandler.
+ */
+public interface OButtonClickHandler extends EventHandler {
+
+	/**
+	 * Clicked.
+	 *
+	 * @param event the event
+	 */
+	void clicked(OButtonClickEvent event);
+
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonWidget.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonWidget.java
new file mode 100644
index 0000000..c5f5e84
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OButtonWidget.java
@@ -0,0 +1,125 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+import com.google.gwt.event.dom.client.ClickEvent;
+import com.google.gwt.event.dom.client.ClickHandler;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.Event;
+import com.google.gwt.user.client.ui.Button;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class OButtonWidget.
+ */
+public class OButtonWidget extends Button implements ClickHandler {
+
+	/** The Constant CLASSNAME. */
+	private static final String CLASSNAME = "o-button-widget";
+
+	/** The handler. */
+	private OButtonClickHandler handler;
+
+	/** The click pending. */
+	private boolean clickPending;
+
+	/** The custom event type. */
+	private String customEventType;
+	
+	/**
+	 * Instantiates a new o button widget.
+	 */
+	public OButtonWidget() {
+		getElement().setClassName(CLASSNAME);
+		initDOM();
+	}
+
+	/**
+	 * Inits the dom.
+	 */
+	private void initDOM() {
+		addClickHandler(this);
+		sinkEvents(Event.ONMOUSEDOWN | Event.ONLOAD | Event.ONMOUSEMOVE);
+	}
+
+	/**
+	 * Gets the click handler.
+	 *
+	 * @return the click handler
+	 */
+	public OButtonClickHandler getClickHandler() {
+		return handler;
+	}
+
+	/**
+	 * Sets the click handler.
+	 *
+	 * @param handler the new click handler
+	 */
+	public void setClickHandler(OButtonClickHandler handler) {
+		this.handler = handler;
+	}
+	
+	/**
+	 * Gets the custom event type.
+	 *
+	 * @return the custom event type
+	 */
+	public String getCustomEventType() {
+		return customEventType;
+	}
+
+	/**
+	 * Sets the custom event type.
+	 *
+	 * @param customEventType the new custom event type
+	 */
+	public void setCustomEventType(String customEventType) {
+		this.customEventType = customEventType;
+	}
+
+	/**
+	 * Destroy.
+	 */
+	public void destroy() {
+	}
+
+	/* (non-Javadoc)
+	 * @see com.google.gwt.event.dom.client.ClickHandler#onClick(com.google.gwt.event.dom.client.ClickEvent)
+	 */
+	@Override
+	public void onClick(ClickEvent event) {
+		if (clickPending) {
+			handler.clicked(new OButtonClickEvent(this, customEventType));
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see com.google.gwt.user.client.ui.Widget#onBrowserEvent(com.google.gwt.user.client.Event)
+	 */
+	@Override
+	public void onBrowserEvent(Event event) {
+		super.onBrowserEvent(event);
+
+		if (DOM.eventGetType(event) == Event.ONMOUSEDOWN && event.getButton() == Event.BUTTON_LEFT) {
+			clickPending = true;
+		} else if (DOM.eventGetType(event) == Event.ONMOUSEMOVE) {
+			clickPending = false;
+		} else if (DOM.eventGetType(event) == Event.ONMOUSEOUT) {
+			if (clickPending) {
+				click();
+			}
+			clickPending = false;
+		}
+	}
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OOverlayController.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OOverlayController.java
new file mode 100644
index 0000000..a5a25d1
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/client/widgets/OOverlayController.java
@@ -0,0 +1,174 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay.client.widgets;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Stack;
+
+import org.eclipse.osbp.vaadin.addons.designer.overlay.client.OAbstractOverlay;
+
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.user.client.ui.Widget;
+
+/**
+ * Controls, that only one overlay is opened at a time. The delay for closing
+ * the overlay is too long to avoid multiple overlays.
+ */
+public class OOverlayController {
+
+	/** The Constant instance. */
+	private static final OOverlayController instance = new OOverlayController();
+
+	/**
+	 * Gets the single instance of OOverlayController.
+	 *
+	 * @return single instance of OOverlayController
+	 */
+	public static OOverlayController getInstance() {
+		return instance;
+	}
+
+	/** The show timer. */
+	// private Timer showTimer;
+
+	/** The current opened. */
+	private OAbstractOverlay currentOpened;
+
+	private Map<Element, OAbstractOverlay> map = new HashMap<>();
+	private Stack<Element> navigationStack = new Stack<>();
+
+	/**
+	 * Instantiates a new o overlay controller.
+	 */
+	private OOverlayController() {
+
+	}
+
+	/**
+	 * Registers the element with the overlay. This is required to use arrow UP
+	 * to navigate to the next higher overlay in the element hierarchy.
+	 * 
+	 * @param element
+	 * @param overlay
+	 */
+	public void register(Element element, OAbstractOverlay overlay) {
+		map.put(element, overlay);
+	}
+
+	/**
+	 * Unregisters the element with its overlay.
+	 * 
+	 * @param element
+	 */
+	public void unregister(Element element) {
+		map.remove(element);
+	}
+
+	/**
+	 * Uses the current opened overlay and navigates up the element hierarchy
+	 * until an element associated with an overlay could be found. This overlay
+	 * will be shown.
+	 */
+	public void navigateUp() {
+		if (currentOpened == null) {
+			navigationStack.clear();
+			return;
+		}
+
+		Element element = currentOpened.getOwner().getElement();
+		OAbstractOverlay nextHigher = findOverlayInParent(element);
+		if (nextHigher != null) {
+			navigationStack.push(element);
+			Widget widget = nextHigher.getOwner();
+			show(nextHigher, widget.getElement().getAbsoluteLeft(), widget.getElement().getAbsoluteTop(), false);
+		}
+	}
+
+	/**
+	 * Uses the current opened overlay and navigates down the last opened
+	 * overlays.
+	 */
+	public void navigateDown() {
+		if (currentOpened == null || navigationStack.isEmpty()) {
+			navigationStack.clear();
+			return;
+		}
+
+		Element lastElement = navigationStack.pop();
+		if (lastElement != null) {
+			show(map.get(lastElement), lastElement.getAbsoluteLeft(), lastElement.getAbsoluteTop(), false);
+		}
+	}
+
+	private OAbstractOverlay findOverlayInParent(Element element) {
+		Element parent = element.getParentElement();
+		if (parent == null) {
+			return null;
+		}
+		if (map.containsKey(parent)) {
+			return map.get(parent);
+		}
+
+		return findOverlayInParent(parent);
+	}
+
+	/**
+	 * Notifies the controller, that a new overlay is about to show. The
+	 * controller will ensure, that a currently opened overlay will be closed
+	 * Immediately.
+	 *
+	 * @param overlay
+	 *            the overlay
+	 * @param left
+	 *            the left
+	 * @param top
+	 *            the top
+	 */
+	public void show(OAbstractOverlay overlay, int left, int top) {
+		show(overlay, left, top, true);
+	}
+
+	private void show(OAbstractOverlay overlay, int left, int top, boolean clearStack) {
+		if (clearStack) {
+			navigationStack.clear();
+		}
+
+		if (currentOpened == overlay && currentOpened.isShowing()) {
+			return;
+		}
+
+		if (currentOpened != null) {
+			currentOpened.hide();
+		}
+
+		overlay.setPopupPosition(left, top);
+		currentOpened = overlay;
+
+		if (currentOpened != null) {
+			currentOpened.show();
+		}
+	}
+
+	/**
+	 * Closes the currently opened overlay.
+	 */
+	public void close() {
+		navigationStack.clear();
+		if (currentOpened != null) {
+			currentOpened.hide();
+			currentOpened = null;
+		}
+	}
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/add.png b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/add.png
new file mode 100644
index 0000000..64c8a86
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/add.png
Binary files differ
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/delete.gif b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/delete.gif
new file mode 100644
index 0000000..2ff6678
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/delete.gif
Binary files differ
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/edit_properties.gif b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/edit_properties.gif
new file mode 100644
index 0000000..94eedf6
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/edit_properties.gif
Binary files differ
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/margin.gif b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/margin.gif
new file mode 100644
index 0000000..9be7aa5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/margin.gif
Binary files differ
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/openProperties.gif b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/openProperties.gif
new file mode 100644
index 0000000..1dc19a3
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/openProperties.gif
Binary files differ
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/spacing.gif b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/spacing.gif
new file mode 100644
index 0000000..8eb28e6
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/spacing.gif
Binary files differ
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/styles.css b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/styles.css
new file mode 100644
index 0000000..3c34f1c
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/src/org/eclipse/osbp/vaadin/addons/designer/overlay/public/designer_overlay/styles.css
@@ -0,0 +1,193 @@
+.o-designer-overlay .popupContent {
+	height: 32px;
+	width: 100%;
+	display: block;
+	background-color: black;
+	/* 	border-radius: 3px; */
+	/* 	border: 2px solid black; */
+	padding: 3px;
+}
+
+.o-designer-overlayed {
+	border-radius: 3px !important;
+	border: 2px solid blue !important;
+}
+
+.o-designer-overlay .o-alignment-widget {
+	position: relative;
+	width: 32px;
+	height: 32px;
+	background-color: #efeef1;
+	float: left;
+	margin-left: 3px;
+}
+
+.o-alignment-widget .alignment {
+	top: 0px;
+	left: 0px;
+	display: block;
+	border: 1px solid white;
+	-webkit-box-sizing: border-box;
+	-moz-box-sizing: border-box;
+	height: 32px;
+	width: 32px;
+	position: absolute;
+	z-index: 10;
+}
+
+.o-alignment-widget .alignment .singles {
+	position: absolute;
+	top: 0px;
+	left: 0px;
+	bottom: 0px;
+	height: 22px;
+	width: 22px;
+	overflow: hidden;
+}
+
+.o-alignment-widget .singles .topleft, .o-alignment-widget .singles .topcenter,
+	.o-alignment-widget .singles .topright, .o-alignment-widget .singles .middleleft,
+	.o-alignment-widget .singles .middlecenter, .o-alignment-widget .singles .middleright,
+	.o-alignment-widget .singles .bottomleft, .o-alignment-widget .singles .bottomcenter,
+	.o-alignment-widget .singles .bottomright {
+	background-color: #a2a3a5;
+	height: 6px;
+	width: 6px;
+	display: block;
+	overflow: visible;
+	position: absolute;
+	z-index: 30;
+}
+
+.o-alignment-widget .singles .o-selected {
+	background-color: black;
+}
+
+.o-alignment-widget .singles .topleft {
+	top: 0px;
+	left: 0px;
+}
+
+.o-alignment-widget .singles .topcenter {
+	top: 0px;
+	left: 0px;
+	margin-left: 8px;
+}
+
+.o-alignment-widget .singles .topright {
+	top: 0px;
+	right: 0px;
+}
+
+.o-alignment-widget .singles .middleleft {
+	top: 0px;
+	left: 0px;
+	margin-top: 8px;
+}
+
+.o-alignment-widget .singles .middlecenter {
+	top: 0px;
+	margin-top: 8px;
+	left: 0px;
+	margin-left: 8px;
+}
+
+.o-alignment-widget .singles .middleright {
+	top: 0px;
+	margin-top: 8px;
+	right: 0px;
+}
+
+.o-alignment-widget .singles .bottomleft {
+	bottom: 0px;
+	left: 0px;
+}
+
+.o-alignment-widget .singles .bottomcenter {
+	bottom: 0px;
+	margin-left: 8px;
+	left: 0px;
+}
+
+.o-alignment-widget .singles .bottomright {
+	bottom: 0px;
+	right: 0px;
+}
+
+.o-alignment-widget .alignment .hfill {
+	position: absolute;
+	bottom: 0px;
+	left: 0px;
+	width: 22px;
+	height: 6px;
+	background-color: #a2a3a5;
+}
+
+.o-alignment-widget .alignment .vfill {
+	position: absolute;
+	top: 0px;
+	left: 24px;
+	width: 6px;
+	height: 22px;
+	background-color: #a2a3a5;
+}
+
+.o-alignment-widget .alignment .vfill .o-selected, .o-alignment-widget .alignment .hfill .o-selected
+	{
+	background-color: white !important;
+}
+
+.o-designer-overlay .o-button-widget {
+	position: relative;
+	overflow: hidden;
+	background-color: #efeef1;
+	background-repeat: no-repeat;
+	background-position: center;
+	border-radius: 2px;
+	border: 0px;
+	width: 20px;
+	height: 20px;
+	float: left;
+	margin-left: 3px;
+	margin-top: 6px;
+}
+
+.o-designer-overlay .v-image {
+	position: relative;
+	overflow: hidden;
+	background-color: #efeef1;
+	
+	border-style: solid;
+	border-color: silver;
+	border-width: 4px;
+	width: 30px;
+	height: 30px;
+	float: left;
+	margin-left: -3px;
+	margin-top: -3px;
+	margin-right: 8px;
+}
+
+.o-designer-overlay .switchEditable {
+	background-image: url("edit_properties.gif");
+}
+
+.o-designer-overlay .removeChild {
+	background-image: url("delete.gif");
+}
+
+.o-designer-overlay .addChild {
+	background-image: url("add.png");
+}
+
+.o-designer-overlay .openProperties {
+	background-image: url("openProperties.gif");
+}
+
+.o-designer-overlay .switchMargin {
+	background-image: url("margin.gif");
+}
+
+.o-designer-overlay .switchSpacing {
+	background-image: url("spacing.gif");
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.designer.overlay/test/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayApplicationTest.java b/org.eclipse.osbp.vaadin.addons.designer.overlay/test/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayApplicationTest.java
new file mode 100644
index 0000000..6151586
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.designer.overlay/test/org/eclipse/osbp/vaadin/addons/designer/overlay/OverlayApplicationTest.java
@@ -0,0 +1,96 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.designer.overlay;
+
+import com.vaadin.testbench.ScreenshotOnFailureRule;
+import com.vaadin.testbench.TestBenchTestCase;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.LabelElement;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.openqa.selenium.firefox.FirefoxDriver;
+import java.util.List;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * This class contains JUnit tests, which are run using Vaadin TestBench 4.
+ *
+ * To run this, first get an evaluation license from
+ * https://vaadin.com/addon/vaadin-testbench and follow the instructions at
+ * https://vaadin.com/directory/help/installing-cval-license to install it.
+ *
+ * Once the license is installed, you can run this class as a JUnit test.
+ */
+public class OverlayApplicationTest extends TestBenchTestCase {
+    @Rule
+    public ScreenshotOnFailureRule screenshotOnFailureRule =
+            new ScreenshotOnFailureRule(this, true);
+
+    @Before
+    public void setUp() throws Exception {
+        setDriver(new FirefoxDriver()); // Firefox
+
+        // To use Chrome, first install chromedriver.exe from
+        // http://chromedriver.storage.googleapis.com/index.html
+        // on your system path (e.g. C:\Windows\System32\)
+        //   setDriver(new ChromeDriver()); // Chrome
+
+        // To use Internet Explorer, first install iedriverserver.exe from
+        // http://selenium-release.storage.googleapis.com/index.html?path=2.43/
+        // on your system path (e.g. C:\Windows\System32\)
+        //   setDriver(new InternetExplorerDriver()); // IE
+
+        // To test headlessly (without a browser), first install phantomjs.exe
+        // from http://phantomjs.org/download.html on your system path
+        // (e.g. C:\Windows\System32\)
+        //   setDriver(new PhantomJSDriver()); // PhantomJS headless browser
+    }
+
+    /**
+     * Opens the URL where the application is deployed.
+     */
+    private void openTestUrl() {
+        getDriver().get("http://localhost:8080/org.eclipse.osbp.vaadin.addons.designer.overlay");
+    }
+
+    @Test
+    public void testClickButton() throws Exception {
+        openTestUrl();
+
+        // At first there should be no labels
+        assertFalse($(LabelElement.class).exists());
+
+        // Click the button
+        ButtonElement clickMeButton = $(ButtonElement.class).
+                caption("Click Me").first();
+        clickMeButton.click();
+
+        // There should now be one label
+        assertEquals(1, $(LabelElement.class).all().size());
+        // ... with the specified text
+        assertEquals("Thank you for clicking",
+                $(LabelElement.class).first().getText());
+
+        // Click the button again
+        clickMeButton.click();
+
+        // There should now be two labels
+        List<LabelElement> allLabels = $(LabelElement.class).all();
+        assertEquals(2, allLabels.size());
+        // ... and the last label should have the correct text
+        LabelElement lastLabel = allLabels.get(1);
+        assertEquals("Thank you for clicking", lastLabel.getText());
+    }
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.feature/.project b/org.eclipse.osbp.vaadin.addons.feature/.project
new file mode 100644
index 0000000..22b88ac
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.vaadin.addons.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.vaadin.addons.feature/LICENSE.txt b/org.eclipse.osbp.vaadin.addons.feature/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.feature/build.properties b/org.eclipse.osbp.vaadin.addons.feature/build.properties
new file mode 100644
index 0000000..2c61631
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/build.properties
@@ -0,0 +1,3 @@
+bin.includes = LICENSE.txt, \
+			   feature.xml,\
+               feature.properties
diff --git a/org.eclipse.osbp.vaadin.addons.feature/feature.properties b/org.eclipse.osbp.vaadin.addons.feature/feature.properties
new file mode 100644
index 0000000..40efed4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/feature.properties
@@ -0,0 +1,168 @@
+##############################################################################                                                                            
+# Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+#                                                                            
+# All rights reserved. This program and the accompanying materials           
+# are made available under the terms of the Eclipse Public License v1.0       
+# which accompanies this distribution, and is available at                  
+# http://www.eclipse.org/legal/epl-v10.html                                 
+#                                                                            
+# Contributors:   
+# Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
+##############################################################################
+# feature.properties
+# contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName =OSBP Addons for Vaadin 
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse OSBP
+
+# "description" property - description of the feature
+description=This feature provides the Vaadin addon bundles used by OSBP.
+
+# "updateSiteName" property - label for the update site
+updateSiteName=
+
+# "copyright" property - text of the "Feature Update Copyright"
+copyright=\
+Copyright (c) 2011-2016 Loetz GmbH&Co.KG \n\
+All rights reserved. This program and the accompanying materials\n\
+are made available under the terms of the Eclipse Public License v1.0\n\
+which accompanies this distribution, and is available at\n\
+http://www.eclipse.org/legal/epl-v10.html\n\
+\n\
+################ end of copyright property ####################################
+
+
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+Eclipse Foundation Software User Agreement\n\
+February 1, 2011\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the\n\
+Eclipse Foundation is provided to you under the terms and conditions of\n\
+the Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is\n\
+provided with this Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse Foundation source code\n\
+repository ("Repository") in software modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+       - Content may be structured and packaged into modules to facilitate delivering,\n\
+         extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"),\n\
+         plug-in fragments ("Fragments"), and features ("Features").\n\
+       - Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java(TM) ARchive)\n\
+         in a directory named "plugins".\n\
+       - A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material.\n\
+         Each Feature may be packaged as a sub-directory in a directory named "features".\n\
+         Within a Feature, files named "feature.xml" may contain a list of the names and version\n\
+         numbers of the Plug-ins and/or Fragments associated with that Feature.\n\
+       - Features may also include other Features ("Included Features"). Within a Feature, files\n\
+         named "feature.xml" may contain a list of the names and version numbers of Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+       - The top-level (root) directory\n\
+       - Plug-in and Fragment directories\n\
+       - Inside Plug-ins and Fragments packaged as JARs\n\
+       - Sub-directories of the directory named "src" of certain Plug-ins\n\
+       - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Provisioning Technology (as defined below), you must agree to a license ("Feature \n\
+Update License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties" found within a Feature.\n\
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the\n\
+terms and conditions (or references to such terms and conditions) that\n\
+govern your use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+       - Eclipse Distribution License Version 1.0 (available at http://www.eclipse.org/licenses/edl-v1.0.html)\n\
+       - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+       - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+       - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+       - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+       - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+\n\Use of Provisioning Technology\n\
+\n\
+The Eclipse Foundation makes available provisioning software, examples of which include,\n\
+but are not limited to, p2 and the Eclipse Update Manager ("Provisioning Technology") for\n\
+the purpose of allowing users to install software, documentation, information and/or\n\
+other materials (collectively "Installable Software"). This capability is provided with\n\
+the intent of allowing such users to install, extend and update Eclipse-based products.\n\
+Information about packaging Installable Software is available at\n\
+http://eclipse.org/equinox/p2/repository_packaging.html ("Specification").\n\
+\n\
+You may use Provisioning Technology to allow other parties to install Installable Software.\n\
+You shall be responsible for enabling the applicable license agreements relating to the\n\
+Installable Software to be presented to, and accepted by, the users of the Provisioning Technology\n\
+in accordance with the Specification. By using Provisioning Technology in such a manner and\n\
+making it available in accordance with the Specification, you further acknowledge your\n\
+agreement to, and the acquisition of all necessary rights to permit the following:\n\
+\n\
+       1. A series of actions may occur ("Provisioning Process") in which a user may execute\n\
+          the Provisioning Technology on a machine ("Target Machine") with the intent of installing,\n\
+          extending or updating the functionality of an Eclipse-based product.\n\
+       2. During the Provisioning Process, the Provisioning Technology may cause third party\n\
+          Installable Software or a portion thereof to be accessed and copied to the Target Machine.\n\
+       3. Pursuant to the Specification, you will provide to the user the terms and conditions that\n\
+          govern the use of the Installable Software ("Installable Software Agreement") and such\n\
+          Installable Software Agreement shall be accessed from the Target Machine in accordance\n\
+          with the Specification. Such Installable Software Agreement must inform the user of the\n\
+          terms and conditions that govern the Installable Software and must solicit acceptance by\n\
+          the end user in the manner prescribed in such Installable Software Agreement. Upon such\n\
+          indication of agreement by the user, the provisioning Technology will complete installation\n\
+          of the Installable Software.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use, and\n\
+re-export of encryption software, to see if this is permitted.\n\
+\n\
+Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.\n
+########### end of license property ##########################################
diff --git a/org.eclipse.osbp.vaadin.addons.feature/feature.xml b/org.eclipse.osbp.vaadin.addons.feature/feature.xml
new file mode 100644
index 0000000..853d580
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/feature.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
+-->
+<feature
+      id="org.eclipse.osbp.vaadin.addons.feature"
+      label="%featureName"
+      version="0.9.0.qualifier"
+      provider-name="%providerName">
+
+   <description>
+      %description
+   </description>
+
+   <copyright>
+      %copyright
+   </copyright>
+
+   <license url="%licenseURL">
+      %license
+   </license>
+
+   <plugin
+         id="org.eclipse.osbp.vaadin.addons.absolutelayout"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.osbp.vaadin.addons.designer.overlay"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="org.eclipse.osbp.vaadin.addons.suggesttext"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
diff --git a/org.eclipse.osbp.vaadin.addons.feature/pom.xml b/org.eclipse.osbp.vaadin.addons.feature/pom.xml
new file mode 100644
index 0000000..b4005dd
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/pom.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.eclipse.osbp.vaadin.addons</groupId>
+		<artifactId>org.eclipse.osbp.vaadin.addons.aggregator</artifactId>
+		<version>0.9.0-SNAPSHOT</version>
+		<relativePath>..</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.osbp.vaadin.addons.feature</artifactId>
+	<packaging>eclipse-feature</packaging>
+
+	<dependencies>
+		<dependency>
+			<groupId>org.eclipse.osbp.vaadin.addons</groupId>
+			<artifactId>org.eclipse.osbp.vaadin.addons.absolutelayout</artifactId>
+			<version>${project.version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.eclipse.osbp.vaadin.addons</groupId>
+			<artifactId>org.eclipse.osbp.vaadin.addons.designer.overlay</artifactId>
+			<version>${project.version}</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.eclipse.osbp.vaadin.addons</groupId>
+			<artifactId>org.eclipse.osbp.vaadin.addons.suggesttext</artifactId>
+			<version>${project.version}</version>
+			<scope>compile</scope>
+		</dependency>
+
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<!-- workaround while bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=398250 
+					is not fixed -->
+				<groupId>org.eclipse.tycho</groupId>
+				<artifactId>tycho-p2-plugin</artifactId>
+				<version>${tycho-version}</version>
+				<executions>
+					<execution>
+						<id>attached-p2-metadata</id>
+						<phase>package</phase>
+						<goals>
+							<goal>p2-metadata</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<artifactId>maven-javadoc-plugin</artifactId>
+				<configuration>
+					<skip>true</skip>
+				</configuration>
+<!-- 				<executions> -->
+<!-- 					<execution> -->
+<!-- 						<id>javadoc-jar</id> -->
+<!-- 						<phase>package</phase> -->
+<!-- 						<goals> -->
+<!-- 							<goal>jar</goal> -->
+<!-- 						</goals> -->
+<!-- 					</execution> -->
+<!-- 				</executions> -->
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/org.eclipse.osbp.vaadin.addons.feature/src/main/javadoc/README.txt b/org.eclipse.osbp.vaadin.addons.feature/src/main/javadoc/README.txt
new file mode 100644
index 0000000..831da7e
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/src/main/javadoc/README.txt
@@ -0,0 +1 @@
+Resource folder for javadoc resources.
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.feature/src/overview.html b/org.eclipse.osbp.vaadin.addons.feature/src/overview.html
new file mode 100644
index 0000000..f4a68d1
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.feature/src/overview.html
@@ -0,0 +1,9 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+	<title>OSBP Technologystack Target Platform Feature Overview</title>
+</head>
+<body>
+<p>The <b>OSBP&nbsp; Vaadin Addons </b>collects all Vaadin Addons provided by OSBP.</p>
+</body>
+</html>
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/.project b/org.eclipse.osbp.vaadin.addons.suggesttext/.project
new file mode 100644
index 0000000..0b595d2
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/.project
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.osbp.vaadin.addons.suggesttext</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>com.vaadin.integration.eclipse.widgetsetBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.babel.editor.rbeBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.sonarlint.eclipse.core.sonarlintBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
+		<nature>com.vaadin.integration.eclipse.widgetsetNature</nature>
+		<nature>org.apache.ivyde.eclipse.ivynature</nature>
+		<nature>org.eclipse.babel.editor.rbeNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/LICENSE.txt b/org.eclipse.osbp.vaadin.addons.suggesttext/LICENSE.txt
new file mode 100644
index 0000000..ff42ad4
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/LICENSE.txt
@@ -0,0 +1,161 @@
+Eclipse Public License -v 1.0
+
+THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION
+OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.
+
+1. DEFINITIONS
+
+"Contribution" means:
+
+a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
+
+b) in the case of each subsequent Contributor:
+
+i) changes to the Program, and
+
+ii) additions to the Program;
+
+where such changes and/or additions to the Program originate from and are distributed by that particular Contributor.
+A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone
+acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate
+modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not
+derivative works of the Program.
+
+"Contributor" means any person or entity that distributes the Program.
+
+"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of
+its Contribution alone or when combined with the Program.
+
+"Program" means the Contributions distributed in accordance with this Agreement.
+
+"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.
+
+2. GRANT OF RIGHTS
+
+a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute
+and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code
+form.
+
+b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the
+Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the
+combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such
+addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not
+apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.
+
+c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no
+assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity
+based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property
+rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the
+Program, it is Recipient's responsibility to acquire that license before distributing the Program.
+
+d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to
+grant the copyright license set forth in this Agreement.
+
+3. REQUIREMENTS
+
+A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:
+
+a) it complies with the terms and conditions of this Agreement; and
+
+b) its license agreement:
+
+i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including
+warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and
+fitness for a particular purpose;
+
+ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;
+
+iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any
+other party; and
+
+iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it
+in a reasonable manner on or through a medium customarily used for software exchange.
+
+When the Program is made available in source code form:
+
+a) it must be made available under this Agreement; and
+
+b) a copy of this Agreement must be included with each copy of the Program.
+
+Contributors may not remove or alter any copyright notices contained within the Program.
+
+Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution.
+
+4. COMMERCIAL DISTRIBUTION
+
+Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and
+the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes
+the Program in a commercial product offering should do so in a manner which does not create potential liability for
+other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions
+brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such
+Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual
+property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the
+Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may
+ participate in any such claim at its own expense.
+
+For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is
+then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties
+related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone.
+Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to
+those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result,
+the Commercial Contributor must pay those damages.
+
+5. NO WARRANTY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
+CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE,
+NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for
+determining the appropriateness of using and distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance
+with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.
+
+6. DISCLAIMER OF LIABILITY
+
+EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS),
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. GENERAL
+
+If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such
+provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+
+If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such
+Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such
+litigation is filed.
+
+All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such
+noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution
+of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses
+ granted by Recipient relating to the Program shall continue and survive.
+
+Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement
+is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish
+new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the
+right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the
+Agreement will be given a distinguishing version number. The Program (including Contributions) may always be
+distributed subject to the version of the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the
+new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this Agreement are reserved.
+
+This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States
+of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause
+of action arose. Each party waives its rights to a jury trial in any resulting litigation.
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/META-INF/MANIFEST.MF b/org.eclipse.osbp.vaadin.addons.suggesttext/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..ff4015e
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/META-INF/MANIFEST.MF
@@ -0,0 +1,32 @@
+Manifest-Version: 1.0
+Bnd-LastModified: 1491902111724
+Build-Jdk: 1.8.0_91
+Built-By: mollik
+Bundle-ActivationPolicy: lazy
+Bundle-Description: A parent POM aimed to set up the build of general Ma
+ ven based projects.
+Bundle-DocURL: http://www.eclipse.org/osbp
+Bundle-ManifestVersion: 2
+Bundle-Name: org.eclipse.osbp.vaadin.addons.suggesttext
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-SymbolicName: org.eclipse.osbp.vaadin.addons.suggesttext
+Bundle-Vendor: Eclipse OSBP
+Bundle-Version: 0.9.0.qualifier
+Created-By: Apache Maven Bundle Plugin
+Export-Package: org.eclipse.osbp.vaadin.addons.customcombo;version="0.9.
+ 0",org.eclipse.osbp.vaadin.addons.suggesttext;version="0.9.0",org.eclip
+ se.osbp.vaadin.addons.suggesttext.client;version="0.9.0",org.eclipse.os
+ bp.vaadin.addons.suggesttext.public.suggesttext;version="0.9.0",org.ecl
+ ipse.osbp.vaadin.addons.suggesttext.sample;version="0.9.0"
+Import-Package: com.vaadin.annotations;version="[7.7,8)",com.vaadin.clie
+ nt;version="[7.7,8)",com.vaadin.client.communication;version="[7.7,8)",
+ com.vaadin.data;version="[7.7,8)",com.vaadin.external.org.slf4j;version
+ ="[1.6,2)",com.vaadin.server;version="[7.7,8)",com.vaadin.ui;version="[
+ 7.7,8)",javax.servlet.annotation;resolution:=optional;version="[3.0,4)"
+ ,org.eclipse.osbp.vaadin.addons.suggesttext.client;version="[0.9,1)",or
+ g.junit
+Require-Bundle: com.vaadin.server;bundle-version="[7.5.7,7.7.0)",com.vaa
+ din.client;bundle-version="[7.5.7,7.7.0)",com.vaadin.shared;bundle-vers
+ ion="[7.5.7,7.7.0)",org.jsoup;bundle-version="[1.8.3,1.8.4)"
+Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
+Tool: Bnd-3.2.0.201605172007
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/META-INF/git.properties b/org.eclipse.osbp.vaadin.addons.suggesttext/META-INF/git.properties
new file mode 100644
index 0000000..c99b885
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/META-INF/git.properties
@@ -0,0 +1,14 @@
+#Generated by Git-Commit-Id-Plugin
+#Tue Apr 11 11:17:34 CEST 2017
+git.remote.origin.url=ssh\://compex@10.1.13.14/osbpgit/org.eclipse.osbp.vaadin.addons.git
+git.closest.tag.name=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39
+git.commit.id.describe-short=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39-dirty
+git.commit.time=02.02.2017 @ 18\:04\:55 MEZ
+git.commit.message.full=remove the feature from build
+git.commit.message.short=remove the feature from build
+git.commit.id.abbrev=90dd482
+git.branch=OSBP-initial-commit-2-Eclipse-4-luna
+git.closest.tag.commit.count=0
+git.commit.id.describe=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39-dirty
+git.commit.id=90dd482e5bc78cd1a404d12445cebc868ee417b0
+git.tags=OSBP-initial-commit-2-Eclipse-4-luna-2017-03-31-17-10-39
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/Person.java b/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/Person.java
new file mode 100644
index 0000000..010f373
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/Person.java
@@ -0,0 +1,55 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.sample;
+
+import java.util.UUID;
+
+public class Person {
+
+	private String uuid = UUID.randomUUID().toString();
+
+	private String firstname;
+
+	private String lastname;
+
+	public Person(String firstname, String lastname) {
+		super();
+		this.firstname = firstname;
+		this.lastname = lastname;
+	}
+
+	public String getUuid() {
+		return uuid;
+	}
+
+	public void setUuid(String uuid) {
+		this.uuid = uuid;
+	}
+
+	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;
+	}
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/PersonForUUIDMapping.java b/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/PersonForUUIDMapping.java
new file mode 100644
index 0000000..3bfe66c
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/PersonForUUIDMapping.java
@@ -0,0 +1,55 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.sample;
+
+import java.util.Date;
+
+public class PersonForUUIDMapping {
+
+	private long uuid = new Date().getTime();
+
+	private String firstname;
+
+	private String lastname;
+
+	public PersonForUUIDMapping(String firstname, String lastname) {
+		super();
+		this.firstname = firstname;
+		this.lastname = lastname;
+	}
+
+	public long getUuid() {
+		return uuid;
+	}
+
+	public void setUuid(long uuid) {
+		this.uuid = uuid;
+	}
+
+	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;
+	}
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/SuggestTextUI.java b/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/SuggestTextUI.java
new file mode 100644
index 0000000..bcdc820
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/Sample/org/eclipse/osbp/vaadin/addons/suggesttext/sample/SuggestTextUI.java
@@ -0,0 +1,259 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.sample;
+
+import javax.servlet.annotation.WebServlet;
+
+import org.eclipse.osbp.vaadin.addons.suggesttext.SuggestTextField;
+
+import com.vaadin.annotations.Theme;
+import com.vaadin.annotations.VaadinServletConfiguration;
+import com.vaadin.data.Property;
+import com.vaadin.data.Property.ValueChangeEvent;
+import com.vaadin.data.util.BeanItemContainer;
+import com.vaadin.server.VaadinRequest;
+import com.vaadin.server.VaadinServlet;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.CheckBox;
+import com.vaadin.ui.GridLayout;
+import com.vaadin.ui.HorizontalLayout;
+import com.vaadin.ui.Slider;
+import com.vaadin.ui.UI;
+import com.vaadin.ui.VerticalLayout;
+
+@SuppressWarnings("serial")
+@Theme("valo")
+public class SuggestTextUI extends UI {
+
+	@WebServlet(value = "/*", asyncSupported = true)
+	@VaadinServletConfiguration(productionMode = false, ui = SuggestTextUI.class, widgetset = "org.eclipse.osbp.vaadin.addons.suggesttext.SuggestTextWidgetset")
+	public static class Servlet extends VaadinServlet {
+	}
+
+	private GridLayout touchLayout;
+
+	@Override
+	protected void init(VaadinRequest request) {
+
+		final HorizontalLayout mainLayout = new HorizontalLayout();
+		setContent(mainLayout);
+
+		addForPerson(mainLayout);
+		addForPersonForUUIDMapping(mainLayout);
+	}
+
+	private void addForPerson(final HorizontalLayout mainLayout) {
+		final VerticalLayout layout = new VerticalLayout();
+		layout.setMargin(true);
+		mainLayout.addComponent(layout);
+
+		// create SuggestTextField
+		final SuggestTextField suggestionBox = new SuggestTextField();
+		suggestionBox.setId("suggestField1");
+		suggestionBox.getTextField().setId("suggestField1_textField");
+
+		// setup text field
+		final Slider popupdelay = new Slider("Popup delay");
+		popupdelay.setId("delay1");
+		popupdelay.setMin(10);
+		popupdelay.setMax(1000);
+		popupdelay.setValue(500d);
+		popupdelay.setResolution(0);
+		layout.addComponent(popupdelay);
+
+		popupdelay.addValueChangeListener(new Property.ValueChangeListener() {
+			@Override
+			public void valueChange(Property.ValueChangeEvent event) {
+				suggestionBox.setPopupDelay(popupdelay.getValue().intValue());
+			}
+		});
+
+		// setup text field
+		final Slider limit = new Slider("Suggestion Limit");
+		limit.setId("limit1");
+		limit.setMin(2);
+		limit.setMax(30);
+		limit.setValue(10d);
+		limit.setResolution(0);
+		layout.addComponent(limit);
+
+		limit.addValueChangeListener(new Property.ValueChangeListener() {
+			@Override
+			public void valueChange(Property.ValueChangeEvent event) {
+				suggestionBox.setLimit(limit.getValue().intValue());
+			}
+		});
+
+		final CheckBox suggestionEnabled = new CheckBox("suggestion enabled");
+		suggestionEnabled.setId("suggestionEnabled1");
+		suggestionEnabled.setValue(true);
+		layout.addComponent(suggestionEnabled);
+		suggestionEnabled.addValueChangeListener(new Property.ValueChangeListener() {
+			@Override
+			public void valueChange(Property.ValueChangeEvent event) {
+				suggestionBox.setSuggestionEnabled(suggestionEnabled.getValue());
+			}
+		});
+
+		final CheckBox autoHide = new CheckBox("auto hide popup");
+		autoHide.setId("autoHide1");
+		autoHide.setValue(true);
+		layout.addComponent(autoHide);
+		autoHide.addValueChangeListener(new Property.ValueChangeListener() {
+			@Override
+			public void valueChange(Property.ValueChangeEvent event) {
+				suggestionBox.setAutoHide(autoHide.getValue());
+				
+				touchLayout.setEnabled(!autoHide.getValue());
+			}
+		});
+
+		touchLayout = new GridLayout(2, 2);
+		touchLayout.setEnabled(false);
+		touchLayout.setDescription("Set auto hide popup to false");
+		layout.addComponent(touchLayout);
+
+		Button openSuggestList = new Button("open list", e -> {
+			suggestionBox.openPopup();
+		});
+		openSuggestList.setWidth("100%");
+		touchLayout.addComponent(openSuggestList);
+
+		Button closeSuggestList = new Button("close list", e -> {
+			suggestionBox.closePopup();
+		});
+		closeSuggestList.setWidth("100%");
+		touchLayout.addComponent(closeSuggestList);
+
+		Button navUpSuggestList = new Button("nav up", e -> {
+			suggestionBox.navigateToPrevious();
+		});
+		navUpSuggestList.setWidth("100%");
+		touchLayout.addComponent(navUpSuggestList);
+
+		Button navDownSuggestList = new Button("nav down", e -> {
+			suggestionBox.navigateToNext();
+		});
+		navDownSuggestList.setWidth("100%");
+		touchLayout.addComponent(navDownSuggestList);
+		
+		Button selectCurrent = new Button("select", e -> {
+			suggestionBox.selectCurrent();
+		});
+		selectCurrent.setWidth("100%");
+		touchLayout.addComponent(selectCurrent);
+
+		// configure and add suggestion box
+		suggestionBox.setCaption("Select");
+		suggestionBox.getTextField().addValueChangeListener(new Property.ValueChangeListener() {
+			@Override
+			public void valueChange(ValueChangeEvent event) {
+				System.out.println("Foo");
+			}
+		});
+		suggestionBox.setSuggestionEnabled(true);
+		suggestionBox.setLimit(10);
+		suggestionBox.setPopupDelay(500);
+		suggestionBox.addStyleName("os-cash");
+		layout.addComponent(suggestionBox);
+		BeanItemContainer<Person> container = new BeanItemContainer<>(Person.class);
+
+		for (int i = 0; i < 100; i++) {
+			container.addBean(new Person("Florian" + i, "Pirchner" + i));
+			container.addBean(new Person("Klemens" + i, "Edler" + i));
+			container.addBean(new Person("Berni" + i, "Edler" + i));
+		}
+		container.addBean(new Person("Sabrina", "Hopf"));
+
+		suggestionBox.setContainerDataSource(container);
+		suggestionBox.setCaptionPropertyId("lastname");
+		suggestionBox.setFilterPropertyId("lastname");
+		suggestionBox.setUniqueIdPropertyId("uuid");
+
+	}
+
+	private void addForPersonForUUIDMapping(final HorizontalLayout mainLayout) {
+		final VerticalLayout layout = new VerticalLayout();
+		layout.setMargin(true);
+		mainLayout.addComponent(layout);
+
+		// create SuggestTextField
+		final SuggestTextField suggestionBox = new SuggestTextField();
+
+		// setup text field
+		final Slider popupdelay = new Slider("Popup delay");
+		popupdelay.setMin(10);
+		popupdelay.setMax(1000);
+		popupdelay.setValue(500d);
+		popupdelay.setResolution(0);
+		layout.addComponent(popupdelay);
+
+		popupdelay.addValueChangeListener(new Property.ValueChangeListener() {
+			@Override
+			public void valueChange(Property.ValueChangeEvent event) {
+				suggestionBox.setPopupDelay(popupdelay.getValue().intValue());
+			}
+		});
+
+		// setup text field
+		final Slider limit = new Slider("Suggestion Limit");
+		limit.setMin(2);
+		limit.setMax(30);
+		limit.setValue(10d);
+		limit.setResolution(0);
+		layout.addComponent(limit);
+
+		limit.addValueChangeListener(new Property.ValueChangeListener() {
+			@Override
+			public void valueChange(Property.ValueChangeEvent event) {
+				suggestionBox.setLimit(limit.getValue().intValue());
+			}
+		});
+
+		final CheckBox suggestionEnabled = new CheckBox("suggestion enabled");
+		suggestionEnabled.setValue(true);
+		layout.addComponent(suggestionEnabled);
+		suggestionEnabled.addValueChangeListener(new Property.ValueChangeListener() {
+			@Override
+			public void valueChange(Property.ValueChangeEvent event) {
+				suggestionBox.setSuggestionEnabled(suggestionEnabled.getValue());
+			}
+		});
+
+		// configure and add SuggestTextField
+		suggestionBox.setCaption("Select with uuid mapping");
+		suggestionBox.getTextField().addValueChangeListener(new Property.ValueChangeListener() {
+			@Override
+			public void valueChange(ValueChangeEvent event) {
+				System.out.println("Foo");
+			}
+		});
+		suggestionBox.setSuggestionEnabled(true);
+		suggestionBox.setLimit(10);
+		suggestionBox.setPopupDelay(500);
+		layout.addComponent(suggestionBox);
+		BeanItemContainer<PersonForUUIDMapping> container = new BeanItemContainer<>(PersonForUUIDMapping.class);
+
+		for (int i = 0; i < 100; i++) {
+			container.addBean(new PersonForUUIDMapping("Florian" + i, "Pirchner" + i));
+			container.addBean(new PersonForUUIDMapping("Klemens" + i, "Edler" + i));
+			container.addBean(new PersonForUUIDMapping("Berni" + i, "Edler" + i));
+		}
+		container.addBean(new PersonForUUIDMapping("Sabrina", "Hopf"));
+
+		suggestionBox.setContainerDataSource(container);
+		suggestionBox.setCaptionPropertyId("lastname");
+		suggestionBox.setFilterPropertyId("lastname");
+		suggestionBox.setUniqueIdPropertyId("uuid");
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.suggesttext.launch b/org.eclipse.osbp.vaadin.addons.suggesttext/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.suggesttext.launch
new file mode 100644
index 0000000..802e6c0
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/SuperDevMode code server for org.eclipse.osbp.vaadin.addons.suggesttext.launch
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.eclipse.osbp.vaadin.addons.suggesttext"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
+<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;org.eclipse.osbp.vaadin.addons.suggesttext&quot;/&gt;&#10;&lt;/runtimeClasspathEntry&gt;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.eclipse.osbp.vaadin.addons.suggesttext/src&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.eclipse.osbp.vaadin.addons.suggesttext/Sample&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
+<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; standalone=&quot;no&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/org.eclipse.osbp.vaadin.addons.suggesttext/test&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.m2e.launchconfig.classpathProvider"/>
+<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.codeserver.CodeServer"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="org.eclipse.osbp.vaadin.addons.suggesttext.SuggestTextWidgetset"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.osbp.vaadin.addons.suggesttext"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.m2e.launchconfig.sourcepathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xss8M -Xmx512M -XX:MaxPermSize=512M"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="/Users/florianpirchner/git/org.osbee.vaadin.addons/org.eclipse.osbp.vaadin.addons.suggestbox"/>
+</launchConfiguration>
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/build.properties b/org.eclipse.osbp.vaadin.addons.suggesttext/build.properties
new file mode 100644
index 0000000..a172fdb
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/build.properties
@@ -0,0 +1,5 @@
+output.. = target/classes/
+bin.includes = META-INF/,\
+               .,\
+               build.properties
+source.. = src/
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/epl-v10.html b/org.eclipse.osbp.vaadin.addons.suggesttext/epl-v10.html
new file mode 100644
index 0000000..b398acc
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/epl-v10.html
@@ -0,0 +1,259 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Public License - Version 1.0</title>
+<style type="text/css">
+  body {
+    size: 8.5in 11.0in;
+    margin: 0.25in 0.5in 0.25in 0.5in;
+    tab-interval: 0.5in;
+    }
+  p {  	
+    margin-left: auto;
+    margin-top:  0.5em;
+    margin-bottom: 0.5em;
+    }
+  p.list {
+  	margin-left: 0.5in;
+    margin-top:  0.05em;
+    margin-bottom: 0.05em;
+    }
+  </style>
+
+</head>
+
+<body lang="EN-US">
+
+<h2>Eclipse Public License - v 1.0</h2>
+
+<p>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE
+PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR
+DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS
+AGREEMENT.</p>
+
+<p><b>1. DEFINITIONS</b></p>
+
+<p>"Contribution" means:</p>
+
+<p class="list">a) in the case of the initial Contributor, the initial
+code and documentation distributed under this Agreement, and</p>
+<p class="list">b) in the case of each subsequent Contributor:</p>
+<p class="list">i) changes to the Program, and</p>
+<p class="list">ii) additions to the Program;</p>
+<p class="list">where such changes and/or additions to the Program
+originate from and are distributed by that particular Contributor. A
+Contribution 'originates' from a Contributor if it was added to the
+Program by such Contributor itself or anyone acting on such
+Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in
+conjunction with the Program under their own license agreement, and (ii)
+are not derivative works of the Program.</p>
+
+<p>"Contributor" means any person or entity that distributes
+the Program.</p>
+
+<p>"Licensed Patents" mean patent claims licensable by a
+Contributor which are necessarily infringed by the use or sale of its
+Contribution alone or when combined with the Program.</p>
+
+<p>"Program" means the Contributions distributed in accordance
+with this Agreement.</p>
+
+<p>"Recipient" means anyone who receives the Program under
+this Agreement, including all Contributors.</p>
+
+<p><b>2. GRANT OF RIGHTS</b></p>
+
+<p class="list">a) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free copyright license to reproduce, prepare derivative works
+of, publicly display, publicly perform, distribute and sublicense the
+Contribution of such Contributor, if any, and such derivative works, in
+source code and object code form.</p>
+
+<p class="list">b) Subject to the terms of this Agreement, each
+Contributor hereby grants Recipient a non-exclusive, worldwide,
+royalty-free patent license under Licensed Patents to make, use, sell,
+offer to sell, import and otherwise transfer the Contribution of such
+Contributor, if any, in source code and object code form. This patent
+license shall apply to the combination of the Contribution and the
+Program if, at the time the Contribution is added by the Contributor,
+such addition of the Contribution causes such combination to be covered
+by the Licensed Patents. The patent license shall not apply to any other
+combinations which include the Contribution. No hardware per se is
+licensed hereunder.</p>
+
+<p class="list">c) Recipient understands that although each Contributor
+grants the licenses to its Contributions set forth herein, no assurances
+are provided by any Contributor that the Program does not infringe the
+patent or other intellectual property rights of any other entity. Each
+Contributor disclaims any liability to Recipient for claims brought by
+any other entity based on infringement of intellectual property rights
+or otherwise. As a condition to exercising the rights and licenses
+granted hereunder, each Recipient hereby assumes sole responsibility to
+secure any other intellectual property rights needed, if any. For
+example, if a third party patent license is required to allow Recipient
+to distribute the Program, it is Recipient's responsibility to acquire
+that license before distributing the Program.</p>
+
+<p class="list">d) Each Contributor represents that to its knowledge it
+has sufficient copyright rights in its Contribution, if any, to grant
+the copyright license set forth in this Agreement.</p>
+
+<p><b>3. REQUIREMENTS</b></p>
+
+<p>A Contributor may choose to distribute the Program in object code
+form under its own license agreement, provided that:</p>
+
+<p class="list">a) it complies with the terms and conditions of this
+Agreement; and</p>
+
+<p class="list">b) its license agreement:</p>
+
+<p class="list">i) effectively disclaims on behalf of all Contributors
+all warranties and conditions, express and implied, including warranties
+or conditions of title and non-infringement, and implied warranties or
+conditions of merchantability and fitness for a particular purpose;</p>
+
+<p class="list">ii) effectively excludes on behalf of all Contributors
+all liability for damages, including direct, indirect, special,
+incidental and consequential damages, such as lost profits;</p>
+
+<p class="list">iii) states that any provisions which differ from this
+Agreement are offered by that Contributor alone and not by any other
+party; and</p>
+
+<p class="list">iv) states that source code for the Program is available
+from such Contributor, and informs licensees how to obtain it in a
+reasonable manner on or through a medium customarily used for software
+exchange.</p>
+
+<p>When the Program is made available in source code form:</p>
+
+<p class="list">a) it must be made available under this Agreement; and</p>
+
+<p class="list">b) a copy of this Agreement must be included with each
+copy of the Program.</p>
+
+<p>Contributors may not remove or alter any copyright notices contained
+within the Program.</p>
+
+<p>Each Contributor must identify itself as the originator of its
+Contribution, if any, in a manner that reasonably allows subsequent
+Recipients to identify the originator of the Contribution.</p>
+
+<p><b>4. COMMERCIAL DISTRIBUTION</b></p>
+
+<p>Commercial distributors of software may accept certain
+responsibilities with respect to end users, business partners and the
+like. While this license is intended to facilitate the commercial use of
+the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create
+potential liability for other Contributors. Therefore, if a Contributor
+includes the Program in a commercial product offering, such Contributor
+("Commercial Contributor") hereby agrees to defend and
+indemnify every other Contributor ("Indemnified Contributor")
+against any losses, damages and costs (collectively "Losses")
+arising from claims, lawsuits and other legal actions brought by a third
+party against the Indemnified Contributor to the extent caused by the
+acts or omissions of such Commercial Contributor in connection with its
+distribution of the Program in a commercial product offering. The
+obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In
+order to qualify, an Indemnified Contributor must: a) promptly notify
+the Commercial Contributor in writing of such claim, and b) allow the
+Commercial Contributor to control, and cooperate with the Commercial
+Contributor in, the defense and any related settlement negotiations. The
+Indemnified Contributor may participate in any such claim at its own
+expense.</p>
+
+<p>For example, a Contributor might include the Program in a commercial
+product offering, Product X. That Contributor is then a Commercial
+Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance
+claims and warranties are such Commercial Contributor's responsibility
+alone. Under this section, the Commercial Contributor would have to
+defend claims against the other Contributors related to those
+performance claims and warranties, and if a court requires any other
+Contributor to pay any damages as a result, the Commercial Contributor
+must pay those damages.</p>
+
+<p><b>5. NO WARRANTY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS
+PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS
+OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION,
+ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY
+OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and
+distributing the Program and assumes all risks associated with its
+exercise of rights under this Agreement , including but not limited to
+the risks and costs of program errors, compliance with applicable laws,
+damage to or loss of data, programs or equipment, and unavailability or
+interruption of operations.</p>
+
+<p><b>6. DISCLAIMER OF LIABILITY</b></p>
+
+<p>EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT
+NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT,
+INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING
+WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF
+LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR
+DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
+HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p>
+
+<p><b>7. GENERAL</b></p>
+
+<p>If any provision of this Agreement is invalid or unenforceable under
+applicable law, it shall not affect the validity or enforceability of
+the remainder of the terms of this Agreement, and without further action
+by the parties hereto, such provision shall be reformed to the minimum
+extent necessary to make such provision valid and enforceable.</p>
+
+<p>If Recipient institutes patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that the
+Program itself (excluding combinations of the Program with other
+software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the
+date such litigation is filed.</p>
+
+<p>All Recipient's rights under this Agreement shall terminate if it
+fails to comply with any of the material terms or conditions of this
+Agreement and does not cure such failure in a reasonable period of time
+after becoming aware of such noncompliance. If all Recipient's rights
+under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive.</p>
+
+<p>Everyone is permitted to copy and distribute copies of this
+Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The
+Agreement Steward reserves the right to publish new versions (including
+revisions) of this Agreement from time to time. No one other than the
+Agreement Steward has the right to modify this Agreement. The Eclipse
+Foundation is the initial Agreement Steward. The Eclipse Foundation may
+assign the responsibility to serve as the Agreement Steward to a
+suitable separate entity. Each new version of the Agreement will be
+given a distinguishing version number. The Program (including
+Contributions) may always be distributed subject to the version of the
+Agreement under which it was received. In addition, after a new version
+of the Agreement is published, Contributor may elect to distribute the
+Program (including its Contributions) under the new version. Except as
+expressly stated in Sections 2(a) and 2(b) above, Recipient receives no
+rights or licenses to the intellectual property of any Contributor under
+this Agreement, whether expressly, by implication, estoppel or
+otherwise. All rights in the Program not expressly granted under this
+Agreement are reserved.</p>
+
+<p>This Agreement is governed by the laws of the State of New York and
+the intellectual property laws of the United States of America. No party
+to this Agreement will bring a legal action under this Agreement more
+than one year after the cause of action arose. Each party waives its
+rights to a jury trial in any resulting litigation.</p>
+
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/ivy.xml b/org.eclipse.osbp.vaadin.addons.suggesttext/ivy.xml
new file mode 100644
index 0000000..070ca06
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/ivy.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<!DOCTYPE ivy-module [
+	<!ENTITY vaadin.version "7.6.5">
+]>
+<ivy-module version="2.0"
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
+	<info organisation="com.example" module="v7proj" />
+	<configurations>
+		<!-- The default configuration, which should be deployed to the server -->
+		<conf name="default" />
+		<!-- A configuration only needed when compiling the widget set. Should 
+			not be deployed to the server -->
+		<conf name="widgetset-compile" />
+		<!-- A configuration used in compilation of server side classes only.
+			Should be deployed to the server -->
+		<conf name="nodeploy" />
+	</configurations>
+	<dependencies defaultconf="default" defaultconfmapping="default->default">
+		<!-- The core server part of Vaadin -->
+		<dependency org="com.vaadin" name="vaadin-server" rev="&vaadin.version;" />
+
+		<!-- Vaadin themes -->
+		<dependency org="com.vaadin" name="vaadin-themes" rev="&vaadin.version;" />
+
+		<!-- Push support -->
+		<dependency org="com.vaadin" name="vaadin-push" rev="&vaadin.version;" />
+
+		<!-- Servlet 3.0 API -->
+		<dependency org="javax.servlet" name="javax.servlet-api" rev="3.0.1" conf="nodeploy->default" />
+
+		<!-- TestBench 4 -->
+		<dependency org="com.vaadin" name="vaadin-testbench-api" rev="latest.release" conf="nodeploy -> default" />
+
+		<!-- Precompiled DefaultWidgetSet -->
+		<dependency org="com.vaadin" name="vaadin-client-compiled"
+			rev="&vaadin.version;" />
+
+		<!-- Vaadin client side, needed for widget set compilation -->
+		<dependency org="com.vaadin" name="vaadin-client" rev="&vaadin.version;"
+			 conf="widgetset-compile->default" />
+
+		<!-- Compiler for custom widget sets. Should not be deployed -->
+		<dependency org="com.vaadin" name="vaadin-client-compiler"
+			rev="&vaadin.version;" conf="widgetset-compile->default" />
+	</dependencies>
+</ivy-module>
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/ivysettings.xml b/org.eclipse.osbp.vaadin.addons.suggesttext/ivysettings.xml
new file mode 100644
index 0000000..9c0f653
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/ivysettings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ivysettings>
+	<settings defaultResolver="default" />
+	<resolvers>
+		<chain name="default">
+			<!-- Public Maven repository -->
+			<ibiblio name="public" m2compatible="true" />
+
+			<!-- Vaadin Add-on repository -->
+			<ibiblio name="vaadin-addons" usepoms="true" m2compatible="true"
+				root="http://maven.vaadin.com/vaadin-addons" />
+
+			<!-- Vaadin snapshots repository -->
+			<ibiblio name="vaadin-snapshots" usepoms="true" m2compatible="true"
+				root="https://oss.sonatype.org/content/repositories/vaadin-snapshots" />
+			<!-- Repository used for Vaadin modified smartsprites library -->
+			<dual name="custom-smartsprites">
+				<filesystem name="smartsprites-ivy">
+					<ivy pattern="${basedir}/ivymodule/[module]-ivy-[revision].xml" />
+				</filesystem>
+				<url name="smartsprites-artifact">
+					<artifact
+						pattern="http://dev.vaadin.com/svn/versions/6.8/build/smartsprites/lib/[artifact](-[revision]).[ext]" />
+				</url>
+			</dual>
+		</chain>
+	</resolvers>
+	<modules>
+		<!-- Vaadin patched SmartSprites -->
+		<module organisation="com.carrotsearch" name="smartsprites"
+			revision="0.2.3-itmill" resolver="custom-smartsprites" />
+	</modules>
+
+
+</ivysettings>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/license.html b/org.eclipse.osbp.vaadin.addons.suggesttext/license.html
new file mode 100644
index 0000000..6e579a5
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/license.html
@@ -0,0 +1,164 @@
+<!--?xml version="1.0" encoding="ISO-8859-1" ?-->
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"><head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>Eclipse Foundation Software User Agreement</title>
+</head>
+
+<body lang="EN-US">
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>February 1, 2011</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+   (COLLECTIVELY "CONTENT").  USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+   CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW.  BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+   OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+   NOTICES INDICATED OR REFERENCED BELOW.  IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+   CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse
+ Foundation is provided to you under the terms and conditions of the 
+Eclipse Public License Version 1.0
+   ("EPL").  A copy of the EPL is provided with this Content and is also
+ available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+   For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, 
+documentation and other files maintained in the Eclipse Foundation 
+source code
+   repository ("Repository") in software modules ("Modules") and made 
+available as downloadable archives ("Downloads").</p>
+
+<ul>
+       <li>Content may be structured and packaged into modules to 
+facilitate delivering, extending, and upgrading the Content.  Typical 
+modules may include plug-ins ("Plug-ins"), plug-in fragments 
+("Fragments"), and features ("Features").</li>
+       <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java&#8482; ARchive) in a directory named "plugins".</li>
+       <li>A Feature is a bundle of one or more Plug-ins and/or 
+Fragments and associated material.  Each Feature may be packaged as a 
+sub-directory in a directory named "features".  Within a Feature, files 
+named "feature.xml" may contain a list of the names and version numbers 
+of the Plug-ins
+      and/or Fragments associated with that Feature.</li>
+       <li>Features may also include other Features ("Included 
+Features"). Within a Feature, files named "feature.xml" may contain a 
+list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be 
+contained in files named "about.html" ("Abouts"). The terms and 
+conditions governing Features and
+Included Features should be contained in files named "license.html" 
+("Feature Licenses").  Abouts and Feature Licenses may be located in any
+ directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+       <li>The top-level (root) directory</li>
+       <li>Plug-in and Fragment directories</li>
+       <li>Inside Plug-ins and Fragments packaged as JARs</li>
+       <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+       <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is 
+installed using the Provisioning Technology (as defined below), you must
+ agree to a license ("Feature Update License") during the
+installation process.  If the Feature contains Included Features, the 
+Feature Update License should either provide you with the terms and 
+conditions governing the Included Features or
+inform you where you can locate them.  Feature Update Licenses may be 
+found in the "license" property of files named "feature.properties" 
+found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the 
+terms and conditions (or references to such terms and conditions) that 
+govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER 
+TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.
+  SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+       <li>Eclipse Distribution License Version 1.0 (available at <a href="http://www.eclipse.org/licenses/edl-v10.html">http://www.eclipse.org/licenses/edl-v1.0.html</a>)</li>
+       <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+       <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+       <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+       <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+       <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND 
+CONDITIONS PRIOR TO USE OF THE CONTENT.  If no About, Feature License, 
+or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions 
+govern that particular Content.</p>
+
+
+<h3>Use of Provisioning Technology</h3>
+
+<p>The Eclipse Foundation makes available provisioning software, 
+examples of which include, but are not limited to, p2 and the Eclipse
+   Update Manager ("Provisioning Technology") for the purpose of 
+allowing users to install software, documentation, information and/or
+   other materials (collectively "Installable Software"). This 
+capability is provided with the intent of allowing such users to
+   install, extend and update Eclipse-based products. Information about 
+packaging Installable Software is available at <a href="http://eclipse.org/equinox/p2/repository_packaging.html">http://eclipse.org/equinox/p2/repository_packaging.html</a>
+   ("Specification").</p>
+
+<p>You may use Provisioning Technology to allow other parties to install
+ Installable Software. You shall be responsible for enabling the
+   applicable license agreements relating to the Installable Software to
+ be presented to, and accepted by, the users of the Provisioning 
+Technology
+   in accordance with the Specification. By using Provisioning 
+Technology in such a manner and making it available in accordance with 
+the
+   Specification, you further acknowledge your agreement to, and the 
+acquisition of all necessary rights to permit the following:</p>
+
+<ol>
+       <li>A series of actions may occur ("Provisioning Process") in 
+which a user may execute the Provisioning Technology
+       on a machine ("Target Machine") with the intent of installing, 
+extending or updating the functionality of an Eclipse-based
+       product.</li>
+       <li>During the Provisioning Process, the Provisioning Technology 
+may cause third party Installable Software or a portion thereof to be
+       accessed and copied to the Target Machine.</li>
+       <li>Pursuant to the Specification, you will provide to the user 
+the terms and conditions that govern the use of the Installable
+       Software ("Installable Software Agreement") and such Installable 
+Software Agreement shall be accessed from the Target
+       Machine in accordance with the Specification. Such Installable 
+Software Agreement must inform the user of the terms and conditions that
+ govern
+       the Installable Software and must solicit acceptance by the end 
+user in the manner prescribed in such Installable Software Agreement. 
+Upon such
+       indication of agreement by the user, the provisioning Technology 
+will complete installation of the Installable Software.</li>
+</ol>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are
+ currently may have restrictions on the import, possession, and use, 
+and/or re-export to
+   another country, of encryption software. BEFORE using any encryption 
+software, please check the country's laws, regulations and policies 
+concerning the import,
+   possession, or use, and re-export of encryption software, to see if 
+this is permitted.</p>
+
+<p><small>Java and all Java-based trademarks are trademarks of Oracle Corporation in the United States, other countries, or both.</small></p>
+
+
+</body></html>
\ No newline at end of file
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/pom.xml b/org.eclipse.osbp.vaadin.addons.suggesttext/pom.xml
new file mode 100644
index 0000000..c0aa482
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/pom.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.eclipse.osbp.releng.maven</groupId>
+		<artifactId>org.eclipse.osbp.releng.maven.parent.mbp</artifactId>
+		<version>0.9.0-SNAPSHOT</version>
+		<relativePath />
+	</parent>
+
+	<groupId>org.eclipse.osbp.vaadin.addons</groupId>
+	<artifactId>org.eclipse.osbp.vaadin.addons.suggesttext</artifactId>
+	<packaging>bundle</packaging>
+
+	<dependencies>
+		<dependency>
+			<groupId>com.vaadin</groupId>
+			<artifactId>vaadin-server</artifactId>
+			<version>${vaadin.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.vaadin</groupId>
+			<artifactId>vaadin-client</artifactId>
+			<version>${vaadin.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>com.vaadin.external.slf4j</groupId>
+			<artifactId>vaadin-slf4j-jdk14</artifactId>
+			<version>1.6.1</version>
+		</dependency>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>javax.servlet-api</artifactId>
+			<version>3.0.1</version>
+		</dependency>
+	</dependencies>
+
+	<build>
+		<sourceDirectory>${basedir}/src</sourceDirectory>
+
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-resources-plugin</artifactId>
+				<configuration>
+					<encoding>UTF-8</encoding>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.0</version>
+				<configuration>
+					<encoding>UTF-8</encoding>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.felix</groupId>
+				<artifactId>maven-bundle-plugin</artifactId>
+				<extensions>true</extensions>
+				<configuration>
+					<instructions>
+						<Bundle-Name>OS.bee Addon for Vaadin: Suggesttext</Bundle-Name>
+						<Bundle-SymbolicName>org.eclipse.osbp.vaadin.addons.suggesttext</Bundle-SymbolicName>
+                        <Bundle-Version>0.9.0.{osgi-version-qualifier}</Bundle-Version>
+						<Require-Bundle>com.vaadin.server;bundle-version="[7.5.7,7.7.0)",
+							com.vaadin.client;bundle-version="[7.5.7,7.7.0)",
+							com.vaadin.shared;bundle-version="[7.5.7,7.7.0)",
+							org.jsoup;bundle-version="[1.8.3,1.8.4)"
+						</Require-Bundle>
+						<Import-Package>
+							com.vaadin.*,
+							!fi.jasoft.*,
+							javax.servlet.annotation;resolution:=optional,
+							*
+						</Import-Package>
+						<Export-Package>
+							!LICENSE,!LICENSE.txt,!THIRD-PARTY.txt,!NOTICE,!README.txt,!VERSION.txt,!build.properties,
+							!VAADIN.*,
+							org.eclipse.osbp.vaadin.addons.*;version="0.9.0"
+						</Export-Package>
+						<Include-Resource>{maven-resources},LICENSE.txt,epl-v10.html</Include-Resource>
+						<_nouses>true</_nouses>
+					</instructions>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-source-plugin</artifactId>
+				<version>2.2.1</version>
+				<executions>
+					<execution>
+						<id>attach-sources</id>
+						<goals>
+							<goal>jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+		<pluginManagement>
+			<plugins>
+
+				<!--This plugin's configuration is used to store Eclipse m2e settings 
+					only. It has no influence on the Maven build itself. -->
+				<plugin>
+					<groupId>org.eclipse.m2e</groupId>
+					<artifactId>lifecycle-mapping</artifactId>
+					<version>1.0.0</version>
+					<configuration>
+						<lifecycleMappingMetadata>
+							<pluginExecutions>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>
+											org.apache.maven.plugins
+										</groupId>
+										<artifactId>
+											maven-dependency-plugin
+										</artifactId>
+										<versionRange>
+											[2.0.0,)
+										</versionRange>
+										<goals>
+											<goal>
+												copy-dependencies
+											</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore></ignore>
+									</action>
+								</pluginExecution>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>com.vaadin</groupId>
+										<artifactId>
+											vaadin-maven-plugin
+										</artifactId>
+										<versionRange>
+											[7.0-SNAPSHOT,)
+										</versionRange>
+										<goals>
+											<goal>compile</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore></ignore>
+									</action>
+								</pluginExecution>
+							</pluginExecutions>
+						</lifecycleMappingMetadata>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+		<!-- This is needed for the sources required by the client-side compiler 
+			to be included in the produced JARs -->
+		<resources>
+			<resource>
+				<directory>src</directory>
+			</resource>
+		</resources>
+
+	</build>
+
+</project>
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextField.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextField.java
new file mode 100644
index 0000000..b46c4be
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextField.java
@@ -0,0 +1,640 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext;
+
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.OQueryDelegate.SuggestionResult;
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.SuggestTextFieldClientRpc;
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.SuggestTextFieldServerRpc;
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.SuggestTextFieldState;
+
+import com.vaadin.data.Container;
+import com.vaadin.data.Container.Filterable;
+import com.vaadin.data.Item;
+import com.vaadin.data.util.filter.Compare;
+import com.vaadin.data.util.filter.SimpleStringFilter;
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.external.org.slf4j.Logger;
+import com.vaadin.external.org.slf4j.LoggerFactory;
+import com.vaadin.ui.AbstractSingleComponentContainer;
+import com.vaadin.ui.Component;
+import com.vaadin.ui.TextField;
+import com.vaadin.util.ReflectTools;
+
+/**
+ * A field, which behaves like a textfield and offers suggestion functionality.
+ * <p>
+ * To get access to the underlying textfield, use {@link #getTextField()}. All
+ * functions available of {@link TextField} are also supported by this field.
+ * <p>
+ * To configure the suggestion functions, use the methods
+ * {@link #setSuggestionEnabled(boolean)}, {@link #setLimit(int)} and
+ * {@link #setPopupDelay(int)}.
+ * <p>
+ * To provide this field with queryable items, set a container using
+ * {@link #setContainerDataSource(Container) }(Filterable). It will use the
+ * given {@link #getFilterPropertyId() filterPropertyId} to query the container
+ * for suggestions.<br>
+ * The {@link #getCaptionPropertyId() captionPropertyId} is used to show results
+ * in the UI.<br>
+ * The {@link #getUniqueIdPropertyId()} is used to map the selected item
+ * clientside to the proper item in the container.
+ * <p>
+ * This field fires {@link SelectionChangedEvent} if a suggestion was selected
+ * at the clientside.
+ * <p>
+ * Additionally this field offers the functionality, that a suggestion is
+ * selected automatically, if only 1 record was returned by the query.
+ * <p>
+ * By default the popup can be opened pressing "ALT+KEY_DOWN". This can be
+ * adjusted by setters below.
+ */
+@SuppressWarnings("serial")
+public class SuggestTextField extends AbstractSingleComponentContainer {
+
+	/** The Constant LOGGER. */
+	private static final Logger LOGGER = LoggerFactory.getLogger(SuggestTextField.class);
+
+	/** The lock. */
+	private Object lock = new Object();
+
+	/** The caption property id. */
+	private Object captionPropertyId;
+
+	/** The unique id property id. */
+	private Object uniqueIdPropertyId;
+
+	/** The filter property id. */
+	private Object filterPropertyId;
+
+	/** The rpc. */
+	private SuggestTextFieldServerRpc rpc = new SuggestTextFieldServerRpc() {
+		@Override
+		public void requestSuggestions(final String handleId, final String filter, final int limit) {
+			if (needsUUIDMapping) {
+				uuidmapping.clear();
+			}
+			query(handleId, filter, limit);
+		}
+
+		@Override
+		public void selectionChanged(String id) {
+			Object itemId = getItemById(id);
+			if (itemId != null) {
+				fireSelectionChanged(itemId);
+			}
+		}
+	};
+
+	/** The container. */
+	private Container container;
+
+	/** The text field. */
+	private TextField textField;
+
+	/** The needs uuid mapping. */
+	private boolean needsUUIDMapping;
+
+	/** The uuidmapping. */
+	private Map<String, Object> uuidmapping = new HashMap<>();
+
+	/**
+	 * Instantiates a new suggest text field.
+	 */
+	public SuggestTextField() {
+		registerRpc(rpc);
+
+		textField = new TextField();
+		textField.setSizeFull();
+		setContent(textField);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.vaadin.ui.AbstractComponent#getState()
+	 */
+	@Override
+	protected SuggestTextFieldState getState() {
+		return (SuggestTextFieldState) super.getState();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.vaadin.ui.AbstractComponent#getState(boolean)
+	 */
+	@Override
+	protected SuggestTextFieldState getState(boolean markAsDirty) {
+		return (SuggestTextFieldState) super.getState(markAsDirty);
+	}
+
+	/**
+	 * Gets the text field.
+	 *
+	 * @return the text field
+	 */
+	public TextField getTextField() {
+		return textField;
+	}
+
+	/**
+	 * Sets the value into the text field.
+	 * 
+	 * @param value
+	 */
+	public void setValue(String value) {
+		textField.setValue(value);
+	}
+
+	/**
+	 * Returns the value from the text field.
+	 * 
+	 * @return
+	 */
+	public String getValue() {
+		return textField.getValue();
+	}
+
+	/**
+	 * Opens the popup if not already opened and shows the suggested values.
+	 */
+	public void openPopup() {
+		getRpcProxy(SuggestTextFieldClientRpc.class).openPopup();
+	}
+
+	/**
+	 * Closes the popup if open. Else it has no effect.
+	 */
+	public void closePopup() {
+		getRpcProxy(SuggestTextFieldClientRpc.class).closePopup();
+	}
+
+	/**
+	 * Navigates the selected suggestion to the next one available.
+	 */
+	public void navigateToNext() {
+		getRpcProxy(SuggestTextFieldClientRpc.class).navigateToNext();
+	}
+
+	/**
+	 * Navigates the selected suggestion to the previous one available.
+	 */
+	public void navigateToPrevious() {
+		getRpcProxy(SuggestTextFieldClientRpc.class).navigateToPrevious();
+	}
+
+	/**
+	 * Selects the current selected suggestion and accepts it.
+	 */
+	public void selectCurrent() {
+		getRpcProxy(SuggestTextFieldClientRpc.class).selectCurrent();
+	}
+
+	/**
+	 * Returns the delay in ms.<br>
+	 * The delay defines how many ms no keypress is done, before showing the
+	 * popup.
+	 *
+	 * @return the popup delay
+	 */
+	public int getPopupDelay() {
+		return getState(false).popupDelay;
+	}
+
+	/**
+	 * Sets the delay in ms. <br>
+	 * The delay defines how many ms no keypress is done, before showing the
+	 * popup.
+	 *
+	 * @param delay
+	 *            the new popup delay
+	 */
+	public void setPopupDelay(int delay) {
+		if (getState(false).popupDelay != delay) {
+			getState(true).popupDelay = delay;
+		}
+	}
+
+	/**
+	 * True, if suggestions should be enabled. False otherwise.
+	 *
+	 * @param suggestionEnabled
+	 *            the new suggestion enabled
+	 */
+	public void setSuggestionEnabled(boolean suggestionEnabled) {
+		if (getState(false).suggestionEnabled != suggestionEnabled) {
+			getState(true).suggestionEnabled = suggestionEnabled;
+		}
+
+		if (!suggestionEnabled && needsUUIDMapping) {
+			uuidmapping.clear();
+		}
+	}
+
+	/**
+	 * Sets the number of items to be shown at clientside suggestions.
+	 *
+	 * @param limit
+	 *            the new limit
+	 */
+	public void setLimit(int limit) {
+		if (getState(false).limit != limit) {
+			getState(true).limit = limit;
+		}
+	}
+
+	/**
+	 * See {@link #setSuggestionEnabled(boolean)}.
+	 *
+	 * @return true, if is suggestion enabled
+	 */
+	public boolean isSuggestionEnabled() {
+		return getState(false).suggestionEnabled;
+	}
+
+	/**
+	 * See {@link #setLimit(int)}.
+	 *
+	 * @return the limit
+	 */
+	public int getLimit() {
+		return getState(false).limit;
+	}
+
+	/**
+	 * See {@link #setAutoHide(boolean)}.
+	 *
+	 * @return the limit
+	 */
+	public boolean isAutoHide() {
+		return getState(false).autoHide;
+	}
+
+	/**
+	 * If true, then the popup hides if the user clicks outside the popup.
+	 *
+	 * @param limit
+	 *            the new limit
+	 */
+	public void setAutoHide(boolean autoHide) {
+		if (getState(false).autoHide != autoHide) {
+			getState(true).autoHide = autoHide;
+		}
+	}
+
+	/**
+	 * Sets the key which need to be pressed to open the popup.<br>
+	 * See {@link ShortcutAction.KeyCode}
+	 *
+	 * @param key
+	 *            the new key
+	 */
+	public void setOpenPopupKey(int key) {
+		if (getState(false).openPopup_key != key) {
+			getState(true).openPopup_key = key;
+		}
+	}
+
+	/**
+	 * Sets the key modifier which need to be pressed to open the popup.<br>
+	 * See {@link ShortcutAction.ModifierKey}
+	 *
+	 * @param modifier
+	 *            the new modifier
+	 */
+	public void setOpenPopupKeyModifier(int modifier) {
+		if (modifier != ShortcutAction.ModifierKey.ALT && modifier != ShortcutAction.ModifierKey.CTRL) {
+			throw new IllegalArgumentException("Only ALT and CTRL are allowed as modifiers.");
+		}
+
+		if (getState(false).openPopup_modifier != modifier) {
+			getState(true).openPopup_modifier = modifier;
+		}
+	}
+
+	/**
+	 * Returns the key which need to be pressed to open the popup.<br>
+	 * See {@link ShortcutAction.KeyCode}
+	 *
+	 * @param key
+	 *            the new key
+	 */
+	public int getOpenPopupKey() {
+		return getState(false).openPopup_key;
+	}
+
+	/**
+	 * Returns the key modifier which need to be pressed to open the popup.<br>
+	 * See {@link ShortcutAction.ModifierKey}
+	 *
+	 * @param modifier
+	 *            the new modifier
+	 */
+	public int getOpenPopupKeyModifier(int modifier) {
+		return getState(false).openPopup_modifier;
+	}
+
+	/**
+	 * Respond.
+	 *
+	 * @param handle
+	 *            the handle
+	 * @param result
+	 *            the result
+	 */
+	protected void respond(String handle, List<SuggestionResult> result) {
+		getRpcProxy(SuggestTextFieldClientRpc.class).respond(handle, result);
+	}
+
+	/**
+	 * See {@link #setFilterPropertyId(Object)}.
+	 *
+	 * @return the filter property id
+	 */
+	public Object getFilterPropertyId() {
+		return filterPropertyId;
+	}
+
+	/**
+	 * Sets the filterPropertyId. This id is used to query the container for
+	 * matching results.
+	 *
+	 * @param filterPropertyId
+	 *            the new filter property id
+	 */
+	public void setFilterPropertyId(Object filterPropertyId) {
+		this.filterPropertyId = filterPropertyId;
+
+		if (!container.getContainerPropertyIds().contains(filterPropertyId)) {
+			throw new IllegalArgumentException(filterPropertyId + " is not a valid container property.");
+		}
+	}
+
+	/**
+	 * See {@link #setCaptionPropertyId(Object)}.
+	 *
+	 * @return the caption property id
+	 */
+	public Object getCaptionPropertyId() {
+		return captionPropertyId;
+	}
+
+	/**
+	 * This propertyId is used, to show results in the user interface.
+	 *
+	 * @param captionPropertyId
+	 *            the new caption property id
+	 */
+	public void setCaptionPropertyId(Object captionPropertyId) {
+		this.captionPropertyId = captionPropertyId;
+
+		if (!container.getContainerPropertyIds().contains(captionPropertyId)) {
+			throw new IllegalArgumentException(captionPropertyId + " is not a valid container property.");
+		}
+	}
+
+	/**
+	 * See {@link #setUniqueIdPropertyId(Object)}.
+	 *
+	 * @return the unique id property id
+	 */
+	public Object getUniqueIdPropertyId() {
+		return uniqueIdPropertyId;
+	}
+
+	/**
+	 * This property is used to map the selected record at clientside to the
+	 * matching item from the container. Each record in the container needs to
+	 * have a unique id.
+	 *
+	 * @param uniqueIdPropertyId
+	 *            the new unique id property id
+	 */
+	public void setUniqueIdPropertyId(Object uniqueIdPropertyId) {
+		this.uniqueIdPropertyId = uniqueIdPropertyId;
+
+		if (!container.getContainerPropertyIds().contains(uniqueIdPropertyId)) {
+			throw new IllegalArgumentException(uniqueIdPropertyId + " is not a valid container property.");
+		}
+
+		Class<?> type = container.getType(uniqueIdPropertyId);
+		needsUUIDMapping = type == String.class ? false : true;
+	}
+
+	/**
+	 * Sets the container datasource used to query suggestions.<br>
+	 * <b>Attention:</b> The container must implement
+	 * {@link Container.Filterable} and {@link Container.Indexed}.
+	 *
+	 * @param container
+	 *            the new container data source
+	 */
+	public void setContainerDataSource(Container container) {
+		if (!(container instanceof Container.Filterable) || !(container instanceof Container.Indexed)) {
+			throw new IllegalArgumentException(
+					"The container must implement Container.Filterable and Container.Indexed");
+		}
+		this.container = container;
+	}
+
+	/**
+	 * Returns the container datasource.
+	 *
+	 * @return the container data source
+	 */
+	public Container getContainerDataSource() {
+		return container;
+	}
+
+	/**
+	 * Query.
+	 *
+	 * @param handleId
+	 *            the handle id
+	 * @param filter
+	 *            the filter
+	 * @param limit
+	 *            the limit
+	 */
+	protected void query(String handleId, String filter, int limit) {
+
+		if (filterPropertyId == null) {
+			throw new IllegalArgumentException("filterPropertyId must be set for query.");
+		}
+
+		if (captionPropertyId == null) {
+			throw new IllegalArgumentException("captionPropertyId must be set for query.");
+		}
+
+		if (uniqueIdPropertyId == null) {
+			throw new IllegalArgumentException("uniqueIdPropertyId must be set for query.");
+		}
+
+		LOGGER.debug("Query - filter:" + filter + " limit:" + limit + " handleId:" + handleId);
+
+		List<SuggestionResult> result = new ArrayList<>();
+		synchronized (lock) {
+			Container.Filterable filterable = (Filterable) container;
+			filterable.removeAllContainerFilters();
+			filterable.addContainerFilter(new SimpleStringFilter(filterPropertyId, filter, true, false));
+
+			int count = 0;
+			for (Object itemId : ((Container.Indexed) container).getItemIds(0, Math.max(limit, 3))) {
+				Item item = container.getItem(itemId);
+				String caption = (String) item.getItemProperty(captionPropertyId).getValue();
+				Object id = item.getItemProperty(uniqueIdPropertyId).getValue();
+
+				if (needsUUIDMapping) {
+					uuidmapping.put(id.toString(), id);
+				}
+				result.add(new SuggestionResult(id.toString(), caption));
+
+				count++;
+				if (count >= limit) {
+					break;
+				}
+			}
+		}
+
+		respond(handleId, result);
+	}
+
+	/**
+	 * Gets the item by id.
+	 *
+	 * @param id
+	 *            the id
+	 * @return the item by id
+	 */
+	protected Object getItemById(String id) {
+		if (uniqueIdPropertyId == null) {
+			throw new IllegalArgumentException("uniqueIdPropertyId must be set for query.");
+		}
+
+		Object uuid = id;
+		if (needsUUIDMapping) {
+			uuid = uuidmapping.get(id);
+			uuidmapping.clear();
+		}
+
+		if (uuid == null) {
+			LOGGER.error("Can not access uuid==null. Given id was " + id);
+			return null;
+		}
+
+		synchronized (lock) {
+			Container.Filterable filterable = (Container.Filterable) container;
+			filterable.removeAllContainerFilters();
+			filterable.addContainerFilter(new Compare.Equal(uniqueIdPropertyId, uuid));
+
+			Container.Indexed indexed = (Container.Indexed) container;
+			return indexed.firstItemId();
+		}
+	}
+
+	/**
+	 * Fire selection changed.
+	 *
+	 * @param itemId
+	 *            the item id
+	 */
+	protected void fireSelectionChanged(Object itemId) {
+		LOGGER.debug("Selection changed event fired: " + itemId);
+		fireEvent(new SelectionChangedEvent(this, itemId));
+	}
+
+	/**
+	 * Add listener which is being notified if the selection changes.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void addSelectionChangedListener(SelectionChangedListener listener) {
+		addListener(SelectionChangedEvent.class, listener, SelectionChangedListener.SELECTION_CHANGED_METHOD);
+	}
+
+	/**
+	 * Removes listener which is being notified if the selection changes.
+	 *
+	 * @param listener
+	 *            the listener
+	 */
+	public void removeSelectionChangedListener(SelectionChangedListener listener) {
+		removeListener(SelectionChangedEvent.class, listener);
+	}
+
+	/**
+	 * Is fired, if the selection of a suggestion clientside finished.
+	 */
+	public static class SelectionChangedEvent extends Event {
+
+		/** The item id. */
+		private final Object itemId;
+
+		/**
+		 * Instantiates a new selection changed event.
+		 *
+		 * @param source
+		 *            the source
+		 * @param itemId
+		 *            the item id
+		 */
+		public SelectionChangedEvent(Component source, Object itemId) {
+			super(source);
+			this.itemId = itemId;
+		}
+
+		/**
+		 * Gets the item id.
+		 *
+		 * @return the item id
+		 */
+		public Object getItemId() {
+			return itemId;
+		}
+
+	}
+
+	/**
+	 * The listener interface for receiving selectionChanged events. The class
+	 * that is interested in processing a selectionChanged event implements this
+	 * interface, and the object created with that class is registered with a
+	 * component using the component's <code>addSelectionChangedListener</code>
+	 * method. When the selectionChanged event occurs, that object's appropriate
+	 * method is invoked.
+	 *
+	 * @see SelectionChangedEvent
+	 */
+	public interface SelectionChangedListener extends Serializable {
+
+		/** The Constant SELECTION_CHANGED_METHOD. */
+		public static final Method SELECTION_CHANGED_METHOD = ReflectTools.findMethod(SelectionChangedListener.class,
+				"selectionChanged", SelectionChangedEvent.class);
+
+		/**
+		 * Selection changed.
+		 *
+		 * @param event
+		 *            the event
+		 */
+		void selectionChanged(SelectionChangedEvent event);
+
+	}
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextWidgetset.gwt.xml b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextWidgetset.gwt.xml
new file mode 100644
index 0000000..d58fd0d
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/SuggestTextWidgetset.gwt.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.1//EN" "http://google-web-toolkit.googlecode.com/svn/tags/2.5.1/distro-source/core/src/gwt-module.dtd">
+<module>
+	<inherits name="com.vaadin.DefaultWidgetSet" />
+	
+   <!-- Uncomment the following to compile the widgetset for one browser only. 
+		Multiple browsers can be specified as a comma separated list. The supported 
+		user agents at the moment of writing were: ie8,ie9,gecko1_8,safari,opera 
+		The value gecko1_8 is used for Firefox and safari is used for webkit based 
+		browsers including Google Chrome. -->
+
+ 	<!-- To enable SuperDevMode, uncomment this line. See https://vaadin.com/wiki/-/wiki/Main/Using%20SuperDevMode 
+ 		for more information and instructions. --> 
+ 	<!-- <set-configuration-property name="devModeRedirectEnabled" value="true" /> -->
+
+<!-- 	<add-linker name="xsiframe" /> -->
+<!-- 	<set-configuration-property name="devModeRedirectEnabled" value="true" /> -->
+<!-- 	<set-property name="user.agent" value="safari" /> -->
+
+	<stylesheet src="suggesttext/styles.css" />
+
+</module>
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/ODelegatingOracle.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/ODelegatingOracle.java
new file mode 100644
index 0000000..0ad5543
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/ODelegatingOracle.java
@@ -0,0 +1,169 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.OQueryDelegate.FutureCallback;
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.OQueryDelegate.SuggestionResult;
+
+import com.google.gwt.user.client.Timer;
+import com.google.gwt.user.client.ui.SuggestOracle;
+
+// TODO: Auto-generated Javadoc
+/**
+ * An oracle that delegates to a serverside RPC.
+ */
+public class ODelegatingOracle extends SuggestOracle {
+
+	/** The delegate. */
+	private final OQueryDelegate delegate;
+	
+	/** The delay timer. */
+	private CustomTimer delayTimer;
+	
+	/** The popup delay. */
+	private int popupDelay;
+	
+	/** The o suggest box. */
+	private OSuggestBox oSuggestBox;
+	
+	/** The suggestion enabled. */
+	private boolean suggestionEnabled;
+	
+	/**
+	 * Instantiates a new o delegating oracle.
+	 *
+	 * @param delegate the delegate
+	 */
+	public ODelegatingOracle(OQueryDelegate delegate) {
+		this.delegate = delegate;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.google.gwt.user.client.ui.SuggestOracle#requestSuggestions(com.google.gwt.user.client.ui.SuggestOracle.Request, com.google.gwt.user.client.ui.SuggestOracle.Callback)
+	 */
+	@Override
+	public void requestSuggestions(final Request request, final Callback callback) {
+		if (request.getQuery() == null || request.equals("") || !suggestionEnabled) {
+			return;
+		}
+
+		if (delayTimer == null) {
+			delayTimer = new CustomTimer();
+		} else {
+			delayTimer.cancel();
+		}
+		delayTimer.setRequest(request);
+		delayTimer.setCallback(callback);
+		delayTimer.schedule(popupDelay);
+	}
+
+	/* (non-Javadoc)
+	 * @see com.google.gwt.user.client.ui.SuggestOracle#requestDefaultSuggestions(com.google.gwt.user.client.ui.SuggestOracle.Request, com.google.gwt.user.client.ui.SuggestOracle.Callback)
+	 */
+	public void requestDefaultSuggestions(Request request, Callback callback) {
+		if (delayTimer != null) {
+			delayTimer.cancel();
+			delayTimer = null;
+		}
+
+		super.requestDefaultSuggestions(request, callback);
+	}
+
+	/**
+	 * Sets the delay until the popup occurs.
+	 *
+	 * @param popupDelay the new popup delay
+	 */
+	public void setPopupDelay(int popupDelay) {
+		this.popupDelay = popupDelay;
+	}
+
+	/**
+	 * Timer to implement the popupDelay.
+	 */
+	private class CustomTimer extends Timer {
+		
+		/** The request. */
+		private Request request;
+		
+		/** The callback. */
+		private Callback callback;
+
+		/**
+		 * Sets the request.
+		 *
+		 * @param request the new request
+		 */
+		public void setRequest(Request request) {
+			this.request = request;
+		}
+
+		/**
+		 * Sets the callback.
+		 *
+		 * @param callback the new callback
+		 */
+		public void setCallback(Callback callback) {
+			this.callback = callback;
+		}
+
+		/* (non-Javadoc)
+		 * @see com.google.gwt.user.client.Timer#run()
+		 */
+		@Override
+		public void run() {
+			// make an rpc call
+			delegate.requestSuggestions(request, new FutureCallback() {
+				@Override
+				public void respondSuggestions(List<SuggestionResult> suggestions) {
+
+					if (suggestions.size() == 1) {
+						oSuggestBox.setSingleSuggestionAndClosePopup(new OSuggestion(suggestions.get(0)));
+					} else {
+						List<OSuggestion> temp = new ArrayList<>();
+						for (SuggestionResult r : suggestions) {
+							temp.add(new OSuggestion(r));
+						}
+
+						Response response = new Response();
+						response.setMoreSuggestions(false);
+						response.setSuggestions(temp);
+
+						callback.onSuggestionsReady(request, response);
+					}
+				}
+			});
+		}
+	}
+
+	/**
+	 * Sets the suggest box.
+	 *
+	 * @param oSuggestBox the new suggest box
+	 */
+	protected void setSuggestBox(OSuggestBox oSuggestBox) {
+		this.oSuggestBox = oSuggestBox;
+	}
+
+	/**
+	 * True, if the suggestion box should be used.
+	 *
+	 * @param suggestionEnabled the new suggestion enabled
+	 */
+	public void setSuggestionEnabled(boolean suggestionEnabled) {
+		this.suggestionEnabled = suggestionEnabled;
+	}
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OQueryDelegate.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OQueryDelegate.java
new file mode 100644
index 0000000..50c9a0f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OQueryDelegate.java
@@ -0,0 +1,115 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import java.util.Date;
+import java.util.List;
+
+import com.google.gwt.user.client.ui.SuggestOracle.Request;
+
+// TODO: Auto-generated Javadoc
+/**
+ * This class is responsible to delegate the query for suggestions to the serverside rpc. 
+ */
+public class OQueryDelegate {
+
+	/** The server rpc. */
+	// instance
+	private final SuggestTextFieldServerRpc serverRpc;
+
+	/** The current handle. */
+	private String currentHandle;
+	
+	/** The current callback. */
+	private FutureCallback currentCallback;
+
+	/**
+	 * Instantiates a new o query delegate.
+	 *
+	 * @param serverRpc the server rpc
+	 */
+	public OQueryDelegate(SuggestTextFieldServerRpc serverRpc) {
+		this.serverRpc = serverRpc;
+	}
+
+	/**
+	 * Request suggestions.
+	 *
+	 * @param request the request
+	 * @param callback the callback
+	 */
+	protected void requestSuggestions(Request request, FutureCallback callback) {
+		// dismiss older callbacks
+		currentHandle = Long.toHexString(new Date().getTime());
+		currentCallback = callback;
+
+		serverRpc.requestSuggestions(currentHandle, request.getQuery(), request.getLimit());
+	}
+
+	/**
+	 * Respond.
+	 *
+	 * @param handle the handle
+	 * @param response the response
+	 */
+	public void respond(String handle, List<SuggestionResult> response) {
+		if (currentHandle.equals(handle)) {
+			currentCallback.respondSuggestions(response);
+		}
+	}
+	
+	/**
+	 * A future to wait for responds from serverside. 
+	 */
+	public interface FutureCallback {
+		
+		/**
+		 * Respond suggestions.
+		 *
+		 * @param suggestions the suggestions
+		 */
+		void respondSuggestions(List<SuggestionResult> suggestions);
+	}
+
+	/**
+	 * The Class SuggestionResult.
+	 */
+	public static class SuggestionResult {
+		
+		/** The uuid. */
+		public String uuid;
+		
+		/** The display text. */
+		public String displayText;
+
+		/**
+		 * Instantiates a new suggestion result.
+		 */
+		public SuggestionResult() {
+
+		}
+
+		/**
+		 * Instantiates a new suggestion result.
+		 *
+		 * @param uuid the uuid
+		 * @param displayText the display text
+		 */
+		public SuggestionResult(String uuid, String displayText) {
+			super();
+			this.uuid = uuid;
+			this.displayText = displayText;
+		}
+
+	}
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestBox.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestBox.java
new file mode 100644
index 0000000..50dc26d
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestBox.java
@@ -0,0 +1,1365 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import com.google.gwt.core.client.Scheduler.ScheduledCommand;
+import com.google.gwt.dom.client.Element;
+import com.google.gwt.editor.client.IsEditor;
+import com.google.gwt.editor.client.LeafValueEditor;
+import com.google.gwt.editor.client.adapters.TakesValueEditor;
+import com.google.gwt.event.dom.client.HasAllKeyHandlers;
+import com.google.gwt.event.dom.client.KeyCodes;
+import com.google.gwt.event.dom.client.KeyDownEvent;
+import com.google.gwt.event.dom.client.KeyDownHandler;
+import com.google.gwt.event.dom.client.KeyPressEvent;
+import com.google.gwt.event.dom.client.KeyPressHandler;
+import com.google.gwt.event.dom.client.KeyUpEvent;
+import com.google.gwt.event.dom.client.KeyUpHandler;
+import com.google.gwt.event.logical.shared.HasSelectionHandlers;
+import com.google.gwt.event.logical.shared.SelectionEvent;
+import com.google.gwt.event.logical.shared.SelectionHandler;
+import com.google.gwt.event.logical.shared.ValueChangeEvent;
+import com.google.gwt.event.logical.shared.ValueChangeHandler;
+import com.google.gwt.event.shared.HandlerRegistration;
+import com.google.gwt.user.client.DOM;
+import com.google.gwt.user.client.ui.DecoratedPopupPanel;
+import com.google.gwt.user.client.ui.Focusable;
+import com.google.gwt.user.client.ui.HasAnimation;
+import com.google.gwt.user.client.ui.HasEnabled;
+import com.google.gwt.user.client.ui.HasText;
+import com.google.gwt.user.client.ui.HasValue;
+import com.google.gwt.user.client.ui.MenuBar;
+import com.google.gwt.user.client.ui.MenuItem;
+import com.google.gwt.user.client.ui.PopupPanel;
+import com.google.gwt.user.client.ui.PopupPanel.AnimationType;
+import com.google.gwt.user.client.ui.RootPanel;
+import com.google.gwt.user.client.ui.SimplePanel;
+import com.google.gwt.user.client.ui.SuggestBox;
+import com.google.gwt.user.client.ui.SuggestOracle;
+import com.google.gwt.user.client.ui.SuggestOracle.Callback;
+import com.google.gwt.user.client.ui.SuggestOracle.Request;
+import com.google.gwt.user.client.ui.SuggestOracle.Response;
+import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
+import com.google.gwt.user.client.ui.UIObject;
+import com.google.gwt.user.client.ui.ValueBoxBase;
+import com.google.gwt.user.client.ui.Widget;
+import com.vaadin.client.ApplicationConnection;
+import com.vaadin.client.ComponentConnector;
+import com.vaadin.client.Util;
+import com.vaadin.client.ui.VOverlay;
+import com.vaadin.event.ShortcutAction;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Copy from {@link SuggestBox} but {@link #box} can be initialized after new
+ * instance was created. Copy was needed since {@link #box} is final in
+ * {@link com.google.gwt.user.client.ui.SuggestBox}.
+ */
+public class OSuggestBox extends SimplePanel implements HasText, Focusable, HasEnabled, HasAllKeyHandlers,
+		HasValue<String>, HasSelectionHandlers<Suggestion>, IsEditor<LeafValueEditor<String>> {
+
+	/**
+	 * The callback used when a user selects a {@link Suggestion}.
+	 */
+	public static interface SuggestionCallback {
+
+		/**
+		 * On suggestion selected.
+		 *
+		 * @param suggestion
+		 *            the suggestion
+		 */
+		void onSuggestionSelected(Suggestion suggestion);
+	}
+
+	/**
+	 * Used to display suggestions to the user.
+	 */
+	public abstract static class SuggestionDisplay {
+
+		/**
+		 * Get the currently selected {@link Suggestion} in the display.
+		 *
+		 * @return the current suggestion, or null if none selected
+		 */
+		protected abstract Suggestion getCurrentSelection();
+
+		/**
+		 * Hide the list of suggestions from view.
+		 */
+		protected abstract void hideSuggestions();
+
+		/**
+		 * Returns true, if the popup is showing.
+		 * 
+		 * @return
+		 */
+		protected abstract boolean isShowing();
+
+		/**
+		 * Highlight the suggestion directly below the current selection in the
+		 * list.
+		 */
+		protected abstract void moveSelectionDown();
+
+		/**
+		 * Highlight the suggestion directly above the current selection in the
+		 * list.
+		 */
+		protected abstract void moveSelectionUp();
+
+		/**
+		 * Set the debug id of widgets used in the SuggestionDisplay.
+		 *
+		 * @param suggestBoxBaseID
+		 *            the baseID of the {@link OSuggestBox}
+		 * @see UIObject#onEnsureDebugId(String)
+		 */
+		protected void onEnsureDebugId(String suggestBoxBaseID) {
+		}
+
+		/**
+		 * Accepts information about whether there were more suggestions
+		 * matching than were provided to {@link #showSuggestions}.
+		 *
+		 * @param hasMoreSuggestions
+		 *            true if more matches were available
+		 * @param numMoreSuggestions
+		 *            number of more matches available. If the specific number
+		 *            is unknown, 0 will be passed.
+		 */
+		protected void setMoreSuggestions(boolean hasMoreSuggestions, int numMoreSuggestions) {
+			// Subclasses may optionally implement.
+		}
+
+		/**
+		 * Update the list of visible suggestions.
+		 *
+		 * Use care when using isDisplayStringHtml; it is an easy way to expose
+		 * script-based security problems.
+		 *
+		 * @param suggestBox
+		 *            the suggest box where the suggestions originated
+		 * @param suggestions
+		 *            the suggestions to show
+		 * @param isDisplayStringHTML
+		 *            should the suggestions be displayed as HTML
+		 * @param isAutoSelectEnabled
+		 *            if true, the first item should be selected automatically
+		 * @param callback
+		 *            the callback used when the user makes a suggestion
+		 */
+		protected abstract void showSuggestions(OSuggestBox suggestBox, Collection<? extends Suggestion> suggestions,
+				boolean isDisplayStringHTML, boolean isAutoSelectEnabled, SuggestionCallback callback);
+
+		/**
+		 * If true, then the popup will hide when the user clicks outside the
+		 * popup.
+		 * 
+		 * @param autoHide
+		 */
+		protected abstract void setAutoHide(boolean autoHide);
+
+		/**
+		 * The owner of the popup.
+		 * 
+		 * @param oSuggestBox
+		 */
+		protected abstract void setOwner(OSuggestBox oSuggestBox);
+
+	}
+
+	/**
+	 * <p>
+	 * The default implementation of {@link SuggestionDisplay} displays
+	 * suggestions in a {@link PopupPanel} beneath the {@link OSuggestBox}.
+	 * 
+	 *
+	 * <h3>CSS Style Rules</h3>
+	 * <dl>
+	 * <dt>.o-SuggestBoxPopup</dt>
+	 * <dd>the suggestion popup</dd>
+	 * <dt>.o-SuggestBoxPopup .item</dt>
+	 * <dd>an unselected suggestion</dd>
+	 * <dt>.o-SuggestBoxPopup .item-selected</dt>
+	 * <dd>a selected suggestion</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupTopLeft</dt>
+	 * <dd>the top left cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupTopLeftInner</dt>
+	 * <dd>the inner element of the cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupTopCenter</dt>
+	 * <dd>the top center cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupTopCenterInner</dt>
+	 * <dd>the inner element of the cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupTopRight</dt>
+	 * <dd>the top right cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupTopRightInner</dt>
+	 * <dd>the inner element of the cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupMiddleLeft</dt>
+	 * <dd>the middle left cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupMiddleLeftInner</dt>
+	 * <dd>the inner element of the cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupMiddleCenter</dt>
+	 * <dd>the middle center cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupMiddleCenterInner</dt>
+	 * <dd>the inner element of the cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupMiddleRight</dt>
+	 * <dd>the middle right cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupMiddleRightInner</dt>
+	 * <dd>the inner element of the cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupBottomLeft</dt>
+	 * <dd>the bottom left cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupBottomLeftInner</dt>
+	 * <dd>the inner element of the cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupBottomCenter</dt>
+	 * <dd>the bottom center cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupBottomCenterInner</dt>
+	 * <dd>the inner element of the cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupBottomRight</dt>
+	 * <dd>the bottom right cell</dd>
+	 * <dt>.o-SuggestBoxPopup .suggestPopupBottomRightInner</dt>
+	 * <dd>the inner element of the cell</dd>
+	 * </dl>
+	 */
+	public static class DefaultSuggestionDisplay extends SuggestionDisplay implements HasAnimation {
+
+		/** The suggestion menu. */
+		private final SuggestionMenu suggestionMenu;
+
+		/** The suggestion popup. */
+		private final PopupPanel suggestionPopup;
+
+		/**
+		 * The suggest box this display was prepared for. Is used to determine
+		 * the {@link ApplicationConnection} and the v-overlay-container.
+		 */
+		private OSuggestBox oSuggestBox;
+
+		/**
+		 * We need to keep track of the last {@link OSuggestBox} because it acts
+		 * as an autoHide partner for the {@link PopupPanel}. If we use the same
+		 * display for multiple {@link OSuggestBox}, we need to switch the
+		 * autoHide partner.
+		 */
+		private OSuggestBox lastSuggestBox = null;
+
+		/**
+		 * Sub-classes making use of {@link decorateSuggestionList} to add
+		 * elements to the suggestion popup _may_ want those elements to show
+		 * even when there are 0 suggestions. An example would be showing a "No
+		 * matches" message.
+		 */
+		private boolean hideWhenEmpty = true;
+
+		/**
+		 * Object to position the suggestion display next to, instead of the
+		 * associated suggest box.
+		 */
+		private UIObject positionRelativeTo;
+
+		/**
+		 * Construct a new {@link DefaultSuggestionDisplay}.
+		 */
+		public DefaultSuggestionDisplay() {
+			suggestionMenu = new SuggestionMenu(true);
+			suggestionPopup = createPopup();
+			suggestionPopup.setWidget(decorateSuggestionList(suggestionMenu));
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.osbp.vaadin.addons.suggesttext.client.OSuggestBox.
+		 * SuggestionDisplay#hideSuggestions()
+		 */
+		@Override
+		public void hideSuggestions() {
+			suggestionPopup.hide();
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see com.google.gwt.user.client.ui.HasAnimation#isAnimationEnabled()
+		 */
+		public boolean isAnimationEnabled() {
+			return suggestionPopup.isAnimationEnabled();
+		}
+
+		/**
+		 * Check whether or not the suggestion list is hidden when there are no
+		 * suggestions to display.
+		 *
+		 * @return true if hidden when empty, false if not
+		 */
+		public boolean isSuggestionListHiddenWhenEmpty() {
+			return hideWhenEmpty;
+		}
+
+		/**
+		 * Check whether or not the list of suggestions is being shown.
+		 *
+		 * @return true if the suggestions are visible, false if not
+		 */
+		public boolean isSuggestionListShowing() {
+			return suggestionPopup.isShowing();
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see com.google.gwt.user.client.ui.HasAnimation#setAnimationEnabled(
+		 * boolean)
+		 */
+		public void setAnimationEnabled(boolean enable) {
+			suggestionPopup.setAnimationEnabled(enable);
+		}
+
+		/**
+		 * Sets the style name of the suggestion popup.
+		 *
+		 * @param style
+		 *            the new primary style name
+		 * @see UIObject#setStyleName(String)
+		 */
+		public void setPopupStyleName(String style) {
+			suggestionPopup.setStyleName(style);
+		}
+
+		/**
+		 * Sets the UI object where the suggestion display should appear next
+		 * to.
+		 *
+		 * @param uiObject
+		 *            the uiObject used for positioning, or null to position
+		 *            relative to the suggest box
+		 */
+		public void setPositionRelativeTo(UIObject uiObject) {
+			positionRelativeTo = uiObject;
+		}
+
+		/**
+		 * Set whether or not the suggestion list should be hidden when there
+		 * are no suggestions to display. Defaults to true.
+		 *
+		 * @param hideWhenEmpty
+		 *            true to hide when empty, false not to
+		 */
+		public void setSuggestionListHiddenWhenEmpty(boolean hideWhenEmpty) {
+			this.hideWhenEmpty = hideWhenEmpty;
+		}
+
+		/**
+		 * Create the PopupPanel that will hold the list of suggestions.
+		 *
+		 * @return the popup panel
+		 */
+		protected PopupPanel createPopup() {
+			PopupPanel p = new DecoratedPopupPanel(true, false) {
+				@Override
+				protected void onAttach() {
+					// Move the overlay to the appropriate overlay container
+					getOverlayContainer().appendChild(getElement());
+
+					addStyleName(oSuggestBox.getStyleName());
+
+					super.onAttach();
+				}
+			};
+			p.setStyleName("o-SuggestBoxPopup");
+			p.setPreviewingAllNativeEvents(true);
+			p.setAnimationType(AnimationType.ROLL_DOWN);
+			p.setAutoHideEnabled(true);
+			return p;
+		}
+
+		/**
+		 * Wrap the list of suggestions before adding it to the popup. You can
+		 * override this method if you want to wrap the suggestion list in a
+		 * decorator.
+		 *
+		 * @param suggestionList
+		 *            the widget that contains the list of suggestions
+		 * @return the suggestList, optionally inside of a wrapper
+		 */
+		protected Widget decorateSuggestionList(Widget suggestionList) {
+			return suggestionList;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.osbp.vaadin.addons.suggesttext.client.OSuggestBox.
+		 * SuggestionDisplay#getCurrentSelection()
+		 */
+		@Override
+		protected Suggestion getCurrentSelection() {
+			if (!isSuggestionListShowing()) {
+				return null;
+			}
+			MenuItem item = suggestionMenu.getSelectedItem();
+			return item == null ? null : ((SuggestionMenuItem) item).getSuggestion();
+		}
+
+		/**
+		 * Get the {@link PopupPanel} used to display suggestions.
+		 *
+		 * @return the popup panel
+		 */
+		protected PopupPanel getPopupPanel() {
+			return suggestionPopup;
+		}
+
+		/**
+		 * Get the {@link MenuBar} used to display suggestions.
+		 *
+		 * @return the suggestions menu
+		 */
+		protected MenuBar getSuggestionMenu() {
+			return suggestionMenu;
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.osbp.vaadin.addons.suggesttext.client.OSuggestBox.
+		 * SuggestionDisplay#moveSelectionDown()
+		 */
+		@Override
+		protected void moveSelectionDown() {
+			// Make sure that the menu is actually showing. These keystrokes
+			// are only relevant when choosing a suggestion.
+			if (isSuggestionListShowing()) {
+				// If nothing is selected, getSelectedItemIndex will return -1
+				// and we
+				// will select index 0 (the first item) by default.
+				suggestionMenu.selectItem(suggestionMenu.getSelectedItemIndex() + 1);
+			}
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.osbp.vaadin.addons.suggesttext.client.OSuggestBox.
+		 * SuggestionDisplay#moveSelectionUp()
+		 */
+		@Override
+		protected void moveSelectionUp() {
+			// Make sure that the menu is actually showing. These keystrokes
+			// are only relevant when choosing a suggestion.
+			if (isSuggestionListShowing()) {
+				// if nothing is selected, then we should select the last
+				// suggestion by
+				// default. This is because, in some cases, the suggestions menu
+				// will
+				// appear above the text box rather than below it (for example,
+				// if the
+				// text box is at the bottom of the window and the suggestions
+				// will not
+				// fit below the text box). In this case, users would expect to
+				// be able
+				// to use the up arrow to navigate to the suggestions.
+				if (suggestionMenu.getSelectedItemIndex() == -1) {
+					suggestionMenu.selectItem(suggestionMenu.getNumItems() - 1);
+				} else {
+					suggestionMenu.selectItem(suggestionMenu.getSelectedItemIndex() - 1);
+				}
+			}
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see org.eclipse.osbp.vaadin.addons.suggesttext.client.OSuggestBox.
+		 * SuggestionDisplay#showSuggestions(org.eclipse.osbp.vaadin.addons.
+		 * suggesttext.client.OSuggestBox, java.util.Collection, boolean,
+		 * boolean,
+		 * org.eclipse.osbp.vaadin.addons.suggesttext.client.OSuggestBox.
+		 * SuggestionCallback)
+		 */
+		@Override
+		protected void showSuggestions(final OSuggestBox suggestBox, Collection<? extends Suggestion> suggestions,
+				boolean isDisplayStringHTML, boolean isAutoSelectEnabled, final SuggestionCallback callback) {
+			// Hide the popup if there are no suggestions to display.
+			boolean anySuggestions = (suggestions != null && suggestions.size() > 0);
+			if (!anySuggestions && hideWhenEmpty) {
+				hideSuggestions();
+				return;
+			}
+
+			// Hide the popup before we manipulate the menu within it. If we do
+			// not
+			// do this, some browsers will redraw the popup as items are removed
+			// and added to the menu.
+			if (suggestionPopup.isAttached()) {
+				suggestionPopup.hide();
+			}
+
+			suggestionMenu.clearItems();
+
+			for (final Suggestion curSuggestion : suggestions) {
+				final SuggestionMenuItem menuItem = new SuggestionMenuItem(curSuggestion);
+				menuItem.setScheduledCommand(new ScheduledCommand() {
+					public void execute() {
+						callback.onSuggestionSelected(curSuggestion);
+					}
+				});
+
+				suggestionMenu.addItem(menuItem);
+			}
+
+			if (isAutoSelectEnabled && anySuggestions) {
+				// Select the first item in the suggestion menu.
+				suggestionMenu.selectItem(0);
+			}
+
+			// Link the popup autoHide to the TextBox.
+			if (lastSuggestBox != suggestBox) {
+				// If the suggest box has changed, free the old one first.
+				if (lastSuggestBox != null) {
+					suggestionPopup.removeAutoHidePartner(lastSuggestBox.getElement());
+				}
+				lastSuggestBox = suggestBox;
+				suggestionPopup.addAutoHidePartner(suggestBox.getElement());
+			}
+
+			// Show the popup under the TextBox.
+			suggestionPopup.showRelativeTo(positionRelativeTo != null ? positionRelativeTo : suggestBox);
+		}
+
+		@Override
+		protected void setAutoHide(boolean autoHide) {
+			suggestionPopup.setAutoHideEnabled(autoHide);
+		}
+
+		@Override
+		protected void setOwner(OSuggestBox oSuggestBox) {
+			this.oSuggestBox = oSuggestBox;
+		}
+
+		/**
+		 * Gets the 'overlay container' element. Tries to find the current
+		 * {@link ApplicationConnection} using
+		 * {@link #getApplicationConnection()}.
+		 * 
+		 * @return the overlay container element for the current
+		 *         {@link ApplicationConnection} or another element if the
+		 *         current {@link ApplicationConnection} cannot be determined.
+		 */
+		public Element getOverlayContainer() {
+			ApplicationConnection ac = getApplicationConnection();
+			if (ac == null) {
+				// could not figure out which one we belong to, styling will
+				// probably fail
+				Logger.getLogger(getClass().getSimpleName()).log(Level.WARNING,
+						"Could not determine ApplicationConnection for Overlay. Overlay will be attached directly to the root panel");
+				return RootPanel.get().getElement();
+			} else {
+				return getOverlayContainer(ac);
+			}
+		}
+
+		/**
+		 * Get the {@link ApplicationConnection} that this overlay belongs to.
+		 * 
+		 * @return
+		 */
+		protected ApplicationConnection getApplicationConnection() {
+			ComponentConnector c = Util.findConnectorFor(oSuggestBox);
+			if (c != null) {
+				return c.getConnection();
+			}
+			return null;
+		}
+
+		/**
+		 * Gets the 'overlay container' element pertaining to the given
+		 * {@link ApplicationConnection}. Each overlay should be created in a
+		 * overlay container element, so that the correct theme and styles can
+		 * be applied.
+		 * 
+		 * @param ac
+		 *            A reference to {@link ApplicationConnection}
+		 * @return The overlay container
+		 */
+		@SuppressWarnings("deprecation")
+		public Element getOverlayContainer(ApplicationConnection ac) {
+			String id = ac.getConfiguration().getRootPanelId();
+			id = id += "-overlays";
+			Element container = DOM.getElementById(id);
+			if (container == null) {
+				container = DOM.createDiv();
+				container.setId(id);
+				String styles = ac.getUIConnector().getWidget().getParent().getStyleName();
+				if (styles != null && !styles.equals("")) {
+					container.addClassName(styles);
+				}
+				container.addClassName(VOverlay.CLASSNAME_CONTAINER);
+				RootPanel.get().getElement().appendChild(container);
+			}
+			return DOM.asOld(container);
+		}
+
+		@Override
+		protected boolean isShowing() {
+			return suggestionPopup.isShowing();
+		}
+	}
+
+	/**
+	 * The SuggestionMenu class is used for the display and selection of
+	 * suggestions in the XSuggestBox widget. SuggestionMenu differs from
+	 * MenuBar in that it always has a vertical orientation, and it has no
+	 * submenus. It also allows for programmatic selection of items in the menu,
+	 * and programmatically performing the action associated with the selected
+	 * item. In the MenuBar class, items cannot be selected programatically -
+	 * they can only be selected when the user places the mouse over a particlar
+	 * item. Additional methods in SuggestionMenu provide information about the
+	 * number of items in the menu, and the index of the currently selected
+	 * item.
+	 */
+	private static class SuggestionMenu extends MenuBar {
+
+		/**
+		 * Instantiates a new suggestion menu.
+		 *
+		 * @param vertical
+		 *            the vertical
+		 */
+		public SuggestionMenu(boolean vertical) {
+			super(vertical);
+			// Make sure that CSS styles specified for the default Menu classes
+			// do not affect this menu
+			setStyleName("");
+			setFocusOnHoverEnabled(false);
+		}
+
+		/**
+		 * Gets the num items.
+		 *
+		 * @return the num items
+		 */
+		public int getNumItems() {
+			return getItems().size();
+		}
+
+		/**
+		 * Returns the index of the menu item that is currently selected.
+		 *
+		 * @return returns the selected item
+		 */
+		public int getSelectedItemIndex() {
+			// The index of the currently selected item can only be
+			// obtained if the menu is showing.
+			MenuItem selectedItem = getSelectedItem();
+			if (selectedItem != null) {
+				return getItems().indexOf(selectedItem);
+			}
+			return -1;
+		}
+
+		/**
+		 * Selects the item at the specified index in the menu. Selecting the
+		 * item does not perform the item's associated action; it only changes
+		 * the style of the item and updates the value of
+		 * SuggestionMenu.selectedItem.
+		 *
+		 * @param index
+		 *            index
+		 */
+		public void selectItem(int index) {
+			List<MenuItem> items = getItems();
+			if (index > -1 && index < items.size()) {
+				selectItem(items.get(index));
+			}
+		}
+
+		/*
+		 * (non-Javadoc)
+		 * 
+		 * @see com.google.gwt.user.client.ui.MenuBar#getSelectedItem()
+		 */
+		@Override
+		protected MenuItem getSelectedItem() {
+			return super.getSelectedItem();
+		}
+	}
+
+	/**
+	 * Class for menu items in a SuggestionMenu. A SuggestionMenuItem differs
+	 * from a MenuItem in that each item is backed by a Suggestion object. The
+	 * text of each menu item is derived from the display string of a Suggestion
+	 * object, and each item stores a reference to its Suggestion object.
+	 */
+	private static class SuggestionMenuItem extends MenuItem {
+
+		/** The Constant STYLENAME_DEFAULT. */
+		private static final String STYLENAME_DEFAULT = "item";
+
+		/** The suggestion. */
+		private Suggestion suggestion;
+
+		/**
+		 * Instantiates a new suggestion menu item.
+		 *
+		 * @param suggestion
+		 *            the suggestion
+		 */
+		public SuggestionMenuItem(Suggestion suggestion) {
+			super(suggestion.getDisplayString(), (SuggestionMenu) null);
+			// Each suggestion should be placed in a single row in the
+			// suggestion
+			// menu. If the window is resized and the suggestion cannot fit on a
+			// single row, it should be clipped (instead of wrapping around and
+			// taking up a second row).
+			getElement().getStyle().setProperty("whiteSpace", "nowrap");
+			setStyleName(STYLENAME_DEFAULT);
+			setSuggestion(suggestion);
+		}
+
+		/**
+		 * Gets the suggestion.
+		 *
+		 * @return the suggestion
+		 */
+		public Suggestion getSuggestion() {
+			return suggestion;
+		}
+
+		/**
+		 * Sets the suggestion.
+		 *
+		 * @param suggestion
+		 *            the new suggestion
+		 */
+		public void setSuggestion(Suggestion suggestion) {
+			this.suggestion = suggestion;
+		}
+	}
+
+	/** The Constant STYLENAME_DEFAULT. */
+	private static final String STYLENAME_DEFAULT = "o-XSuggestBox";
+
+	/** The limit. */
+	private int limit = 20;
+
+	/** The selects first item. */
+	private boolean selectsFirstItem = true;
+
+	/** The oracle. */
+	private SuggestOracle oracle;
+
+	/** The current text. */
+	private String currentText;
+
+	/** The editor. */
+	private LeafValueEditor<String> editor;
+
+	/** The display. */
+	private final SuggestionDisplay display;
+
+	/** The box. */
+	private ValueBoxBase<String> box;
+
+	/** The callback. */
+	private final Callback callback = new Callback() {
+		public void onSuggestionsReady(Request request, Response response) {
+			// If disabled while request was in-flight, drop it
+			if (!isEnabled()) {
+				return;
+			}
+			display.setMoreSuggestions(response.hasMoreSuggestions(), response.getMoreSuggestionsCount());
+			display.showSuggestions(OSuggestBox.this, response.getSuggestions(), oracle.isDisplayStringHTML(),
+					isAutoSelectEnabled(), suggestionCallback);
+		}
+	};
+
+	/** The suggestion callback. */
+	private final SuggestionCallback suggestionCallback = new SuggestionCallback() {
+		public void onSuggestionSelected(Suggestion suggestion) {
+			box.setFocus(true);
+			setNewSelection(suggestion);
+		}
+	};
+
+	private int openPopupKey;
+
+	private int openPopupModifier;
+
+	/**
+	 * Constructor for {@link OSuggestBox}. The text box will be removed from
+	 * it's current location and wrapped by the {@link OSuggestBox}.
+	 *
+	 * @param oracle
+	 *            supplies suggestions based upon the current contents of the
+	 *            text widget
+	 */
+	public OSuggestBox(SuggestOracle oracle) {
+		this(oracle, new DefaultSuggestionDisplay());
+	}
+
+	/**
+	 * Constructor for {@link OSuggestBox}. The text box will be removed from
+	 * it's current location and wrapped by the {@link OSuggestBox}.
+	 *
+	 * @param oracle
+	 *            supplies suggestions based upon the current contents of the
+	 *            text widget
+	 * @param suggestDisplay
+	 *            the class used to display suggestions
+	 */
+	public OSuggestBox(SuggestOracle oracle, SuggestionDisplay suggestDisplay) {
+		this.display = suggestDisplay;
+		this.display.setOwner(this);
+
+		setOracle(oracle);
+
+		((ODelegatingOracle) getSuggestOracle()).setSuggestBox(this);
+	}
+
+	/**
+	 * Sets the popup delay.
+	 *
+	 * @param popupDelay
+	 *            the new popup delay
+	 */
+	public void setPopupDelay(int popupDelay) {
+		((ODelegatingOracle) getSuggestOracle()).setPopupDelay(popupDelay);
+	}
+
+	/**
+	 * Sets the single suggestion and close popup.
+	 *
+	 * @param selectedSuggestion
+	 *            the new single suggestion and close popup
+	 */
+	public void setSingleSuggestionAndClosePopup(Suggestion selectedSuggestion) {
+		assert selectedSuggestion != null : "suggestion cannot be null";
+		String currentText = selectedSuggestion.getReplacementString();
+		setText(currentText);
+		((DefaultSuggestionDisplay) getSuggestionDisplay()).hideSuggestions();
+		SelectionEvent.fire(this, selectedSuggestion);
+	}
+
+	/**
+	 * Initialize.
+	 *
+	 * @param box
+	 *            the box
+	 */
+	public void initialize(ValueBoxBase<String> box) {
+		assert this.box == null : "box must not be set twice";
+		this.box = box;
+
+		setWidget(box);
+		addEventsToTextBox();
+
+		setStyleName(STYLENAME_DEFAULT);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.google.gwt.event.dom.client.HasKeyDownHandlers#addKeyDownHandler(com.
+	 * google.gwt.event.dom.client.KeyDownHandler)
+	 */
+	public HandlerRegistration addKeyDownHandler(KeyDownHandler handler) {
+		return addDomHandler(handler, KeyDownEvent.getType());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.google.gwt.event.dom.client.HasKeyPressHandlers#addKeyPressHandler(
+	 * com.google.gwt.event.dom.client.KeyPressHandler)
+	 */
+	public HandlerRegistration addKeyPressHandler(KeyPressHandler handler) {
+		return addDomHandler(handler, KeyPressEvent.getType());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.google.gwt.event.dom.client.HasKeyUpHandlers#addKeyUpHandler(com.
+	 * google.gwt.event.dom.client.KeyUpHandler)
+	 */
+	public HandlerRegistration addKeyUpHandler(KeyUpHandler handler) {
+		return addDomHandler(handler, KeyUpEvent.getType());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.google.gwt.event.logical.shared.HasSelectionHandlers#
+	 * addSelectionHandler(com.google.gwt.event.logical.shared.SelectionHandler)
+	 */
+	public HandlerRegistration addSelectionHandler(SelectionHandler<Suggestion> handler) {
+		return addHandler(handler, SelectionEvent.getType());
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.google.gwt.event.logical.shared.HasValueChangeHandlers#
+	 * addValueChangeHandler(com.google.gwt.event.logical.shared.
+	 * ValueChangeHandler)
+	 */
+	public HandlerRegistration addValueChangeHandler(ValueChangeHandler<String> handler) {
+		return addHandler(handler, ValueChangeEvent.getType());
+	}
+
+	/**
+	 * Returns a {@link TakesValueEditor} backed by the XSuggestBox.
+	 *
+	 * @return the leaf value editor
+	 */
+	public LeafValueEditor<String> asEditor() {
+		if (editor == null) {
+			editor = TakesValueEditor.of(this);
+		}
+		return editor;
+	}
+
+	/**
+	 * Gets the limit for the number of suggestions that should be displayed for
+	 * this box. It is up to the current {@link SuggestOracle} to enforce this
+	 * limit.
+	 *
+	 * @return the limit for the number of suggestions
+	 */
+	public int getLimit() {
+		return limit;
+	}
+
+	/**
+	 * Get the {@link SuggestionDisplay} used to display suggestions.
+	 *
+	 * @return the {@link SuggestionDisplay}
+	 */
+	public SuggestionDisplay getSuggestionDisplay() {
+		return display;
+	}
+
+	/**
+	 * Gets the suggest box's
+	 * {@link com.google.gwt.user.client.ui.SuggestOracle}.
+	 *
+	 * @return the {@link SuggestOracle}
+	 */
+	public SuggestOracle getSuggestOracle() {
+		return oracle;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.google.gwt.user.client.ui.Focusable#getTabIndex()
+	 */
+	public int getTabIndex() {
+		return box.getTabIndex();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.google.gwt.user.client.ui.HasText#getText()
+	 */
+	public String getText() {
+		return box.getText();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.google.gwt.user.client.ui.HasValue#getValue()
+	 */
+	public String getValue() {
+		return box.getValue();
+	}
+
+	/**
+	 * Get the ValueBoxBase associated with this suggest box.
+	 *
+	 * @return this suggest box's value box
+	 */
+	public ValueBoxBase<String> getValueBox() {
+		return box;
+	}
+
+	/**
+	 * Returns whether or not the first suggestion will be automatically
+	 * selected. This behavior is on by default.
+	 *
+	 * @return true if the first suggestion will be automatically selected
+	 */
+	public boolean isAutoSelectEnabled() {
+		return selectsFirstItem;
+	}
+
+	/**
+	 * Gets whether this widget is enabled.
+	 *
+	 * @return <code>true</code> if the widget is enabled
+	 */
+	public boolean isEnabled() {
+		return box.isEnabled();
+	}
+
+	/**
+	 * Refreshes the current list of suggestions.
+	 */
+	public void refreshSuggestionList() {
+		if (isAttached()) {
+			refreshSuggestions();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.google.gwt.user.client.ui.Focusable#setAccessKey(char)
+	 */
+	public void setAccessKey(char key) {
+		box.setAccessKey(key);
+	}
+
+	/**
+	 * Turns on or off the behavior that automatically selects the first
+	 * suggested item. This behavior is on by default.
+	 *
+	 * @param selectsFirstItem
+	 *            Whether or not to automatically select the first suggestion
+	 */
+	public void setAutoSelectEnabled(boolean selectsFirstItem) {
+		this.selectsFirstItem = selectsFirstItem;
+	}
+
+	/**
+	 * Opens the popup and shows the suggestions.
+	 */
+	public void openPopup() {
+		showSuggestionList();
+	}
+
+	/**
+	 * Closes the popup.
+	 */
+	public void closePopup() {
+		display.hideSuggestions();
+	}
+
+	/**
+	 * Navigates the selected suggestion to the next one available.
+	 */
+	public void navigateToNext() {
+		display.moveSelectionDown();
+	}
+
+	/**
+	 * Navigates the selected suggestion to the previous one available.
+	 */
+	public void navigateToPrevious() {
+		display.moveSelectionUp();
+	}
+
+	public void selectCurrent() {
+		acceptSuggestion();
+	}
+
+	/**
+	 * If true, then the popup hides if the user clicks outside the popup.
+	 * 
+	 * @param autoHide
+	 */
+	public void setAutoHide(boolean autoHide) {
+		display.setAutoHide(autoHide);
+	}
+
+	/**
+	 * Sets whether this widget is enabled.
+	 *
+	 * @param enabled
+	 *            <code>true</code> to enable the widget, <code>false</code> to
+	 *            disable it
+	 */
+	public void setEnabled(boolean enabled) {
+		box.setEnabled(enabled);
+		if (!enabled) {
+			display.hideSuggestions();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.google.gwt.user.client.ui.Focusable#setFocus(boolean)
+	 */
+	public void setFocus(boolean focused) {
+		box.setFocus(focused);
+	}
+
+	/**
+	 * Sets the limit to the number of suggestions the oracle should provide. It
+	 * is up to the oracle to enforce this limit.
+	 *
+	 * @param limit
+	 *            the limit to the number of suggestions provided
+	 */
+	public void setLimit(int limit) {
+		this.limit = limit;
+	}
+
+	/**
+	 * Sets the key which need to be pressed to open the popup.<br>
+	 * See {@link ShortcutAction.KeyCode}
+	 *
+	 * @param key
+	 *            the new key
+	 */
+	public void setOpenPopupKey(int key) {
+		openPopupKey = key;
+	}
+
+	/**
+	 * Sets the key modifier which need to be pressed to open the popup.<br>
+	 * See {@link ShortcutAction.ModifierKey}
+	 *
+	 * @param modifier
+	 *            the new modifier
+	 */
+	public void setOpenPopupKeyModifier(int modifier) {
+		openPopupModifier = modifier;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.google.gwt.user.client.ui.Focusable#setTabIndex(int)
+	 */
+	public void setTabIndex(int index) {
+		box.setTabIndex(index);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.google.gwt.user.client.ui.HasText#setText(java.lang.String)
+	 */
+	public void setText(String text) {
+		box.setText(text);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.google.gwt.user.client.ui.HasValue#setValue(java.lang.Object)
+	 */
+	public void setValue(String newValue) {
+		box.setValue(newValue);
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see com.google.gwt.user.client.ui.HasValue#setValue(java.lang.Object,
+	 * boolean)
+	 */
+	public void setValue(String value, boolean fireEvents) {
+		box.setValue(value, fireEvents);
+	}
+
+	/**
+	 * Show the current list of suggestions.
+	 */
+	public void showSuggestionList() {
+		if (isAttached()) {
+			currentText = null;
+			refreshSuggestions();
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * com.google.gwt.user.client.ui.UIObject#onEnsureDebugId(java.lang.String)
+	 */
+	@Override
+	protected void onEnsureDebugId(String baseID) {
+		super.onEnsureDebugId(baseID);
+		display.onEnsureDebugId(baseID);
+	}
+
+	/**
+	 * Show suggestions.
+	 *
+	 * @param query
+	 *            the query
+	 */
+	void showSuggestions(String query) {
+		if (query.length() == 0) {
+			oracle.requestDefaultSuggestions(new Request(null, limit), callback);
+		} else {
+			oracle.requestSuggestions(new Request(query, limit), callback);
+		}
+	}
+
+	protected void acceptSuggestion() {
+		Suggestion suggestion = display.getCurrentSelection();
+		if (suggestion == null) {
+			display.hideSuggestions();
+		} else {
+			setNewSelection(suggestion);
+		}
+	}
+
+	/**
+	 * Adds the events to text box.
+	 */
+	private void addEventsToTextBox() {
+		class TextBoxEvents implements KeyDownHandler, KeyUpHandler, ValueChangeHandler<String> {
+
+			public void onKeyDown(KeyDownEvent event) {
+				if (event.isAnyModifierKeyDown()) {
+					if (isOpenPopupKey(event) && isOpenPopupModifier(event)) {
+						if (!display.isShowing()) {
+							showSuggestionList();
+						}
+					}
+				} else {
+					switch (event.getNativeKeyCode()) {
+					case KeyCodes.KEY_DOWN:
+						if (display.isShowing()) {
+							display.moveSelectionDown();
+						}
+						break;
+					case KeyCodes.KEY_UP:
+						if (display.isShowing()) {
+							display.moveSelectionUp();
+						}
+						break;
+					case KeyCodes.KEY_ESCAPE:
+						if (display.isShowing()) {
+							display.hideSuggestions();
+						}
+						break;
+					case KeyCodes.KEY_ENTER:
+					case KeyCodes.KEY_TAB:
+						if (display.isShowing()) {
+							acceptSuggestion();
+						}
+						break;
+					}
+				}
+			}
+
+			public void onKeyUp(KeyUpEvent event) {
+				if (!event.isAnyModifierKeyDown()) {
+					// After every user key input, refresh the popup's
+					// suggestions.
+					refreshSuggestions();
+				}
+			}
+
+			public void onValueChange(ValueChangeEvent<String> event) {
+				delegateEvent(OSuggestBox.this, event);
+			}
+		}
+
+		TextBoxEvents events = new TextBoxEvents();
+		box.addKeyDownHandler(events);
+		box.addKeyUpHandler(events);
+		box.addValueChangeHandler(events);
+	}
+
+	public boolean isOpenPopupKey(KeyDownEvent event) {
+		return event.getNativeEvent().getKeyCode() == openPopupKey;
+	}
+
+	public boolean isOpenPopupModifier(KeyDownEvent event) {
+		switch (openPopupModifier) {
+		case KeyCodes.KEY_ALT:
+			return event.isAltKeyDown();
+		case KeyCodes.KEY_CTRL:
+			return event.isControlKeyDown();
+		}
+		return false;
+	}
+
+	/**
+	 * Fire suggestion event.
+	 *
+	 * @param selectedSuggestion
+	 *            the selected suggestion
+	 */
+	private void fireSuggestionEvent(Suggestion selectedSuggestion) {
+		SelectionEvent.fire(this, selectedSuggestion);
+	}
+
+	/**
+	 * Refresh suggestions.
+	 */
+	private void refreshSuggestions() {
+		// Get the raw text.
+		String text = getText();
+		if (text.equals(currentText)) {
+			return;
+		} else {
+			currentText = text;
+		}
+		showSuggestions(text);
+	}
+
+	/**
+	 * Set the new suggestion in the text box.
+	 *
+	 * @param curSuggestion
+	 *            the new suggestion
+	 */
+	private void setNewSelection(Suggestion curSuggestion) {
+		assert curSuggestion != null : "suggestion cannot be null";
+		currentText = curSuggestion.getReplacementString();
+		setText(currentText);
+		display.hideSuggestions();
+		fireSuggestionEvent(curSuggestion);
+	}
+
+	/**
+	 * Sets the suggestion oracle used to create suggestions.
+	 *
+	 * @param oracle
+	 *            the oracle
+	 */
+	private void setOracle(SuggestOracle oracle) {
+		this.oracle = oracle;
+	}
+
+	/**
+	 * Sets the suggestion enabled.
+	 *
+	 * @param suggestionEnabled
+	 *            the new suggestion enabled
+	 */
+	public void setSuggestionEnabled(boolean suggestionEnabled) {
+		((ODelegatingOracle) oracle).setSuggestionEnabled(suggestionEnabled);
+	}
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestion.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestion.java
new file mode 100644
index 0000000..b289dc2
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/OSuggestion.java
@@ -0,0 +1,77 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.OQueryDelegate.SuggestionResult;
+
+import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Suggestion returned from the server.
+ */
+public class OSuggestion implements Suggestion {
+
+	/** The uuid. */
+	private final String uuid;
+	
+	/** The display string. */
+	private final String displayString;
+
+	/**
+	 * Instantiates a new o suggestion.
+	 *
+	 * @param result the result
+	 */
+	public OSuggestion(SuggestionResult result) {
+		this(result.uuid, result.displayText);
+	}
+
+	/**
+	 * Instantiates a new o suggestion.
+	 *
+	 * @param uuid the uuid
+	 * @param displayString the display string
+	 */
+	public OSuggestion(String uuid, String displayString) {
+		super();
+		this.uuid = uuid;
+		this.displayString = displayString;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.google.gwt.user.client.ui.SuggestOracle.Suggestion#getDisplayString()
+	 */
+	@Override
+	public String getDisplayString() {
+		return displayString;
+	}
+
+	/* (non-Javadoc)
+	 * @see com.google.gwt.user.client.ui.SuggestOracle.Suggestion#getReplacementString()
+	 */
+	@Override
+	public String getReplacementString() {
+		return displayString;
+	}
+
+	/**
+	 * An unique id which identifies the suggestion.
+	 *
+	 * @return the uuid
+	 */
+	public String getUuid() {
+		return uuid;
+	}
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldClientRpc.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldClientRpc.java
new file mode 100644
index 0000000..8184a19
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldClientRpc.java
@@ -0,0 +1,63 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import java.util.List;
+
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.OQueryDelegate.SuggestionResult;
+
+import com.vaadin.shared.communication.ClientRpc;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface SuggestTextFieldClientRpc.
+ */
+public interface SuggestTextFieldClientRpc extends ClientRpc {
+
+	/**
+	 * Response from the server with suggestions. Request and response are
+	 * linked by the handleId.
+	 *
+	 * @param handleId
+	 *            the handle id
+	 * @param response
+	 *            the response
+	 */
+	public void respond(String handleId, List<SuggestionResult> response);
+
+	/**
+	 * Opens the popup if not already opened and shows the suggested values.
+	 */
+	public void openPopup();
+
+	/**
+	 * Closes the popup if open. Else it has no effect.
+	 */
+	public void closePopup();
+
+	/**
+	 * Navigates the selected suggestion to the next one available.
+	 */
+	public void navigateToNext();
+
+	/**
+	 * Navigates the selected suggestion to the previous one available.
+	 */
+	public void navigateToPrevious();
+	
+	/**
+	 * Selects the current suggestion.
+	 */
+	public void selectCurrent();
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldConnector.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldConnector.java
new file mode 100644
index 0000000..1116584
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldConnector.java
@@ -0,0 +1,151 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import java.util.List;
+
+import org.eclipse.osbp.vaadin.addons.suggesttext.SuggestTextField;
+import org.eclipse.osbp.vaadin.addons.suggesttext.client.OQueryDelegate.SuggestionResult;
+
+import com.google.gwt.event.logical.shared.SelectionEvent;
+import com.google.gwt.event.logical.shared.SelectionHandler;
+import com.google.gwt.user.client.ui.SuggestOracle.Suggestion;
+import com.google.gwt.user.client.ui.ValueBoxBase;
+import com.vaadin.client.ComponentConnector;
+import com.vaadin.client.ConnectorHierarchyChangeEvent;
+import com.vaadin.client.communication.RpcProxy;
+import com.vaadin.client.communication.StateChangeEvent;
+import com.vaadin.client.ui.AbstractSingleComponentContainerConnector;
+import com.vaadin.shared.ui.Connect;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class SuggestTextFieldConnector.
+ */
+@SuppressWarnings("serial")
+@Connect(SuggestTextField.class)
+public class SuggestTextFieldConnector extends AbstractSingleComponentContainerConnector
+		implements SelectionHandler<Suggestion> {
+
+	/** The rpc. */
+	private SuggestTextFieldServerRpc rpc = RpcProxy.create(SuggestTextFieldServerRpc.class, this);
+	
+	/** The query delegate. */
+	private OQueryDelegate queryDelegate;
+
+	/**
+	 * Instantiates a new suggest text field connector.
+	 */
+	public SuggestTextFieldConnector() {
+		registerRpc(SuggestTextFieldClientRpc.class, new SuggestTextFieldClientRpc() {
+			@Override
+			public void respond(String handle, List<SuggestionResult> response) {
+				queryDelegate.respond(handle, response);
+			}
+
+			@Override
+			public void openPopup() {
+				getWidget().openPopup();
+			}
+
+			@Override
+			public void closePopup() {
+				getWidget().closePopup();
+			}
+
+			@Override
+			public void navigateToNext() {
+				getWidget().navigateToNext();
+			}
+
+			@Override
+			public void navigateToPrevious() {
+				getWidget().navigateToPrevious();
+			}
+
+			@Override
+			public void selectCurrent() {
+				getWidget().selectCurrent();
+			}
+		});
+	}
+
+	/* (non-Javadoc)
+	 * @see com.vaadin.client.ui.AbstractComponentConnector#getWidget()
+	 */
+	@Override
+	public OSuggestBox getWidget() {
+		return (OSuggestBox) super.getWidget();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.vaadin.client.ui.AbstractComponentConnector#createWidget()
+	 */
+	public OSuggestBox createWidget() {
+		queryDelegate = new OQueryDelegate(rpc);
+		OSuggestBox widget = new OSuggestBox(new ODelegatingOracle(queryDelegate));
+		widget.addSelectionHandler(this);
+		return widget;
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.vaadin.client.ui.AbstractComponentConnector#getState()
+	 */
+	@Override
+	public SuggestTextFieldState getState() {
+		return (SuggestTextFieldState) super.getState();
+	}
+
+	/* (non-Javadoc)
+	 * @see com.vaadin.client.ui.AbstractComponentConnector#onStateChanged(com.vaadin.client.communication.StateChangeEvent)
+	 */
+	@Override
+	public void onStateChanged(StateChangeEvent stateChangeEvent) {
+		super.onStateChanged(stateChangeEvent);
+
+		getWidget().setLimit(getState().limit);
+		getWidget().setPopupDelay(getState().popupDelay);
+		getWidget().setSuggestionEnabled(getState().suggestionEnabled);
+		getWidget().setAutoHide(getState().autoHide);
+		getWidget().setOpenPopupKey(getState().openPopup_key);
+		getWidget().setOpenPopupKeyModifier(getState().openPopup_modifier);
+	}
+
+	/* (non-Javadoc)
+	 * @see com.google.gwt.event.logical.shared.SelectionHandler#onSelection(com.google.gwt.event.logical.shared.SelectionEvent)
+	 */
+	@Override
+	public void onSelection(SelectionEvent<Suggestion> event) {
+		OSuggestion suggestion = (OSuggestion) event.getSelectedItem();
+		if (suggestion != null) {
+			rpc.selectionChanged(suggestion.getUuid());
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see com.vaadin.client.HasComponentsConnector#updateCaption(com.vaadin.client.ComponentConnector)
+	 */
+	@Override
+	public void updateCaption(ComponentConnector connector) {
+
+	}
+
+	/* (non-Javadoc)
+	 * @see com.vaadin.client.ConnectorHierarchyChangeEvent.ConnectorHierarchyChangeHandler#onConnectorHierarchyChange(com.vaadin.client.ConnectorHierarchyChangeEvent)
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent connectorHierarchyChangeEvent) {
+		getWidget().initialize((ValueBoxBase<String>) getContent().getWidget());
+	}
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldServerRpc.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldServerRpc.java
new file mode 100644
index 0000000..c2ebc8e
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldServerRpc.java
@@ -0,0 +1,40 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import com.vaadin.shared.communication.ServerRpc;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Interface SuggestTextFieldServerRpc.
+ */
+public interface SuggestTextFieldServerRpc extends ServerRpc {
+
+	/**
+	 * Requests a response with suggestions from the server.
+	 * 
+	 * @param handleId
+	 *            a unique id for every request to link request/response.
+	 * @param filter the filter string.
+	 * @param limit the maximum number of suggestions to be contained in the response. 
+	 */
+	public void requestSuggestions(String handleId, String filter, int limit);
+
+	/**
+	 * The suggestion with the given id was selected.
+	 *
+	 * @param uuid the uuid
+	 */
+	public void selectionChanged(String uuid);
+
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldState.java b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldState.java
new file mode 100644
index 0000000..2bc82bc
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/client/SuggestTextFieldState.java
@@ -0,0 +1,55 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.suggesttext.client;
+
+import com.vaadin.event.ShortcutAction;
+import com.vaadin.shared.AbstractComponentState;
+
+/**
+ * The Class SuggestTextFieldState.
+ */
+@SuppressWarnings("serial")
+public class SuggestTextFieldState extends AbstractComponentState {
+
+	/**
+	 * The popup delay in milliseconds.
+	 */
+	public int popupDelay = 450;
+
+	/**
+	 * How many suggestions should be displayed.
+	 */
+	public int limit = 10;
+
+	/**
+	 * True, if suggestions should be enabled. False otherwise.
+	 */
+	public boolean suggestionEnabled = true;
+
+	/**
+	 * If true, then the suggestions are hidden, if the user clicks outside the
+	 * popup.
+	 */
+	public boolean autoHide = true;
+
+	/**
+	 * Key to open the popup in combination with the {@link #openPopup_modifier}
+	 */
+	public int openPopup_key = ShortcutAction.KeyCode.ARROW_DOWN;
+
+	/**
+	 * Key modifier to open the popup in combination with the
+	 * {@link #openPopup_key}
+	 */
+	public int openPopup_modifier = ShortcutAction.ModifierKey.ALT;
+}
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/public/suggesttext/styles.css b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/public/suggesttext/styles.css
new file mode 100644
index 0000000..74d032f
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/src/org/eclipse/osbp/vaadin/addons/suggesttext/public/suggesttext/styles.css
@@ -0,0 +1,18 @@
+.o-SuggestBoxPopup {
+	background-color: white;
+	color: darkgray;
+	
+	font-style: normal;
+    font-variant: normal;
+    font-weight: 300;
+    font-stretch: normal;
+    font-size: 16px;
+    line-height: 1.55;
+    font-family: 'Open Sans', sans-serif;
+}
+
+.o-SuggestBoxPopup .item-selected {
+	background-color: darkgray;
+	color: white;
+}
+
diff --git a/org.eclipse.osbp.vaadin.addons.suggesttext/test/org/eclipse/osbp/vaadin/addons/customcombo/CustomComboTest.java b/org.eclipse.osbp.vaadin.addons.suggesttext/test/org/eclipse/osbp/vaadin/addons/customcombo/CustomComboTest.java
new file mode 100644
index 0000000..e5cae62
--- /dev/null
+++ b/org.eclipse.osbp.vaadin.addons.suggesttext/test/org/eclipse/osbp/vaadin/addons/customcombo/CustomComboTest.java
@@ -0,0 +1,99 @@
+/**
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Florian Pirchner <florian.pirchner@gmail.com> - Initial implementation
+ */
+package org.eclipse.osbp.vaadin.addons.customcombo;
+
+import com.vaadin.testbench.ScreenshotOnFailureRule;
+import com.vaadin.testbench.TestBenchTestCase;
+import com.vaadin.testbench.elements.ButtonElement;
+import com.vaadin.testbench.elements.LabelElement;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.openqa.selenium.firefox.FirefoxDriver;
+
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+/**
+ * This class contains JUnit tests, which are run using Vaadin TestBench 4.
+ *
+ * To run this, first get an evaluation license from
+ * https://vaadin.com/addon/vaadin-testbench and follow the instructions at
+ * https://vaadin.com/directory/help/installing-cval-license to install it.
+ *
+ * Once the license is installed, you can run this class as a JUnit test.
+ */
+public class CustomComboTest extends TestBenchTestCase {
+    @Rule
+    public ScreenshotOnFailureRule screenshotOnFailureRule =
+            new ScreenshotOnFailureRule(this, true);
+
+    @Before
+    public void setUp() throws Exception {
+        setDriver(new FirefoxDriver()); // Firefox
+
+        // To use Chrome, first install chromedriver.exe from
+        // http://chromedriver.storage.googleapis.com/index.html
+        // on your system path (e.g. C:\Windows\System32\)
+        //   setDriver(new ChromeDriver()); // Chrome
+
+        // To use Internet Explorer, first install iedriverserver.exe from
+        // http://selenium-release.storage.googleapis.com/index.html?path=2.43/
+        // on your system path (e.g. C:\Windows\System32\)
+        //   setDriver(new InternetExplorerDriver()); // IE
+
+        // To test headlessly (without a browser), first install phantomjs.exe
+        // from http://phantomjs.org/download.html on your system path
+        // (e.g. C:\Windows\System32\)
+        //   setDriver(new PhantomJSDriver()); // PhantomJS headless browser
+    }
+
+    /**
+     * Opens the URL where the application is deployed.
+     */
+    private void openTestUrl() {
+        getDriver().get("http://localhost:8080/org.eclipse.osbp.vaadin.addons.customcombo");
+    }
+
+    @Test
+    public void testClickButton() throws Exception {
+        openTestUrl();
+
+        // At first there should be no labels
+        assertFalse($(LabelElement.class).exists());
+
+        // Click the button
+        ButtonElement clickMeButton = $(ButtonElement.class).
+                caption("Click Me").first();
+        clickMeButton.click();
+
+        // There should now be one label
+        assertEquals(1, $(LabelElement.class).all().size());
+        // ... with the specified text
+        assertEquals("Thank you for clicking",
+                $(LabelElement.class).first().getText());
+
+        // Click the button again
+        clickMeButton.click();
+
+        // There should now be two labels
+        List<LabelElement> allLabels = $(LabelElement.class).all();
+        assertEquals(2, allLabels.size());
+        // ... and the last label should have the correct text
+        LabelElement lastLabel = allLabels.get(1);
+        assertEquals("Thank you for clicking", lastLabel.getText());
+    }
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..68fa3ae
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ *                                                                            
+ * Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
+ *                                                                            
+ * All rights reserved. This program and the accompanying materials           
+ * are made available under the terms of the Eclipse Public License v1.0       
+ * which accompanies this distribution, and is available at                  
+ * http://www.eclipse.org/legal/epl-v10.html                                 
+ *                                                                            
+ * Contributors:   
+ * Christophe Loetz (Loetz GmbH&Co.KG) - Initial implementation 
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.eclipse.osbp.releng.maven</groupId>
+		<artifactId>org.eclipse.osbp.releng.maven.parent.tycho</artifactId>
+		<version>0.9.0-SNAPSHOT</version>
+		<relativePath />
+	</parent>
+
+	<groupId>org.eclipse.osbp.vaadin.addons</groupId>
+	<artifactId>org.eclipse.osbp.vaadin.addons.aggregator</artifactId>
+	<version>0.9.0-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+	<url>${osbp.site.repository.url}</url>
+	<scm>
+		<url>${osbp.scm.url}</url>
+		<connection>${osbp.scm.connection}</connection>
+		<developerConnection>${osbp.scm.connection.dev}</developerConnection>
+		<tag>HEAD</tag>
+	</scm>
+
+	<properties>
+		<osbp.gitrepo.name>${project.groupId}</osbp.gitrepo.name>
+	</properties>
+
+	<modules>
+		<module>org.eclipse.osbp.vaadin.addons.absolutelayout</module>
+		<module>org.eclipse.osbp.vaadin.addons.designer.overlay</module>
+		<module>org.eclipse.osbp.vaadin.addons.suggesttext</module>
+<!--		<module>org.eclipse.osbp.vaadin.addons.feature</module> -->
+	</modules>
+
+	<build>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.eclipse.tycho</groupId>
+					<artifactId>target-platform-configuration</artifactId>
+					<version>${tycho-version}</version>
+					<configuration>
+						<resolver>p2</resolver>
+						<pomDependencies>consider</pomDependencies>
+						<environments>
+							<environment>
+								<os>win32</os>
+								<ws>win32</ws>
+								<arch>x86_64</arch>
+							</environment>
+							<environment>
+								<os>linux</os>
+								<ws>gtk</ws>
+								<arch>x86</arch>
+							</environment>
+							<environment>
+								<os>linux</os>
+								<ws>gtk</ws>
+								<arch>x86_64</arch>
+							</environment>
+							<environment>
+								<os>macosx</os>
+								<ws>cocoa</ws>
+								<arch>x86_64</arch>
+							</environment>
+						</environments>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
+</project>
