diff --git a/libwccl/ops/functions/bool/predicates/pointagreement.h b/libwccl/ops/functions/bool/predicates/pointagreement.h
index cefa1f7c25058cf0381be5421528a9aed9163c25..98b18f1b971af1bb5036ec1b0c3c15d29d12ef50 100644
--- a/libwccl/ops/functions/bool/predicates/pointagreement.h
+++ b/libwccl/ops/functions/bool/predicates/pointagreement.h
@@ -3,6 +3,7 @@
 
 #include <libwccl/ops/functions/bool/predicate.h>
 #include <libwccl/values/position.h>
+#include <libwccl/values/tset.h>
 
 namespace Wccl {
 
diff --git a/libwccl/ops/functions/bool/predicates/strongagreement.h b/libwccl/ops/functions/bool/predicates/strongagreement.h
index 83c9dd630e1645936a6aebf05af67e12ce6c1478..3e215a511d32f5f19a60ddb2005799f04b06ede0 100644
--- a/libwccl/ops/functions/bool/predicates/strongagreement.h
+++ b/libwccl/ops/functions/bool/predicates/strongagreement.h
@@ -3,6 +3,7 @@
 
 #include <libwccl/ops/functions/bool/predicate.h>
 #include <libwccl/values/position.h>
+#include <libwccl/values/tset.h>
 
 namespace Wccl {
 
diff --git a/libwccl/ops/functions/bool/predicates/weakagreement.h b/libwccl/ops/functions/bool/predicates/weakagreement.h
index e4a47ab7ab14791210709439cd6c1c9aee150dbb..e8135ef289410df9748c141dc9828efed5591632 100644
--- a/libwccl/ops/functions/bool/predicates/weakagreement.h
+++ b/libwccl/ops/functions/bool/predicates/weakagreement.h
@@ -3,6 +3,7 @@
 
 #include <libwccl/ops/functions/bool/predicate.h>
 #include <libwccl/values/position.h>
+#include <libwccl/values/tset.h>
 
 namespace Wccl {
 
diff --git a/libwccl/ops/tagactions/relabel.h b/libwccl/ops/tagactions/relabel.h
index 418c28badf3760fad997e89a9c94222199380d70..f1b10ede2ebb33fde6d445137d55896d18cf7b6e 100644
--- a/libwccl/ops/tagactions/relabel.h
+++ b/libwccl/ops/tagactions/relabel.h
@@ -4,6 +4,7 @@
 #include <libwccl/ops/tagaction.h>
 #include <libwccl/values/position.h>
 #include <libwccl/values/bool.h>
+#include <libwccl/values/tset.h>
 #include <libwccl/ops/function.h>
 
 namespace Wccl {
diff --git a/libwccl/ops/tagactions/unify.h b/libwccl/ops/tagactions/unify.h
index 33fe56aabc030e0123ebad317364d35f631588b9..17eb81b0ea0ffa376184003fb698f0f82844ffff 100644
--- a/libwccl/ops/tagactions/unify.h
+++ b/libwccl/ops/tagactions/unify.h
@@ -4,6 +4,7 @@
 #include <libwccl/ops/tagaction.h>
 #include <libwccl/values/position.h>
 #include <libwccl/values/bool.h>
+#include <libwccl/values/tset.h>
 #include <libwccl/ops/function.h>
 
 namespace Wccl {
diff --git a/libwccl/variables.cpp b/libwccl/variables.cpp
index 6f51e065595534571b3d9f35548245fa0ed177a8..f7484fc8b143bd66010ec61a4921e502a092f41d 100644
--- a/libwccl/variables.cpp
+++ b/libwccl/variables.cpp
@@ -1,6 +1,10 @@
 #include <libwccl/variables.h>
 #include <boost/mpl/always.hpp>
 #include <boost/mpl/pop_front.hpp>
+#include <libwccl/values/match.h>
+#include <libwccl/values/position.h>
+#include <libwccl/values/strset.h>
+#include <libwccl/values/tset.h>
 
 namespace Wccl {
 
diff --git a/libwccl/variables.h b/libwccl/variables.h
index d836bab49034fc32eea7fe5f835b3236feeb1a6f..daf43539fe94fc0b693004b2a41bcfe76aa96f4f 100644
--- a/libwccl/variables.h
+++ b/libwccl/variables.h
@@ -3,10 +3,6 @@
 
 #include <libwccl/exception.h>
 #include <libwccl/values/bool.h>
-#include <libwccl/values/match.h>
-#include <libwccl/values/position.h>
-#include <libwccl/values/strset.h>
-#include <libwccl/values/tset.h>
 #include <iostream>
 #include <map>
 #include <string>
@@ -23,6 +19,11 @@
 
 namespace Wccl {
 
+class Match;
+class Position;
+class StrSet;
+class TSet;
+
 namespace detail {
 
 /**