<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file 
	distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to You 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="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
	<properties>
		<title>Issue Tracking</title>
	</properties>
	<body>

		<section name="Issue Tracking">
			<p>
				Bigtop tracks both bugs and enhancement requests
				<a href="https://issues.apache.org/jira/browse/BIGTOP">here</a>
				using Apache JIRA.
				We welcome input, however, before filing a request, please make sure you do the following:
			</p>
			<ul>
				<li>Search the JIRA database.</li>
				<li>
					Check the user
					<a href="./mail-lists.html">mailing list</a>
					, both by searching the archives and by asking questions.
				</li>
			</ul>
		</section>
	</body>
</document>
