diff --git a/src/abg-dwarf-reader.cc b/src/abg-dwarf-reader.cc
index 850281ad1ce5..d99d25bfb3b9 100644
--- a/src/abg-dwarf-reader.cc
+++ b/src/abg-dwarf-reader.cc
@@ -16068,13 +16068,10 @@ read_debug_info_into_corpus(read_context& ctxt)
 {
   ctxt.clear_per_corpus_data();
 
-  if (!ctxt.current_corpus())
-    {
-      corpus_sptr corp (new corpus(ctxt.env(), ctxt.elf_path()));
-      ctxt.current_corpus(corp);
-      if (!ctxt.env())
-	ctxt.env(corp->get_environment());
-    }
+  corpus_sptr corp(new corpus(ctxt.env(), ctxt.elf_path()));
+  ctxt.current_corpus(corp);
+  if (!ctxt.env())
+    ctxt.env(corp->get_environment());
 
   // First set some mundane properties of the corpus gathered from
   // ELF.
diff --git a/src/abg-reader.cc b/src/abg-reader.cc
index 255a200f2a25..0be45ec59a39 100644
--- a/src/abg-reader.cc
+++ b/src/abg-reader.cc
@@ -25,6 +25,7 @@
 /// ABI Instrumentation file in libabigail native XML format.  This
 /// native XML format is named "abixml".
 
+#include "abg-fwd.h"
 #include "config.h"
 #include <cstring>
 #include <cstdlib>
@@ -1899,17 +1900,14 @@ read_corpus_from_input(read_context& ctxt)
 				       BAD_CAST("abi-corpus")))
 	return nil;
 
-      if (!ctxt.get_corpus())
-	{
-	  corpus_sptr c(new corpus(ctxt.get_environment(), ""));
-	  ctxt.set_corpus(c);
-	}
+      corpus_sptr corp(new corpus(ctxt.get_environment(), ""));
+      ctxt.set_corpus(corp);
 
       if (!ctxt.get_corpus_group())
 	ctxt.clear_per_corpus_data();
 
-      corpus& corp = *ctxt.get_corpus();
-      ctxt.set_exported_decls_builder(corp.get_exported_decls_builder().get());
+      ctxt.set_exported_decls_builder(
+	  corp->get_exported_decls_builder().get());
 
       xml::xml_char_sptr path_str = XML_READER_GET_ATTRIBUTE(reader, "path");
       string path;
@@ -1917,13 +1915,13 @@ read_corpus_from_input(read_context& ctxt)
       if (path_str)
 	{
 	  path = reinterpret_cast<char*>(path_str.get());
-	  corp.set_path(path);
+	  corp->set_path(path);
 	}
 
       xml::xml_char_sptr architecture_str =
 	XML_READER_GET_ATTRIBUTE(reader, "architecture");
       if (architecture_str)
-	corp.set_architecture_name
+	corp->set_architecture_name
 	  (reinterpret_cast<char*>(architecture_str.get()));
 
       xml::xml_char_sptr soname_str =
@@ -1933,7 +1931,7 @@ read_corpus_from_input(read_context& ctxt)
       if (soname_str)
 	{
 	  soname = reinterpret_cast<char*>(soname_str.get());
-	  corp.set_soname(soname);
+	  corp->set_soname(soname);
 	}
 
       // Apply suppression specifications here to honour:
@@ -1955,32 +1953,29 @@ read_corpus_from_input(read_context& ctxt)
     }
   else
     {
-      if (!ctxt.get_corpus())
-	{
-	  corpus_sptr c(new corpus(ctxt.get_environment(), ""));
-	  ctxt.set_corpus(c);
-	}
+      corpus_sptr corp(new corpus(ctxt.get_environment(), ""));
+      ctxt.set_corpus(corp);
 
       if (!ctxt.get_corpus_group())
 	ctxt.clear_per_corpus_data();
 
-      corpus& corp = *ctxt.get_corpus();
-      ctxt.set_exported_decls_builder(corp.get_exported_decls_builder().get());
+      ctxt.set_exported_decls_builder(
+	  corp->get_exported_decls_builder().get());
 
       xml::xml_char_sptr path_str = XML_NODE_GET_ATTRIBUTE(node, "path");
       if (path_str)
-	corp.set_path(reinterpret_cast<char*>(path_str.get()));
+	corp->set_path(reinterpret_cast<char*>(path_str.get()));
 
       xml::xml_char_sptr architecture_str =
 	XML_NODE_GET_ATTRIBUTE(node, "architecture");
       if (architecture_str)
-	corp.set_architecture_name
+	corp->set_architecture_name
 	  (reinterpret_cast<char*>(architecture_str.get()));
 
       xml::xml_char_sptr soname_str =
 	XML_NODE_GET_ATTRIBUTE(node, "soname");
       if (soname_str)
-	corp.set_soname(reinterpret_cast<char*>(soname_str.get()));
+	corp->set_soname(reinterpret_cast<char*>(soname_str.get()));
     }
 
   if (!node->children)
@@ -2093,14 +2088,10 @@ read_corpus_group_from_input(read_context& ctxt)
 				   BAD_CAST("abi-corpus-group")))
     return nil;
 
-  if (!ctxt.get_corpus_group())
-    {
-      corpus_group_sptr g(new corpus_group(ctxt.get_environment(),
-					   ctxt.get_path()));
-      ctxt.set_corpus_group(g);
-    }
+  corpus_group_sptr group(
+      new corpus_group(ctxt.get_environment(), ctxt.get_path()));
+  ctxt.set_corpus_group(group);
 
-  corpus_group_sptr group = ctxt.get_corpus_group();
   xml::xml_char_sptr path_str = XML_READER_GET_ATTRIBUTE(reader, "path");
   if (path_str)
     group->set_path(reinterpret_cast<char*>(path_str.get()));
@@ -2115,11 +2106,11 @@ read_corpus_group_from_input(read_context& ctxt)
 
   corpus_sptr corp;
   while ((corp = read_corpus_from_input(ctxt)))
-    ctxt.get_corpus_group()->add_corpus(corp);
+    group->add_corpus(corp);
 
   xmlTextReaderNext(reader.get());
 
-  return ctxt.get_corpus_group();
+  return group;
 }
 
 /// De-serialize an ABI corpus group from an input XML document which
