<?xml version="1.0"?>
<!-- Copyright 2006 The Apache Software Foundation 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>German Grekhov</td>
					<td>Independent</td>
					<td></td>
				</tr>
			</table>
		</section>

	</body>
</document>
