This project is an effort by many people. If you feel that your name
should be in here and has been omitted in error, please open an issue
with the Apache Velocity Issue tracker located at

https://issues.apache.org/jira/browse/VELOCITY

Aki Nieminen
Alexey Pachenko
Anil K. Vijendran
Attila Szegedi
Bob McWhirter
Christoph Reck
Claude Brisson
Daniel Rall
Dave Bryson
David Kinnvall
Eelco Hillenius
Fedor Karpelevitch
Gal Shachor
Geir Magnusson Jr.
Henning P. Schmiedehausen
Jason van Zyl
Jeff Bowden
Jon S. Stevens
Jose Alberto Fernandez
Kasper Nielsen
Kent Johnson
Kyle F. Downey
Leon Messerschmidt
Llewellyn Falco
Matt Raible
Matthijs Lambooy
Nathan Bubna
Paulo Gaspar
Peter Romianowski
Robert Burrell Donkin
Sam Ruby
Sean Legassick
Serge Knystautas
Stephane Bailliez
Stephen Habermann
Sylwester Lachiewicz
Will Glass-Husain
