diff --git a/swig/libcclfunctionaloperator.i b/swig/libcclfunctionaloperator.i
index 6694916efdd8c08c2ed3c045c5c559510ed35a63..900f204fa13cc252e449442b082e2414984ac14f 100644
--- a/swig/libcclfunctionaloperator.i
+++ b/swig/libcclfunctionaloperator.i
@@ -6,22 +6,29 @@
   #include <libwccl/ops/operator.h>
 %}
 
+%include "libcclvalue.i"
+%include "libcclvariables.i"
 %include "libcclparsedexpression.i"
+
 %include "std_string.i"
+%include "boost_shared_ptr.i"
 
 namespace Wccl {
   class FunctionalOperator : public ParsedExpression {
   public:
     // virtual boost::shared_ptr<const Value> base_apply(const SentenceContext& sc) = 0;
-    // boost::shared_ptr<FunctionalOperator> clone_ptr() const;
-    // boost::shared_ptr<FunctionalOperator> clone_clean_ptr() const;
+    boost::shared_ptr<FunctionalOperator> clone_ptr() const;
+    boost::shared_ptr<FunctionalOperator> clone_clean_ptr() const;
 
   protected:
-    // explicit FunctionalOperator(const Variables& variables);
-    // FunctionalOperator* clone_internal() const = 0;
+    explicit FunctionalOperator(const Variables& variables);
+    FunctionalOperator* clone_internal() const = 0;
   };
 }
 
+%template (FunctionalOperatorSharedPtr) boost::shared_ptr<Wccl::FunctionalOperator>;
+
+using namespace boost;
 using namespace std;
 using namespace Wccl;