diff --git a/config/alfresco/core-services-context.xml b/config/alfresco/core-services-context.xml
index c926f87837..bf29bfdcf2 100644
--- a/config/alfresco/core-services-context.xml
+++ b/config/alfresco/core-services-context.xml
@@ -1090,10 +1090,11 @@
-
-
+
+
+
diff --git a/pom.xml b/pom.xml
index 60818e2ef1..47c8c9c98b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,6 +39,11 @@
javax.mail
1.5.2
+
+ org.alfresco.services
+ alfresco-events
+ 1.1-SNAPSHOT
+
com.icegreen
greenmail
diff --git a/source/java/org/alfresco/repo/events/EventPreparator.java b/source/java/org/alfresco/repo/events/EventPreparator.java
new file mode 100644
index 0000000000..cd08adc653
--- /dev/null
+++ b/source/java/org/alfresco/repo/events/EventPreparator.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2005-2014 Alfresco Software Limited.
+ *
+ * This file is part of Alfresco
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ */
+package org.alfresco.repo.events;
+
+import org.alfresco.events.types.Event;
+
+
+/**
+* Creates and prepares event information.
+*
+* The primary reason for this interface is to allow for deferred creation
+* of the Event. If a NoOpEventPublisher is being used then the prepareEvent()
+* method will never get called.
+*
+* As of Java 8 a Lambda expression could be used as the implementation of
+* this FunctionalInterface
+*
+* @author Gethin James
+* @since 5.0
+**/
+
+//@FunctionalInterface
+public interface EventPreparator
+{
+ public Event prepareEvent(String user, String networkId, String transactionId);
+}
diff --git a/source/java/org/alfresco/repo/events/EventPublisher.java b/source/java/org/alfresco/repo/events/EventPublisher.java
new file mode 100644
index 0000000000..e25e76344e
--- /dev/null
+++ b/source/java/org/alfresco/repo/events/EventPublisher.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2005-2014 Alfresco Software Limited.
+ *
+ * This file is part of Alfresco
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ */
+package org.alfresco.repo.events;
+
+import org.alfresco.events.types.Event;
+
+/**
+ * EventPublisher can be used to broadcast events.
+ *
+ * @author Gethin James
+ * @since 5.0
+ */
+public interface EventPublisher
+{
+ //TODO AbstractEventsService should probably implement this interface
+
+ /**
+ * Publish the event
+ * @param event Event
+ */
+ public void publishEvent(Event event);
+
+ /**
+ * Publish the event using an EventPreparator
+ * @param prep EventPreparator
+ */
+ public void publishEvent(EventPreparator prep);
+
+}
diff --git a/source/java/org/alfresco/repo/events/NoOpEventPublisher.java b/source/java/org/alfresco/repo/events/NoOpEventPublisher.java
new file mode 100644
index 0000000000..1ed70f6420
--- /dev/null
+++ b/source/java/org/alfresco/repo/events/NoOpEventPublisher.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2005-2014 Alfresco Software Limited.
+ *
+ * This file is part of Alfresco
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ */
+package org.alfresco.repo.events;
+
+import org.alfresco.events.types.Event;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * An implementation of EventPublisher that does nothing.
+ *
+ * @author Gethin James
+ * @since 5.0
+ */
+public class NoOpEventPublisher implements EventPublisher {
+
+ private static final Logger logger = LoggerFactory.getLogger(NoOpEventPublisher.class);
+
+ @Override
+ public void publishEvent(Event event)
+ {
+ if (logger.isDebugEnabled())
+ {
+ logger.debug("No event published for [" + event + "]");
+ }
+ }
+
+ @Override
+ public void publishEvent(EventPreparator prep)
+ {
+ if (logger.isDebugEnabled())
+ {
+ logger.debug("No event published with preparator.");
+ }
+ }
+
+}
\ No newline at end of file