diff --git a/swig/Makefile b/swig/Makefile
index de32c55727aa17a1a72cbda7d5b0ca35587d71b1..da14c48fcb15f91b5448be3322e94283666f06a8 100644
--- a/swig/Makefile
+++ b/swig/Makefile
@@ -32,7 +32,8 @@ CBIN=libcclvalue.o \
 	libcclvariables.o \
 	libcclsentencecontext.o \
 	libcclparser.o \
-	libcclactionexeccontext.o
+	libcclactionexeccontext.o \
+	libccltagaction.o
 
 CBINOUT=_libcclvalue.so \
 				_libcclstrset.so \
@@ -52,6 +53,7 @@ CBINOUT=_libcclvalue.so \
 				_libccloperator.so \
 				_libcclparser.so \
 				_libcclactionexeccontext.so \
+				_libccltagaction.so \
 				_boost_shared_ptr.so
 
 CWRAP=libcclvalue_wrap.cxx \
@@ -73,6 +75,7 @@ CWRAP=libcclvalue_wrap.cxx \
 			libccloperator_wrap.cxx \
 			libcclparser_wrap.cxx \
 			libcclactionexeccontext_wrap.cxx \
+			libccltagaction_wrap.cxx \
 			boost_shared_ptr_wrap.cxx
 
 CWRAPBIN=libcclvalue_wrap.o \
@@ -93,6 +96,7 @@ CWRAPBIN=libcclvalue_wrap.o \
 				 libccloperator_wrap.o \
 				 libcclparser_wrap.o \
 				 libcclactionexeccontext_wrap.o \
+				 libccltagaction_wrap.o \
 				 boost_shared_ptr_wrap.o
 
 PYMODULES=libcclvalue.py \
@@ -113,6 +117,7 @@ PYMODULES=libcclvalue.py \
 					libccloperator.py \
 					libcclparser.py \
 					libcclactionexeccontext.py \
+					libccltagaction.py \
 					boost_shared_ptr.py
 
 PYCBIN=libcclvalue.pyc \
@@ -133,6 +138,7 @@ PYCBIN=libcclvalue.pyc \
 			 libccloperator.pyc \
 			 libcclparser.pyc \
 			 libcclactionexeccontext.pyc \
+			 libccltagaction.pyc \
 			 boost_shared_ptr.pyc
 
 all:boost_shared_ptr.o $(CBIN)
@@ -284,6 +290,13 @@ libcclactionexeccontext.o:
 	$(CPP) -shared libcclactionexeccontext_wrap.o \
 		$(CCLBIN) $(ANTLRLIB) -o _libcclactionexeccontext.so
 
+# TagAction
+libccltagaction.o:
+	$(SWIG) $(SWIGOPTS_LANG) libccltagaction.i
+	$(CPP) -c libccltagaction_wrap.cxx -I$(PYTHONDIR) -I$(WCCLDIR) $(CPPFLAGS)
+	$(CPP) -shared libccltagaction_wrap.o \
+		$(CCLBIN) $(ANTLRLIB) -o _libccltagaction.so
+
 # -----------------------------------------------------------------------------
 clean:
 	rm -f $(CBIN) $(CBINOUT) $(CWRAP) $(CWRAPBIN) $(PYMODULES) $(PYCBIN)
diff --git a/swig/libccltagaction.i b/swig/libccltagaction.i
new file mode 100644
index 0000000000000000000000000000000000000000..7d0e477a1f001c05bfbbb8b5fd5f11f853e95a12
--- /dev/null
+++ b/swig/libccltagaction.i
@@ -0,0 +1,28 @@
+#ifndef SWIG_LIBWCCL_TAGACTION_I
+#define SWIG_LIBWCCL_TAGACTION_I
+
+%module libccltagaction
+%{
+  #include <libwccl/ops/tagaction.h>
+%}
+
+%include "libcclbool.i"
+%include "libcclexpression.i"
+%include "libcclactionexeccontext.i"
+
+%include "std_string.i"
+
+%nodefaultctor Wccl::TagAction;
+
+namespace Wccl {
+  class TagAction : public Expression {
+  public:
+    virtual std::string name() const = 0;
+    virtual Bool execute(const ActionExecContext& context) const = 0;
+  };
+}
+
+using namespace std;
+using namespace Wccl;
+
+#endif /* SWIG_LIBWCCL_TAGACTION_I */