<?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 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="website.xsd">

	<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></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>
				<tr>
					<td>Denis Kandrov</td>
					<td>Independent</td>
					<td></td>
				</tr>
				<tr>
					<td>Yulia Algaer</td>
					<td>Independent</td>
					<td></td>
				</tr>
				<tr>
					<td>Artyom Horuzhenko</td>
					<td>Independent</td>
					<td></td>
				</tr>
								
			</table>
			
			<p>
			<a href="team-list-ru.html">Here</a> is the Russian version of this page.
			</p>
		</section>

	</body>
</document>
