diff --git a/sys/geom/geom_dev.c b/sys/geom/geom_dev.c
index 24234b953337..5c1cb05cf5c2 100644
--- a/sys/geom/geom_dev.c
+++ b/sys/geom/geom_dev.c
@@ -52,8 +52,6 @@
 #include <geom/geom_int.h>
 #include <machine/limits.h>
 
-#define CDEV_MAJOR	4
-
 static d_open_t		g_dev_open;
 static d_close_t	g_dev_close;
 static d_strategy_t	g_dev_strategy;
@@ -70,7 +68,7 @@ static struct cdevsw g_dev_cdevsw = {
 	/* mmap */      nommap,
 	/* strategy */  g_dev_strategy,
 	/* name */      "g_dev",
-	/* maj */       CDEV_MAJOR,
+	/* maj */       GEOM_MAJOR,
 	/* dump */      nodump,
 	/* psize */     g_dev_psize,
 	/* flags */     D_DISK | D_CANFREE | D_TRACKCLOSE,
@@ -149,7 +147,7 @@ g_dev_taste(struct g_class *mp, struct g_provider *pp, int insist __unused)
 {
 	struct g_geom *gp;
 	struct g_consumer *cp;
-	static int unit;
+	static int unit = GEOM_MINOR_PROVIDERS;
 	int error;
 	dev_t dev;
 
diff --git a/sys/geom/geom_int.h b/sys/geom/geom_int.h
index 5962c86adcb0..3b33501e3c30 100644
--- a/sys/geom/geom_int.h
+++ b/sys/geom/geom_int.h
@@ -70,13 +70,20 @@ struct g_event {
 	g_call_me_t		*func;
 };
 
+/*
+ * We actually have a number of drivers sharing the same major number
+ * so we coordinate the major/minor usage here
+ */
+#define GEOM_MAJOR		4
+#define GEOM_MINOR_STATS	0
+#define GEOM_MINOR_PROVIDERS	10
+
 /* geom_dump.c */
 void g_confxml(void *);
 void g_conf_specific(struct sbuf *sb, struct g_class *mp, struct g_geom *gp, struct g_provider *pp, struct g_consumer *cp);
 void g_confdot(void *);
 void g_conftxt(void *);
 
-
 /* geom_event.c */
 void g_event_init(void);
 void g_post_event(enum g_events ev, struct g_class *mp, struct g_geom *gp, struct g_provider *pp, struct g_consumer *cp);