diff --git a/swig/libccloperator.i b/swig/libccloperator.i
new file mode 100644
index 0000000000000000000000000000000000000000..609d91715a35d2ea7b424eb7232dac9418ac2b7a
--- /dev/null
+++ b/swig/libccloperator.i
@@ -0,0 +1,71 @@
+#ifndef SWIG_LIBWCCL_OPERATOR_I
+#define SWIG_LIBWCCL_OPERATOR_I
+
+%module libccloperator
+%{
+  #include <libwccl/ops/operator.h>
+%}
+
+
+%include "libcclvalue.i"
+%include "libcclsentencecontext.i"
+%include "libcclfunctionaloperator.i"
+
+/*
+%include "libcclvariables.i"
+%include "libcclparsedexpression.i"
+*/
+
+%include "std_string.i"
+%include "boost_shared_ptr.i"
+
+%feature("notabstract") Wccl::Operator;
+
+%rename(__op_cop__) Wccl::Operator::operator=(const Operator& other);
+%rename(__op_fun__) Wccl::Operator::operator()(const SentenceContext& sentence_context);
+
+namespace Wccl {
+  template <class T> class Operator : public FunctionalOperator {
+  public:
+    Operator();
+    Operator& operator=(const Operator& other);
+/*
+    Operator(const boost::shared_ptr<const Function<T> >& body, const Variables& variables);
+*/
+
+    Operator(const Operator& other, bool clean = false);
+
+    boost::shared_ptr<const T> operator()(const SentenceContext& sentence_context);
+    boost::shared_ptr<const T> apply(const SentenceContext& sentence_context);
+    boost::shared_ptr<T> copy_apply(const SentenceContext& sentence_context);
+    boost::shared_ptr<const Value> base_apply(const SentenceContext& sc);
+    
+    Operator clone() const;
+    Operator clone_clean() const;
+    
+    boost::shared_ptr<Operator<T> > clone_ptr() const;
+    boost::shared_ptr<Operator<T> > clone_clean_ptr() const;
+
+    std::string to_string(const Corpus2::Tagset& tagset) const;
+
+  protected:
+    Operator* clone_internal() const;
+    std::ostream& write_to(std::ostream& ostream) const;
+  };
+
+  %template (BoolOperator) Operator<Bool>;
+  %template (TSetOperator) Operator<TSet>;
+  %template (StrSetOperator) Operator<StrSet>;
+  %template (PositionOperator) Operator<Position>;
+
+  %template (SharedPtrBoolOperator) boost::shared_ptr<Operator<Bool> >;
+  %template (SharedPtrTSetOperator) boost::shared_ptr<Operator<TSet> >;
+  %template (SharedPtrStrSetOperator) boost::shared_ptr<Operator<StrSet> >;
+  %template (SharedPtrPositionOperator) boost::shared_ptr<Operator<Position> >;
+}
+
+using namespace boost;
+using namespace std;
+using namespace Wccl;
+
+#endif /* SWIG_LIBWCCL_OPERATOR_I */