diff --git a/libwccl/parser/Parser.cpp b/libwccl/parser/Parser.cpp
index 6f331ef58e24cb0d3648dae2da47c55b4956f776..77e74e6e725d7bfd56ae22f74c21c151c09ba130 100644
--- a/libwccl/parser/Parser.cpp
+++ b/libwccl/parser/Parser.cpp
@@ -30,11 +30,16 @@ namespace Wccl {
 /**
  * @desc Parser constructor. Default tagset is NULL
  */
-Parser::Parser(const Corpus2::Tagset& t) : tagset_(t)
+Parser::Parser(const Corpus2::Tagset& t) : tagset_(new Corpus2::Tagset(t))
 {
 }
 
-Parser::Parser(const std::string& tagset_name) : tagset_(Corpus2::get_named_tagset(tagset_name))
+Parser::Parser(const boost::shared_ptr<const Corpus2::Tagset>) : tagset_(tagset)
+{
+}
+
+Parser::Parser(const std::string& tagset_name)
+: tagset_(new Corpus2::Tagset(Corpus2::get_named_tagset(tagset_name)))
 {
 }
 
diff --git a/libwccl/parser/Parser.h b/libwccl/parser/Parser.h
index 50602fa5f4a32835c182624147499fbb19b2c018..ac563aa3298aedebca504fdd200765e5ec4a347c 100644
--- a/libwccl/parser/Parser.h
+++ b/libwccl/parser/Parser.h
@@ -50,6 +50,7 @@ namespace Wccl{
 class Parser {
 public:
 	explicit Parser(const Corpus2::Tagset&);
+	explicit Parser(const boost::shared_ptr<const Corpus2::Tagset>);
 	explicit Parser(const std::string& tagset_name);
 	~Parser();
 
@@ -128,12 +129,12 @@ public:
 				const std::string& search_path = ".") const;
 
 	// ---------------------------------------------------------------------------
-	const Corpus2::Tagset& tagset() const {
+	const boost::shared_ptr<Corpus2::Tagset> tagset() const {
 		return tagset_;
 	}
 
 private:
-	const Corpus2::Tagset &tagset_;
+	const boost::shared_ptr<const Corpus2::Tagset> tagset_;
 };
 
 } // end Wccl ns
diff --git a/libwccl/wcclfile.cpp b/libwccl/wcclfile.cpp
index 88265298ace16a90d598bf77975d19995a26b35e..7c89cbc5c11008b50a6cdb34d027fe1a3de117e8 100644
--- a/libwccl/wcclfile.cpp
+++ b/libwccl/wcclfile.cpp
@@ -78,13 +78,13 @@ std::ostream& WcclFile::write_to(std::ostream& os) const
 		}
 	}
 	BOOST_FOREACH (const boost::shared_ptr<FunctionalOpSequence>& s, all_sections_) {
-		os << s->to_string(tagset_) << '\n';
+		os << s->to_string(*tagset_) << '\n';
 	}
 	if (has_tag_rules()) {
-		os << tag_rules_->to_string(tagset_) << '\n';
+		os << tag_rules_->to_string(*tagset_) << '\n';
 	}
 	if (has_match_rules()) {
-		os << match_rules_->to_string(tagset_) << '\n';
+		os << match_rules_->to_string(*tagset_) << '\n';
 	}
 	return os;
 }
diff --git a/libwccl/wcclfile.h b/libwccl/wcclfile.h
index 8ec46ecf93496c1c3e90f4e0f3ed621d0f3366d2..0bdba99126bd5efb7ff377719f9e035410f5a256 100644
--- a/libwccl/wcclfile.h
+++ b/libwccl/wcclfile.h
@@ -48,6 +48,7 @@ class WcclFile
 {
 public:
 	WcclFile(const Corpus2::Tagset& tagset, const std::string& search_path);
+	WcclFile(const boost::shared_ptr<const Corpus2::Tagset> tagset, const std::string& search path);
 
 	/////////////////////
 	// Untyped and typed operator sections: @X:"sectioname" ( op1; op2 )
@@ -340,7 +341,7 @@ public:
 	void import_lexicon(const boost::shared_ptr<Lexicon>& lexicon);
 
 	void set_tag_rules(const boost::shared_ptr<TagRuleSequence>& tag_rules);
-	
+
 	void set_match_rules(const boost::shared_ptr<Matching::MatchRuleSequence>& match_rules);
 
 private:
@@ -349,7 +350,7 @@ private:
 	boost::shared_ptr<TagRuleSequence> tag_rules_;
 	boost::shared_ptr<Matching::MatchRuleSequence> match_rules_;
 	boost::shared_ptr<Lexicons> lexicons_;
-	const Corpus2::Tagset& tagset_;
+	const boost::shared_ptr<const Corpus2::Tagset> tagset_;
 	PwrNlp::PathSearcher<Wccl::FileNotFound> path_;
 };
 
@@ -362,6 +363,13 @@ namespace Wccl {
 
 inline
 WcclFile::WcclFile(const Corpus2::Tagset& tagset, const std::string& search_path)
+  : lexicons_(boost::make_shared<Lexicons>()), tagset_(new Corpus2::Tagset(tagset)),
+    path_(":")
+{
+	path_.set_search_path(search_path);
+	path_.set_verbose(false);
+}
+WcclFile::WcclFile(const boost::shared_ptr<const Corpus2::Tagset> tagset, const std::string& search_path)
   : lexicons_(boost::make_shared<Lexicons>()), tagset_(tagset),
     path_(":")
 {
@@ -664,7 +672,7 @@ std::ostream& operator <<(std::ostream& ostream, const WcclFile& wccl_file) {
 }
 
 inline
-const Corpus2::Tagset& WcclFile::tagset() const {
+const boost::shared_ptr<Corpus2::Tagset> WcclFile::tagset() const {
 	return tagset_;
 }