diff --git a/OS-bea-WG.html b/OS-bea-WG.html
index 8733e66..546ecb1 100644
--- a/OS-bea-WG.html
+++ b/OS-bea-WG.html
@@ -17,7 +17,7 @@
 	<![endif]-->
 	
 	<!-- Le fav and touch icons -->
-	<link rel="shortcut icon" href="images/OS-logo-32x32.jpg">
+	<link rel="shortcut icon" href="images/OS-logo-32x32.png">
 	
 	<link href="css/bootstrap.css" rel="stylesheet" type='text/css'>
 	<link href="css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
@@ -97,7 +97,7 @@
 <!---------Slider --------------------------------------------------->
   <div class="row" style="text-align:center">
     <div>
-      <div id="coverflow">
+      <div id="coverflow"  style="height: 200px">
         <img class="intro-screenshot" style="display:none;" src="images/slide2_09.jpg"alt="OSBP concept">
         <img class="intro-screenshot" src="images/slide7_05.jpg" alt="OSBP in Eclipse">
         <img class="intro-screenshot" style="display:none;" src="images/slide4_05.jpg" alt="OSBP application architecture">
@@ -106,15 +106,19 @@
   </div>
 <!---------End Slider --------------------------------------------------->
 
-
 <div id="OS.bea">
   <div class="container">
     <div class="row quick-overview">
 	
-      <div class="span12">
-        <h1><center>You are invited to joint the OS.bea Working Group !</h1>
-      </div>
-<p>
+		<div class="span12" style="text-align:center">
+			<h1>You are invited to joint the OS.bea Working Group !</h1>
+		</div>
+		<!--------- Buttons --------------------------------------------------->
+		<div class="cta-section" style="text-align:center">
+		<a href="subscribe2mailinglist.html" style="margin:10px;" class="has-popover btn btn-success btn-large pull_right">subscribe to the OS.bea mailing list</a>
+		</div>
+		<!---------End Buttons --------------------------------------------------->
+<p />
 <h2>Scope, Goals and Vision</h2>
 The OS.bea (open standard business and enterprise application) working group drives the evolution and broad adoption of technologies of the Open Standard Business Platform (OSBP).
 <br><br>
diff --git a/css/style.css b/css/style.css
index d51155e..f5bcc13 100644
--- a/css/style.css
+++ b/css/style.css
@@ -595,7 +595,7 @@
 }
 
 /* .thumb .zoom:hover { */
-/* 	background: url(..../images/videoOverlay.png) 0 -80px no-repeat transparent; */
+/* 	background: url(../images/videoOverlay.png) 0 -80px no-repeat transparent; */
 /* } */
 #zoo table {
 	margin : 0;
@@ -1321,5 +1321,9 @@
 #OS\.bea {
     /* workaround for slider-height */
     position: relative;
-    top: -180px;
+    top: -180px; 
+    }
+
+#OS\.bea-WG {
+    position: relative;
     }
diff --git a/subscribe2mailinglist.html b/subscribe2mailinglist.html
new file mode 100644
index 0000000..0250b24
--- /dev/null
+++ b/subscribe2mailinglist.html
@@ -0,0 +1,263 @@
+<!DOCTYPE html>
+<html>
+
+ <head>
+	<meta charset="UTF-8">
+	<title>Subscribe to OSBP's Working Group OS.bea</title>
+	
+	<meta name="viewport" content="width=device-width, initial-scale=1.0">
+	<meta name="description"
+		content="The website of Eclipse OSBP, an open-source no-code and low-code development platform for business and enterprise applications">
+	<meta name="author" content="(c) Compex Systemhaus GmbH, Germnany">
+
+	<!--  styles -->
+	<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
+	<!--[if lt IE 9]>
+	  <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+	<![endif]-->
+	
+	<!-- Le fav and touch icons -->
+	<link rel="shortcut icon" href="images/OS-logo-32x32.png">
+	
+	<link href="css/bootstrap.css" rel="stylesheet" type='text/css'>
+	<link href="css/bootstrap-responsive.css" rel="stylesheet" type='text/css'>
+	<link href="css/shield-responsive.css" rel="stylesheet" type='text/css'>
+	<link href='css/fonts.css' rel='stylesheet' type='text/css'>
+	<link href="css/prettyPhoto.css" rel="stylesheet" media="screen" type='text/css'>
+	<link href="css/prettify.css" type="text/css" rel="stylesheet"/>
+	<link href="css/style.css" rel="stylesheet" type='text/css'>
+	
+	<!-- cover flow -->
+	<link href="css/coverflow.css" rel="stylesheet" type='text/css'>
+	<!--[if lt IE 9]>
+	  <link href="css/iebugs.css" rel="stylesheet" type='text/css'>
+	<![endif]-->
+</head>
+
+
+<body>
+  
+  <!-- Google Tag Manager --  >
+	<noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-TGDS5S"
+	height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
+	<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
+	new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
+	j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
+	'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
+	})(window,document,'script','dataLayer','GTM-TGDS5S');</script>
+  <!-- End Google Tag Manager -->
+
+<header class="site-header">
+
+<!-- Navbar -->
+  <div class="navbar navbar-fixed-top">
+    <div class="navbar-inner">
+      <div class="container">
+        <a class="btn btn-navbar" data-toggle="collapse"
+          data-target=".nav-collapse"> <span class="icon-bar"></span> <span
+          class="icon-bar"></span> <span class="icon-bar"></span>
+        </a> <a class="brand" href="index.html"></a>
+        
+		<div class="nav-collapse collapse" style="height: 0px;">
+          <ul class="nav">
+            <!--li ><a href="news.html">News</a></li-->
+			<li ><a href="index.html">Home</a></li>	
+			<li ><a href="download.html">Download</a></li>
+            <li ><a href="documentation.html">Documentation</a></li>
+            <li ><a href="community.html">Community</a></li>
+			<li ><a href="OS-bea-WG.html">OS.bea Working Group</a></li>			
+            <li class="dropdown">
+              <a class="dropdown-toggle" data-toggle="dropdown" href="#">Support &amp; Training<span class="caret"></span></a>
+              <ul class="dropdown-menu">
+                <li><a href="http://www.osbee.org/services/" target="_blank">OS.bee</a></li>
+                <li><a href="http://www.compex-commerce.com/en/services/" target="_blank">Compex</a></li>
+              </ul>
+            </li>
+          </ul>
+        </div>
+  <!-- Navbar End -->
+        </div>
+    </div>
+  </div>
+  <!-- Navbar End -->
+  
+</header>
+
+
+<!--Container-->
+
+<div id="header_wrapper">
+  <div class="container image-slider">
+    <div class="row">
+      <h2>
+        Subscribe to OS.bea the OSBP Working Group 
+      </h2>
+      <p>
+	  </p>
+	  <br>
+    </div>
+  </div>
+</div>
+
+
+<div id="OS.bea-WG">
+  <div class="container">
+    <div class="row quick-overview">
+	
+		<p>Thank you for being interested. Be informed that mails to the mailing list are 
+		dispatched to all mailing list subscribers and your mail address will be visible 
+		to the receivers. In the contrary the receivers will remain anonymous.</p>
+		
+		<p>For your information: You may unsubscribe from the mailing list at any time.</p>
+		
+
+		
+		
+		<h2>How to subscribe</h2>
+
+
+		
+		<p>Access to the mailing lists is given in your Eclipse account. If you dont have an Eclipse account, you'll first have to create
+		one and then you'll be able to subscribe to the OS.bea mailing list.</p>
+		
+		<p><H3>Step 1: Create an Eclipse account (if you already have one, continue with step 2)</H3></p>
+		<br>	
+		
+		<ul>
+		<li>Click on the following link <a href="https://accounts.eclipse.org/mailing-list/osbea-wg"> OS.bea WG</a>
+
+		which will lead you to Eclipse's apropriate internet page.</li>
+		<li>Scroll down and click the link "create a new account", fill the form and submit it.</li>
+		<li>You will receive an email from Eclipse which you must confirm. Once the email confirmed your
+		account will be created.</li>
+		</ul>
+		
+		<br>
+		<p><H3>Step 2: Subscribe to the OS.bea mailing list</H3></p>
+		<br>
+		
+		<ul>
+		<li>Login to your Eclipse account and clipck on the "Mailing lists" link and the "Eclipse Mailing List" page will open.</li>
+		<li>Click the link: „Manage your Mailings Lists“ which will open the "Manage My Subscriptions" page. </li>
+		
+		<li>In the search field type „osbea“ (please take care to type exactly the word as written here) 
+		and search for the mailing list by pressing the search button.</li>
+		
+		<li>After successful search click the green button "Subscribe".</li>
+		
+		<li>Eclipse then sends you another e-mail to confirm the subscription. 
+		This time, this is not done via a link, but by ansering the e-mail, 
+		whereby you must make sure that in the subject of your e-mail eventually 
+		supplemented letters are deleted before sending. In other words the object 
+		of your mail must exactly match the object of Eclipse's mail</li>
+		
+		<li>Subsequently, Eclipse will send you a confirmation mail.</li>
+		
+		</ul>
+		<br>
+		
+		<p>In the future you will get all e-mails sent to the mailing list. 
+		If you want to send one yourself, send it to the following address: osbea-wg@eclipse.org</p>
+		
+		<br>
+		<p>Thank you for your interest!</p>
+				
+		<br><br>
+		
+		<br><br>
+
+	</div>
+  </div>
+</div>
+
+<footer class="site-footer">
+  <div id="extra">
+    <div class="inner">
+      <div class="container">
+        <div class="row">
+          <div class="span6">
+            <h3 class="footer-links-header">Quick Links</h3>
+            <ul class="footer-links clearfix">
+              <li><a href="http://www.eclipse.org/legal/privacy.php">Privacy Policy</a><br>
+              <a href="http://www.eclipse.org/legal/termsofuse.php">Terms of Use</a><br>
+              <a href="http://www.eclipse.org/legal/copyright.php">Copyright Agent</a><br>
+              <a href="http://www.eclipse.org/legal/">Legal</a></li>
+            </ul>
+          </div>
+		  <div class="span6">
+            <h3 class="footer-links-header">&nbsp;  </h3>
+
+			<ul class="footer-links clearfix">
+              <li><a href="http://www.eclipse.org">Eclipse Home</a><br>
+              <a href="http://marketplace.eclipse.org/">Market Place</a><br>
+              <a href="http://live.eclipse.org/">Eclipse Live</a><br>
+              <a href="http://www.planeteclipse.org/">Eclipse Planet</a></li>
+            </ul>
+
+          </div>		  
+       </div>
+      </div>
+    </div>
+  </div>
+  
+  <a href="#" class="scrollup fadeOutRight animated" style="display: none;">ScrollUp</a>
+  
+  <!-- Le javascript
+      ==================================================
+      Placed at the end of the document so the pages load faster -->
+  
+  <script src="js/jquery-1.11.3.min.js"></script>
+  <script src="js/bootstrap.min.js"></script>
+  <script src="js/jquery.easing.1.3.js" type="text/javascript"></script>
+  <script src="js/jquery.prettyPhoto.js" type="text/javascript"></script>
+  <script src="js/twitter.js" type="text/javascript"></script>
+  <script src="js/prettify.js" type="text/javascript"></script>
+  <script src="js/lang-xtend.js" type="text/javascript"></script>
+  <script src="js/lang-common.js" type="text/javascript"></script>
+  <script src="js/custom.js" type="text/javascript"></script>
+  <script src="https://apis.google.com/js/platform.js" async defer></script>
+  
+  <!--script type="text/javascript">
+    var _gaq = _gaq || [];  
+      _gaq.push([ '_setAccount', 'UA-2429174-3' ]);
+    _gaq.push([ '_trackPageview' ]);
+    (function() {
+      var ga = document.createElement('script');
+      ga.type = 'text/javascript';
+      ga.async = true;
+      ga.src = ('https:' == document.location.protocol ? 'https://ssl'
+          : 'http://www')
+          + '.google-analytics.com/ga.js';
+      var s = document.getElementsByTagName('script')[0];
+      s.parentNode.insertBefore(ga, s);
+    })();
+  </script-->
+  
+  <script src="js/coverflow.min.js" type="text/javascript"></script>
+  <script>
+      $(function() {
+        $('#coverflow').coverflow({
+          active : 1,
+          visibleAside: 2,
+          overlap : 0.5,
+          scale : 0.9,
+          angle : 20,
+          trigger : {
+            "itemfocus" : true,
+            "swipe" : true,
+            "mousewheel" : false
+          }
+        });
+        $('#coverflow :hidden').toggle();
+        $(window).resize(function() {
+          $('#coverflow').coverflow();
+        });
+      });
+
+  </script>
+</footer> 
+  
+  
+  
+
+<body>
\ No newline at end of file
