diff --git lucene/src/test/org/apache/lucene/search/similarities/EasyStats.java lucene/src/test/org/apache/lucene/search/similarities/EasyStats.java
new file mode 100644
index 0000000..a713191
--- /dev/null
+++ lucene/src/test/org/apache/lucene/search/similarities/EasyStats.java
@@ -0,0 +1,137 @@
+package org.apache.lucene.search.similarities;
+
+import org.apache.lucene.search.Similarity;
+
+/**
+ * Stores all statistics commonly used ranking methods. 
+ * @author David Nemeskey
+ */
+public class EasyStats extends Similarity.Stats {
+    /** The number of documents. */
+    protected int numberOfDocuments;	// TODO: to long?
+    /** The total number of tokens in the field. */
+    protected long noFieldTokens;
+    /** The average field length. */
+    protected float avgFieldLength;
+    /** The document frequency. */
+    protected int docFreq;
+    /** The total number of occurrences of this term across all documents. */
+    // TODO: same field?
+    protected long totalTermFreq;
+    /** The total number of terms across all documents. */
+    // TODO: same field?
+    protected long sumTotalTermFreq;
+    /** The number of unique terms. */
+    // nocommit might be per-segment only
+    protected long uniqueTermCount;
+    
+	// -------------------------- Boost-related stuff --------------------------
+	
+    /** Query's inner boost. */
+    protected final float queryBoost;
+    /** Any outer query's boost. */
+    protected float topLevelBoost;
+    
+    /** Constructor. Sets the query boost. */
+	public EasyStats(float queryBoost) {
+		this.queryBoost = queryBoost;
+	}
+	
+	// ------------------------- Getter/setter methods -------------------------
+	
+	/** Returns the number of documents. */
+	public int getNumberOfDocuments() {
+		return numberOfDocuments;
+	}
+
+	/** Sets the number of documents. */
+	public void setNumberOfDocuments(int numberOfDocuments) {
+		this.numberOfDocuments = numberOfDocuments;
+	}
+
+	/** Returns the total number of tokens in the field. */
+	public long getNoFieldTokens() {
+		return noFieldTokens;
+	}
+
+	/** Sets the total number of tokens in the field. */
+	public void setNoFieldTokens(long noFieldTokens) {
+		this.noFieldTokens = noFieldTokens;
+	}
+
+	/** Returns the average field length. */
+	public float getAvgFieldLength() {
+		return avgFieldLength;
+	}
+
+	/** Sets the average field length. */
+	public void setAvgFieldLength(float avgFieldLength) {
+		this.avgFieldLength = avgFieldLength;
+	}
+
+	/** Returns the document frequency. */
+	public int getDocFreq() {
+		return docFreq;
+	}
+
+	/** Sets the document frequency. */
+	public void setDocFreq(int docFreq) {
+		this.docFreq = docFreq;
+	}
+
+	/** Returns the total number of occurrences of this term across all documents. */
+	public long getTotalTermFreq() {
+		return totalTermFreq;
+	}
+
+	/** Sets the total number of occurrences of this term across all documents. */
+	public void setTotalTermFreq(long totalTermFreq) {
+		this.totalTermFreq = totalTermFreq;
+	}
+
+	/** Returns the total number of terms across all documents. */
+	public long getSumTotalTermFreq() {
+		return sumTotalTermFreq;
+	}
+
+	/** Sets the total number of terms across all documents. */
+	public void setSumTotalTermFreq(long sumTotalTermFreq) {
+		this.sumTotalTermFreq = sumTotalTermFreq;
+	}
+
+	/** Returns the number of unique terms. */
+	public long getUniqueTermCount() {
+		return uniqueTermCount;
+	}
+
+	/** Sets the number of unique terms. */
+	public void setUniqueTermCount(long uniqueTermCount) {
+		this.uniqueTermCount = uniqueTermCount;
+	}
+
+	// -------------------------- Boost-related stuff --------------------------
+	
+	/** The square of the raw normalization value.
+	 * @see #rawNormalizationValue() */
+	@Override
+	public float getValueForNormalization() {
+		float rawValue = rawNormalizationValue();
+		return rawValue * rawValue;
+	}
+	
+	/** Computes the raw normalization value. This basic implementation returns
+	 * the query boost. Subclasses may override this method to include other
+	 * factors (such as idf), or to save the value for inclusion in
+	 * {@link #normalize(float, float)}, etc.
+	 */
+	protected float rawNormalizationValue() {
+		return queryBoost;
+	}
+
+	/** No normalization is done. {@code topLevelBoost} is saved in the object,
+	 * however. */
+	@Override
+	public void normalize(float queryNorm, float topLevelBoost) {
+		this.topLevelBoost = topLevelBoost;
+	}
+}
