diff --git a/apid.go b/apid.go
index 3f590e3..fd325d5 100644
--- a/apid.go
+++ b/apid.go
@@ -29,6 +29,7 @@
 var (
 	APIDInitializedEvent = systemEvent{"apid initialized"}
 	APIListeningEvent    = systemEvent{"api listening"}
+	PluginVersionTracker []PluginData
 
 	pluginInitFuncs []PluginInitFunc
 	services        Services
@@ -67,8 +68,9 @@
 	ss.events.Emit(SystemEventsSelector, APIDInitializedEvent)
 }
 
-func RegisterPlugin(plugin PluginInitFunc) {
+func RegisterPlugin(plugin PluginInitFunc, pluginData PluginData) {
 	pluginInitFuncs = append(pluginInitFuncs, plugin)
+	PluginVersionTracker = append(PluginVersionTracker, pluginData)
 }
 
 func InitializePlugins(versionNumber string) {
diff --git a/events/events_test.go b/events/events_test.go
index d4d2703..877e385 100644
--- a/events/events_test.go
+++ b/events/events_test.go
@@ -267,17 +267,12 @@
 		})
 
 		It("should publish PluginsInitialized event", func(done Done) {
-			xData := make(map[string]interface{})
-			xData["schemaVersion"] = "1.2.3"
+			dummyPluginData := getDummyPluginDataForTest(0);
 			p := func(s apid.Services) (pd apid.PluginData, err error) {
-				pd = apid.PluginData{
-					Name:      "test plugin",
-					Version:   "1.0.0",
-					ExtraData: xData,
-				}
+				pd = dummyPluginData
 				return
 			}
-			apid.RegisterPlugin(p)
+			apid.RegisterPlugin(p, dummyPluginData)
 
 			h := func(event apid.Event) {
 				defer GinkgoRecover()
@@ -286,7 +281,7 @@
 
 					Expect(len(pie.Plugins)).Should(Equal(1))
 					p := pie.Plugins[0]
-					Expect(p.Name).To(Equal("test plugin"))
+					Expect(p.Name).To(Equal("test plugin 0"))
 					Expect(p.Version).To(Equal("1.0.0"))
 					Expect(p.ExtraData["schemaVersion"]).To(Equal("1.2.3"))
 
@@ -320,7 +315,7 @@
 
 			// create and register plugins, listen to shutdown event
 			for i:=0; i<pluginNum; i++ {
-				apid.RegisterPlugin(createDummyPlugin(i))
+				apid.RegisterPlugin(createDummyPlugin(i), getDummyPluginDataForTest(i))
 				h := func(event apid.Event) {
 					if pie, ok := event.(apid.ShutdownEvent); ok {
 						Expect(pie.Description).Should(Equal("apid is going to shutdown"))
@@ -343,17 +338,12 @@
 		})
 
 		It("should be able to read apid version from PluginsInitialized event", func(done Done) {
-			xData := make(map[string]interface{})
-			xData["schemaVersion"] = "1.2.3"
+			dummyPluginData := getDummyPluginDataForTest(0)
 			p := func(s apid.Services) (pd apid.PluginData, err error) {
-				pd = apid.PluginData{
-					Name:      "test plugin",
-					Version:   "1.0.0",
-					ExtraData: xData,
-				}
+				pd = dummyPluginData
 				return
 			}
-			apid.RegisterPlugin(p)
+			apid.RegisterPlugin(p,dummyPluginData)
 
 			apidVersion := "dummy_version"
 
@@ -373,18 +363,21 @@
 })
 
 func createDummyPlugin(id int) apid.PluginInitFunc{
-	xData := make(map[string]interface{})
-	xData["schemaVersion"] = "1.2.3"
 	p := func(s apid.Services) (pd apid.PluginData, err error) {
-		pd = apid.PluginData{
-			Name: "test plugin " + strconv.Itoa(id),
-			Version: "1.0.0",
-			ExtraData: xData,
-		}
+		pd = getDummyPluginDataForTest(id)
 		return
 	}
 	return p
 }
+func getDummyPluginDataForTest(id int) apid.PluginData {
+	xData := make(map[string]interface{})
+	xData["schemaVersion"] = "1.2.3"
+	return apid.PluginData{
+		Name:      "test plugin " + strconv.Itoa(id),
+		Version:   "1.0.0",
+		ExtraData: xData,
+	}
+}
 
 type test_handler struct {
 	description string
