diff --git a/libwccl/CMakeLists.txt b/libwccl/CMakeLists.txt
index d4fc578b6d131cfa3a0e2569a6b98ca19c7bcc8d..389e6f48408a0d936fee4b981b04e386adae0e2c 100644
--- a/libwccl/CMakeLists.txt
+++ b/libwccl/CMakeLists.txt
@@ -4,10 +4,10 @@ PROJECT(wccl)
 
 include_directories( ${CMAKE_CURRENT_BINARY_DIR}/include/ )
 
-find_package(Corpus2 1.0.2 REQUIRED)
+find_package(Corpus2 1.0.4 REQUIRED)
 set(LIBS ${LIBS} ${Corpus2_LIBRARY})
 
-find_package(PwrUtils 0.0.3 REQUIRED)
+find_package(PwrUtils 1.0.1 REQUIRED)
 set(LIBS ${LIBS} ${PwrUtils_LIBRARY})
 
 link_directories(${Boost_LIBRARY_DIRS})
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 dc89d298d6277aba16a7c463bff67a2637fc7347..98ce16c467a01df75a6ac549cce2d4d7cdc52787 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>
 
@@ -269,13 +270,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 {