Contributors to this port of Lucene 4.8.0 to C# were Russell Trupiano and David Wan.
All changes are to be submitted under the apache 2.0 license.

The snowball stemmers in contrib/Snowball.Net/Snowball.Net/SF/Snowball
were developed by Martin Porter and Richard Boulton.

The full snowball package is available from http://snowball.tartarus.org/

Apache Lucene.Net is a port of Jakarta Lucene to C#.  
The port from Java to C# of version 1.4.0, 1.4.3, 1.9, 1.9.1, 2.0 and 2.1 were done 
primary by George Aroush. To contact George Aroush please visit http://www.aroush.net/.
Much thanks to George