diff --git a/libcorpus2/ann/channel.cpp b/libcorpus2/ann/channel.cpp
index eae9000dec58dd8fa89a80875c3554ef7ad2a683..394dbb0d9886edd02c9217154535c37b4af2c978 100644
--- a/libcorpus2/ann/channel.cpp
+++ b/libcorpus2/ann/channel.cpp
@@ -170,6 +170,24 @@ std::string AnnotationChannel::dump_iob() const
 	return ss.str();
 }
 
+std::string AnnotationChannel::dump_segments() const
+{
+	std::stringstream ss;
+	foreach (int s, segments_) {
+		ss << s;
+	}
+	return ss.str();
+}
+
+std::string AnnotationChannel::dump_heads() const
+{
+	std::stringstream ss;
+	foreach (bool b, heads_) {
+		ss << (b ? "H" : " ");
+	}
+	return ss.str();
+}
+
 void AnnotationChannel::do_counts(int& annotations, int& disjoint, int& unannotated) const
 {
 	std::set<int> used_sids;
diff --git a/libcorpus2/ann/channel.h b/libcorpus2/ann/channel.h
index e6765d36eb12f3d4e3f6aaeda19765fd4f6da4b5..2c3a76f65458dcd23c5af8ffe26a202f45436d65 100644
--- a/libcorpus2/ann/channel.h
+++ b/libcorpus2/ann/channel.h
@@ -147,6 +147,16 @@ public:
 	 */
 	std::string dump_iob() const;
 
+	/**
+	 * Compose a string consisting of all segment indices in order.
+	 */
+	std::string dump_segments() const;
+
+	/**
+	 * Compose a string consisting of all head flags in order
+	 */
+	std::string dump_heads() const;
+
 	void do_counts(int& annotations, int& disjoint, int& unannotated) const;
 
 private:
diff --git a/tests/ioann.cpp b/tests/ioann.cpp
index 04831f8c2295b76e555f7d045a85b1a01f87e279..8f9d3804a6b097536d99684f3c2d6e065f75134d 100644
--- a/tests/ioann.cpp
+++ b/tests/ioann.cpp
@@ -102,6 +102,9 @@ BOOST_AUTO_TEST_CASE( iobase )
 	BOOST_REQUIRE(chunk);
 	std::stringstream ss;
 	boost::shared_ptr<Corpus2::TokenWriter> w(Corpus2::TokenWriter::create("xces,flat", ss, tagset));
+	//boost::shared_ptr<Corpus2::TokenWriter> wann(Corpus2::TokenWriter::create("ccl", std::cerr, tagset));
+	//wann->write_chunk(*chunk);
+	//wann->finish();
 	w->write_chunk(*chunk);
 	w->finish();
 	BOOST_CHECK_EQUAL(ss.str(), swiatopoglad);
@@ -113,6 +116,8 @@ BOOST_AUTO_TEST_CASE( iobase )
 	BOOST_REQUIRE(as->has_channel("cute"));
 	as->get_channel("cute").make_iob_from_segments();
 	BOOST_CHECK_EQUAL(as->get_channel("cute").dump_iob(), "BIOB");
+	BOOST_CHECK_EQUAL(as->get_channel("cute").dump_segments(), "1102");
+	BOOST_CHECK_EQUAL(as->get_channel("cute").dump_heads(), "    ");
 	Corpus2::Sentence::Ptr cute = Corpus2::create_view(as, "cute");
 	BOOST_REQUIRE_EQUAL(cute->size(), 3);
 	BOOST_CHECK_EQUAL(cute->tokens()[0]->orth_utf8(), "Uważam,");