<?xml version="1.0"?>
<!--
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
 -->
<document>

	<properties>
		<title>Project Team</title>
		<author email="sebawagner@apache.org">
			Sebastian Wagner
		</author>
	</properties>

	<body>

		<section name="OpenMeetings Committers">

			<p>
				The people listed below have made significant contributions to
				Podling
				by
				working long and hard to make quality software for the rest
				of the world to
				use.
			</p>

			<p>
				If you would like to contribute to Podling, please see the
				<a
					href="https://cwiki.apache.org/confluence/display/OPENMEETINGS/New+committers+and+developers+task+idea+list"
					target="_BLANK">https://cwiki.apache.org/confluence/display/OPENMEETINGS/New+committers+and+developers+task+idea+list
				</a>
				to find areas where you can contribute.
				If there is nothing in there
				that suits your interest, but you still
				have
				ideas, please feel free
				to suggest them on the mailing list.
			</p>
			<p>
				If you would like to become a committer, please see
				<a href="get-involved.html">Get Involved</a>
				.
			</p>

			<table>
				<tr>
					<th>Name</th>
					<th>Organization</th>
					<th>Contact/Website</th>
				</tr>
				<tr>
					<td>Sebastian Wagner</td>
					<td>Independent</td>
					<td>
						<a href="https://twitter.com/#!/dead_lock" target="_BLANK" rel="nofollow">https://twitter.com/#!/dead_lock
						</a>
					</td>
				</tr>
				<tr>
					<td>Alexei Fedotov</td>
					<td>Independent</td>
					<td></td>
				</tr>
				<tr>
					<td>Evgeny Rovinsky</td>
					<td>Independent</td>
					<td></td>
				</tr>
				<tr>
					<td>Maxim Solodovnik</td>
					<td>Independent</td>
					<td></td>
				</tr>
				<tr>
					<td>Oliver Becherer</td>
					<td>Independent</td>
					<td></td>
				</tr>
				<tr>
					<td>Eugen Schwert</td>
					<td>Independent</td>
					<td>eugen.schwert@gmail.com</td>
				</tr>
				<tr>
					<td>Sascha Xander</td>
					<td>Independent</td>
					<td></td>
				</tr>
				<tr>
					<td>Johnny Strom</td>
					<td>Independent</td>
					<td></td>
				</tr>
				<tr>
					<td>Timur Tleukenov</td>
					<td>Independent</td>
					<td></td>
				</tr>
                                <tr>
					<td>Alvaro Bustos</td>
					<td>Independent</td>
					<td></td>
				</tr>
				<tr>
					<td>George Kirkham</td>
					<td>Independent</td>
					<td></td>
				</tr>
				<tr>
					<td>Stephen Cottham</td>
					<td>Independent</td>
					<td></td>
				</tr>
				<tr>
					<td>Irina Arkhipets</td>
					<td>Independent</td>
					<td></td>
				</tr>
				<tr>
					<td>Vasiliy Degtyarev</td>
					<td>Independent</td>
					<td></td>
				</tr>
								
			</table>
			
			<p>
			<a href="team-list-ru.xml">Here</a> is the Russian version of this page.
			</p>
		</section>

	</body>
</document>
