diff --git a/src/zipr.cpp b/src/zipr.cpp
index e33169961b4143fbc1b5d9448572797a4fd427a7..3207cfd5f479358132c5d560b9f7b1b696dae351 100644
--- a/src/zipr.cpp
+++ b/src/zipr.cpp
@@ -72,10 +72,15 @@ void ZiprImpl_t::Init()
 	bss_needed=0;
 	use_stratafier_mode=false;
 
+	ostream *error = &cout, *warn = NULL;
+
 	m_zipr_options.AddNamespace(new ZiprOptionsNamespace_t("global"));
 	m_zipr_options.AddNamespace(RegisterOptions(m_zipr_options.Namespace("global")));
 
-	m_zipr_options.Parse();
+	/*
+	 * Parse once to read the global and zipr options.
+	 */
+	m_zipr_options.Parse(NULL, NULL);
 	if (m_variant.RequirementMet()) {
 		/* setup the interface to the sql server */
 		BaseObj_t::SetInterface(&m_pqxx_interface);
@@ -106,6 +111,13 @@ void ZiprImpl_t::Init()
 	}
 	plugman = ZiprPluginManager_t(&memory_space, elfiop, m_firp, &m_zipr_options, &final_insn_locations);
 
+	/*
+	 * Parse again now that the plugins registered something.
+	 */
+	if (m_verbose)
+		warn = &cout;
+	m_zipr_options.Parse(error, warn);
+
 	if (!m_zipr_options.RequirementsMet()) {
 		m_zipr_options.PrintUsage(cout);
 		m_error = true;
diff --git a/test/ZiprOptions.cpp b/test/ZiprOptions.cpp
index 6c31a3b590f5323d084388c00e7519e50dc83a4d..47cd0e643482acc99d390c7ff1c81b76212d486c 100644
--- a/test/ZiprOptions.cpp
+++ b/test/ZiprOptions.cpp
@@ -80,7 +80,7 @@ int main(int argc, char *argv[])
 	options.AddNamespace(&global_ns);
 	options.AddNamespace(&local_ns);
 
-	options.Parse(cout);
+	options.Parse(&cout);
 
 	if (!options.RequirementsMet())
 	{