diff --git a/gcr/Makefile.am b/gcr/Makefile.am
index e6b3a63..dadf901 100644
--- a/gcr/Makefile.am
+++ b/gcr/Makefile.am
@@ -138,7 +138,7 @@ libgcr_base_@GCR_MAJOR@_la_CFLAGS = \
 libgcr_base_@GCR_MAJOR@_la_LDFLAGS = \
 	-version-info $(GCR_LT_RELEASE) \
 	-no-undefined \
-	-export-symbols-regex '^_gcr_.*|^gcr_.*|^SECMEM_.*'
+	-export-symbols-regex '^_gcr_.*|^gcr_.*|^GCR_.*|^SECMEM_.*'
 
 libgcr_base_@GCR_MAJOR@_la_LIBADD = \
 	$(top_builddir)/egg/libegg.la \
diff --git a/gcr/gcr-certificate-extensions.c b/gcr/gcr-certificate-extensions.c
index 6b8033c..e1856a7 100644
--- a/gcr/gcr-certificate-extensions.c
+++ b/gcr/gcr-certificate-extensions.c
@@ -269,8 +269,6 @@ _gcr_certificate_extension_subject_alt_name (GBytes *data)
 	GcrGeneralName general;
 	GNode *choice;
 
-	_gcr_oids_init ();
-
 	asn = egg_asn1x_create_and_decode (pkix_asn1_tab, "SubjectAltName", data);
 	if (asn == NULL)
 		return NULL;
diff --git a/gcr/gcr-certificate-request.c b/gcr/gcr-certificate-request.c
index 686ed06..d772ac9 100644
--- a/gcr/gcr-certificate-request.c
+++ b/gcr/gcr-certificate-request.c
@@ -195,8 +195,6 @@ gcr_certificate_request_class_init (GcrCertificateRequestClass *klass)
 {
 	GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 
-	_gcr_oids_init ();
-
 	gobject_class->constructed = gcr_certificate_request_constructed;
 	gobject_class->finalize = gcr_certificate_request_finalize;
 	gobject_class->set_property = gcr_certificate_request_set_property;
diff --git a/gcr/gcr-certificate.c b/gcr/gcr-certificate.c
index 1327108..caaa819 100644
--- a/gcr/gcr-certificate.c
+++ b/gcr/gcr-certificate.c
@@ -249,8 +249,6 @@ gcr_certificate_default_init (GcrCertificateIface *iface)
 	static volatile gsize initialized = 0;
 
 	if (g_once_init_enter (&initialized)) {
-		_gcr_oids_init ();
-
 		CERTIFICATE_INFO = g_quark_from_static_string ("_gcr_certificate_certificate_info");
 
 		g_object_interface_install_property (iface,
diff --git a/gcr/gcr-mkoids b/gcr/gcr-mkoids
index 47d1095..b0eb5c4 100644
--- a/gcr/gcr-mkoids
+++ b/gcr/gcr-mkoids
@@ -11,11 +11,13 @@ generate_header ()
 	echo "#ifndef ${UPPER}_OIDS_"
 	echo "#define ${UPPER}_OIDS_"
 	echo ""
-	echo "void _${LOWER}_oids_init (void);"
 
 	while read name oid; do
 		if [ -n "$name" ]; then
-			echo "GQuark ${UPPER}_OID_${name};"
+			lname=$(echo "$name" | tr '[:upper:]' '[:lower:]')
+			echo "GQuark _${LOWER}_oid_${lname}_get_quark (void) G_GNUC_CONST;"
+			echo "#define ${UPPER}_OID_${name} _${LOWER}_oid_${lname}_get_quark ()"
+			echo ""
 		fi
 	done
 
@@ -30,21 +32,23 @@ generate_source ()
 	echo "#include \"$HEADER\""
 	echo ""
 
-	echo "void"
-	echo "_${LOWER}_oids_init (void)"
-	echo "{"
-	echo "	static volatile gsize initialized = 0;"
-	echo "	if (g_once_init_enter (&initialized)) {"
-
 	while read name oid; do
 		if [ -n "$name" ]; then
-			echo "		${UPPER}_OID_${name} = g_quark_from_static_string (\"${oid}\");"
+			lname=$(echo "$name" | tr '[:upper:]' '[:lower:]')
+			echo "GQuark"
+			echo "_${LOWER}_oid_${lname}_get_quark (void)"
+			echo "{"
+			echo "	static volatile gsize inited = 0;"
+			echo "	static GQuark quark = 0;"
+			echo "	if (g_once_init_enter (&inited)) {"
+			echo "		quark = g_quark_from_static_string (\"${oid}\");"
+			echo "		g_once_init_leave (&inited, 1);"
+			echo "	}"
+			echo "	return quark;"
+			echo "}"
+			echo ""
 		fi
 	done
-
-	echo "		g_once_init_leave (&initialized, 1);"
-	echo "	}"
-	echo "}"
 }
 
 UPPER="PREFIX"
diff --git a/gcr/gcr-parser.c b/gcr/gcr-parser.c
index 4e1f31e..594e66a 100644
--- a/gcr/gcr-parser.c
+++ b/gcr/gcr-parser.c
@@ -185,8 +185,6 @@ init_quarks (void)
 {
 	static volatile gsize quarks_inited = 0;
 
-	_gcr_oids_init ();
-
 	if (g_once_init_enter (&quarks_inited)) {
 
 		#define QUARK(name, value) \
diff --git a/gcr/gcr-subject-public-key.c b/gcr/gcr-subject-public-key.c
index 46c8d42..7896531 100644
--- a/gcr/gcr-subject-public-key.c
+++ b/gcr/gcr-subject-public-key.c
@@ -530,8 +530,6 @@ rsa_subject_public_key_from_attributes (GckAttributes *attrs,
 	GBytes *key;
 	GBytes *usg;
 
-	_gcr_oids_init ();
-
 	modulus = gck_attributes_find (attrs, CKA_MODULUS);
 	exponent = gck_attributes_find (attrs, CKA_PUBLIC_EXPONENT);
 	if (modulus == NULL || gck_attribute_is_invalid (modulus) ||
@@ -624,8 +622,6 @@ dsa_subject_public_key_from_attributes (GckAttributes *attrs,
 	GNode *key_asn, *params_asn;
 	GBytes *key;
 
-	_gcr_oids_init ();
-
 	p = gck_attributes_find (attrs, CKA_PRIME);
 	q = gck_attributes_find (attrs, CKA_SUBPRIME);
 	g = gck_attributes_find (attrs, CKA_BASE);
diff --git a/ui/gcr-certificate-renderer.c b/ui/gcr-certificate-renderer.c
index 1c06345..e730357 100644
--- a/ui/gcr-certificate-renderer.c
+++ b/ui/gcr-certificate-renderer.c
@@ -420,8 +420,6 @@ gcr_certificate_renderer_class_init (GcrCertificateRendererClass *klass)
 	GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 	GckBuilder builder = GCK_BUILDER_INIT;
 
-	_gcr_oids_init ();
-
 	gcr_certificate_renderer_parent_class = g_type_class_peek_parent (klass);
 	g_type_class_add_private (klass, sizeof (GcrCertificateRendererPrivate));
 
diff --git a/ui/gcr-certificate-request-renderer.c b/ui/gcr-certificate-request-renderer.c
index 1985346..5d72da1 100644
--- a/ui/gcr-certificate-request-renderer.c
+++ b/ui/gcr-certificate-request-renderer.c
@@ -171,8 +171,6 @@ _gcr_certificate_request_renderer_class_init (GcrCertificateRequestRendererClass
 	GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
 	GckBuilder builder = GCK_BUILDER_INIT;
 
-	_gcr_oids_init ();
-
 	g_type_class_add_private (klass, sizeof (GcrCertificateRequestRendererPrivate));
 
 	gobject_class->finalize = _gcr_certificate_request_renderer_finalize;
-- 
1.8.1
