diff --git a/libwccl/values/match.h b/libwccl/values/match.h
index 66161fab12fd14c8e57b9b3f08dd36e20b2a00f5..6685ce3d8f376ead79ecdd2518911f511a765cef 100644
--- a/libwccl/values/match.h
+++ b/libwccl/values/match.h
@@ -71,7 +71,7 @@ public:
 	 * Check if the match is empty (matches nothing). Match objects themselves
 	 * are by definition empty, child classes are sometimes or always non-empty.
 	 */
-	virtual bool empty() const {
+	bool empty() const {
 		return match_->empty();
 	}
 
@@ -79,7 +79,7 @@ public:
 	 * Getter for the first token matched. If the match is empty, must return
 	 * Nowhere.
 	 */
-	virtual Position first_token(const boost::shared_ptr<Corpus2::AnnotatedSentence>& s) const {
+	Position first_token(const boost::shared_ptr<Corpus2::AnnotatedSentence>& s) const {
 		return match_->first_token(s);
 	}
 
@@ -87,7 +87,7 @@ public:
 	 * Getter for the last token matched. If the match is empty, must return
 	 * Nowhere.
 	 */
-	virtual Position last_token(const boost::shared_ptr<Corpus2::AnnotatedSentence>& s) const {
+	Position last_token(const boost::shared_ptr<Corpus2::AnnotatedSentence>& s) const {
 		return match_->last_token(s);
 	}