diff --git a/libwccl/sentencecontext.cpp b/libwccl/sentencecontext.cpp
index def13b52730ac221a8c18a20228305f374dcd131..9fd4b6f3592a7676ee2d05e9a4c2db7501c7dcbc 100644
--- a/libwccl/sentencecontext.cpp
+++ b/libwccl/sentencecontext.cpp
@@ -10,7 +10,7 @@ SentenceContext::SentenceContext(const boost::shared_ptr<Corpus2::Sentence>& s)
 SentenceContext SentenceContext::duplicate() const
 {
 	SentenceContext dup(*this);
-	dup.sentence_.reset(sentence_->clone());
+	dup.sentence_ = sentence_->clone_shared();
 	return dup;
 }
 
diff --git a/tests/datadriven.cpp b/tests/datadriven.cpp
index 142ba205e333210e07756f6de0ea4d71d04f9278..3b2f2763f0dd3df73526458da258364f330c3fce 100644
--- a/tests/datadriven.cpp
+++ b/tests/datadriven.cpp
@@ -66,7 +66,7 @@ void test_one_item_actual(const compare_test& c)
 	if (!sentence_filename.empty()) {
 		path sentence_fullpath = c.search_path / sentence_filename;
 		Corpus2::XcesReader reader(tagset, sentence_fullpath.string());
-		sentence.reset(reader.get_next_sentence());
+		sentence = reader.get_next_sentence();
 		BOOST_REQUIRE(sentence);
 	}
 	else {
diff --git a/wcclparser/main.cpp b/wcclparser/main.cpp
index cd00f57417d75e599740c1ae907d9655ac2c86c0..4403c1acd7f14d590dca868f4439938a804a3404 100644
--- a/wcclparser/main.cpp
+++ b/wcclparser/main.cpp
@@ -8,6 +8,7 @@
 #include <libcorpus2/tagsetmanager.h>
 
 #include <boost/bind.hpp>
+#include <boost/make_shared.hpp>
 #include <boost/program_options.hpp>
 #include <libcorpus2/io/xcesreader.h>
 
@@ -209,13 +210,13 @@ int main(int argc, char** argv)
 		const Corpus2::Tagset& tagset = Corpus2::get_named_tagset(tagset_load);
 		boost::shared_ptr<Corpus2::Sentence> sentence;
 		if (sentence_load.empty()) {
-			sentence.reset(new Corpus2::Sentence);
+			sentence = boost::make_shared<Corpus2::Sentence>();
 			sentence->append(new Corpus2::Token("", PwrNlp::Whitespace::ManySpaces));
 		} else {
 			std::ifstream ifs(sentence_load.c_str());
 			if (ifs.good()) {
 				Corpus2::XcesReader reader(tagset, ifs, false);
-				sentence.reset(reader.get_next_sentence());
+				sentence = reader.get_next_sentence();
 				std::cerr << "Sentence loaded, " << sentence->size()
 					<< " tokens.\n";
 			} else {