diff --git a/libwccl/ops/functions/bool/predicates/pointagreement.cpp b/libwccl/ops/functions/bool/predicates/pointagreement.cpp
index 07400ab37ac1f0fc455bb340f7f0f46a1833589b..60ef77be6236904f47f97a2e778cc29dceb3a980 100644
--- a/libwccl/ops/functions/bool/predicates/pointagreement.cpp
+++ b/libwccl/ops/functions/bool/predicates/pointagreement.cpp
@@ -49,7 +49,7 @@ PointAgreement::BaseRetValPtr PointAgreement::apply_internal(const FunExecContex
 		// don't bother checking t2 unless current t1_tag matches enough categories
 		if (attribs->matching_categories(t1_tag) >= min_card) {
 			foreach (const Corpus2::Lexeme& t2_lex, t2->lexemes()) {
-				Corpus2::Tag& intersection = t1_tag.get_masked(t2_lex.tag());
+				Corpus2::Tag intersection = t1_tag.get_masked(t2_lex.tag());
 				// if the intersection matches enough categories we have agreement
 				if (attribs->matching_categories(intersection) >= min_card) {
 					return Predicate::True(context);