http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java
 
b/mailbox/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java
index 79786c1..ce48e91 100644
--- 
a/mailbox/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java
+++ 
b/mailbox/jcr/src/test/java/org/apache/james/mailbox/jcr/JCRMailboxManagerTest.java
@@ -38,6 +38,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jcr.mail.JCRModSeqProvider;
 import org.apache.james.mailbox.jcr.mail.JCRUidProvider;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.junit.runner.RunWith;
 import org.xenei.junit.contract.Contract;
@@ -87,7 +88,8 @@ public class JCRMailboxManagerTest extends 
MailboxManagerTest<JCRMailboxManager>
             GroupMembershipResolver groupMembershipResolver = new 
SimpleGroupMembershipResolver();
             MessageParser messageParser = new MessageParser();
 
-            JCRMailboxManager manager = new JCRMailboxManager(mf, null, 
locker, aclResolver, groupMembershipResolver, messageParser);
+            JCRMailboxManager manager = new JCRMailboxManager(mf, null, 
locker, aclResolver, groupMembershipResolver, 
+                    messageParser, new DefaultMessageId.Factory());
 
             try {
                 manager.init();

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
index 626f7dc..e2e8f68 100644
--- 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
+++ 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMailboxManager.java
@@ -28,6 +28,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jpa.mail.JPAMailboxMapper;
 import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.StoreMailboxManager;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -40,8 +41,9 @@ import 
org.apache.james.mailbox.store.transaction.TransactionalMapper;
 public abstract class JPAMailboxManager extends StoreMailboxManager {
     
     public JPAMailboxManager(JPAMailboxSessionMapperFactory 
mailboxSessionMapperFactory,
-            final Authenticator authenticator, MailboxPathLocker locker, 
MailboxACLResolver aclResolver, GroupMembershipResolver 
groupMembershipResolver, MessageParser messageParser) {
-        super(mailboxSessionMapperFactory, authenticator, locker, aclResolver, 
groupMembershipResolver, messageParser);
+            final Authenticator authenticator, MailboxPathLocker locker, 
MailboxACLResolver aclResolver, 
+            GroupMembershipResolver groupMembershipResolver, MessageParser 
messageParser, MessageId.Factory messageIdFactory) {
+        super(mailboxSessionMapperFactory, authenticator, locker, aclResolver, 
groupMembershipResolver, messageParser, messageIdFactory);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
index dbe718e..8f3c800 100644
--- 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
+++ 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/JPAMessageManager.java
@@ -32,6 +32,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
 import org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMailboxMessage;
 import org.apache.james.mailbox.model.MessageAttachment;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -52,10 +53,10 @@ public class JPAMessageManager extends StoreMessageManager {
                        final MailboxEventDispatcher dispatcher, 
MailboxPathLocker locker, 
                        final Mailbox mailbox, MailboxACLResolver aclResolver, 
                        GroupMembershipResolver groupMembershipResolver, 
QuotaManager quotaManager,
-                QuotaRootResolver quotaRootResolver, MessageParser 
messageParser) throws MailboxException {
+                QuotaRootResolver quotaRootResolver, MessageParser 
messageParser, MessageId.Factory messageIdFactory) throws MailboxException {
        
         super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, 
groupMembershipResolver,
-            quotaManager, quotaRootResolver, messageParser);
+            quotaManager, quotaRootResolver, messageParser, messageIdFactory);
     }
     
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
----------------------------------------------------------------------
diff --git 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
index f797157..37c6ed0 100644
--- 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
+++ 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/mail/model/openjpa/AbstractJPAMailboxMessage.java
@@ -491,7 +491,7 @@ public abstract class AbstractJPAMailboxMessage implements 
MailboxMessage {
 
     @Override
     public MessageId getMessageId() {
-        return new DefaultMessageId(getMailboxId(), getUid());
+        return new DefaultMessageId();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
index 377d29d..637731c 100644
--- 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
+++ 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMailboxManager.java
@@ -29,6 +29,7 @@ import org.apache.james.mailbox.jpa.JPAMailboxManager;
 import org.apache.james.mailbox.jpa.JPAMailboxSessionMapperFactory;
 import org.apache.james.mailbox.jpa.mail.model.openjpa.EncryptDecryptHelper;
 import 
org.apache.james.mailbox.jpa.openjpa.OpenJPAMessageManager.AdvancedFeature;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.StoreMessageManager;
@@ -43,8 +44,10 @@ public class OpenJPAMailboxManager extends JPAMailboxManager 
{
 
     private final AdvancedFeature feature;
 
-    public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, MailboxPathLocker locker, boolean useStreaming, 
MailboxACLResolver aclResolver, GroupMembershipResolver 
groupMembershipResolver, MessageParser messageParser) {
-        super(mapperFactory, authenticator,  locker, aclResolver, 
groupMembershipResolver, messageParser);
+    public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, 
+            MailboxPathLocker locker, boolean useStreaming, MailboxACLResolver 
aclResolver, 
+            GroupMembershipResolver groupMembershipResolver, MessageParser 
messageParser, MessageId.Factory messageIdFactory) {
+        super(mapperFactory, authenticator,  locker, aclResolver, 
groupMembershipResolver, messageParser, messageIdFactory);
         if (useStreaming) {
             feature = AdvancedFeature.Streaming;
         } else {
@@ -52,8 +55,10 @@ public class OpenJPAMailboxManager extends JPAMailboxManager 
{
         }
     }
 
-    public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, MailboxPathLocker locker,  String encryptPass, 
MailboxACLResolver aclResolver, GroupMembershipResolver 
groupMembershipResolver, MessageParser messageParser) {
-        super(mapperFactory, authenticator,  locker, aclResolver, 
groupMembershipResolver, messageParser);
+    public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, 
+            MailboxPathLocker locker,  String encryptPass, MailboxACLResolver 
aclResolver, 
+            GroupMembershipResolver groupMembershipResolver, MessageParser 
messageParser, MessageId.Factory messageIdFactory) {
+        super(mapperFactory, authenticator,  locker, aclResolver, 
groupMembershipResolver, messageParser, messageIdFactory);
         if (encryptPass != null) {
             EncryptDecryptHelper.init(encryptPass);
             feature = AdvancedFeature.Encryption;
@@ -62,8 +67,10 @@ public class OpenJPAMailboxManager extends JPAMailboxManager 
{
         }
     }
     
-    public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, MailboxACLResolver aclResolver, 
GroupMembershipResolver groupMembershipResolver, MessageParser messageParser) {
-        this(mapperFactory, authenticator, new JVMMailboxPathLocker(), false, 
aclResolver, groupMembershipResolver, messageParser);
+    public OpenJPAMailboxManager(JPAMailboxSessionMapperFactory mapperFactory, 
Authenticator authenticator, 
+            MailboxACLResolver aclResolver, GroupMembershipResolver 
groupMembershipResolver, 
+            MessageParser messageParser, MessageId.Factory messageIdFactory) {
+        this(mapperFactory, authenticator, new JVMMailboxPathLocker(), false, 
aclResolver, groupMembershipResolver, messageParser, messageIdFactory);
     }
 
     @Override
@@ -78,6 +85,7 @@ public class OpenJPAMailboxManager extends JPAMailboxManager {
             getGroupMembershipResolver(),
             getQuotaManager(),
             getQuotaRootResolver(),
-            getMessageParser());
+            getMessageParser(),
+            getMessageIdFactory());
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
index 7b60d43..cde1305 100644
--- 
a/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
+++ 
b/mailbox/jpa/src/main/java/org/apache/james/mailbox/jpa/openjpa/OpenJPAMessageManager.java
@@ -34,6 +34,7 @@ import org.apache.james.mailbox.jpa.mail.model.JPAMailbox;
 import 
org.apache.james.mailbox.jpa.mail.model.openjpa.JPAEncryptedMailboxMessage;
 import 
org.apache.james.mailbox.jpa.mail.model.openjpa.JPAStreamingMailboxMessage;
 import org.apache.james.mailbox.model.MessageAttachment;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -61,17 +62,20 @@ public class OpenJPAMessageManager extends 
JPAMessageManager {
                MessageSearchIndex index,MailboxEventDispatcher dispatcher, 
                MailboxPathLocker locker, Mailbox mailbox, MailboxACLResolver 
aclResolver, 
                GroupMembershipResolver groupMembershipResolver,
-            QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, 
MessageParser messageParser) throws MailboxException {
-        this(mapperFactory, index, dispatcher, locker,  mailbox, 
AdvancedFeature.None, aclResolver, groupMembershipResolver, quotaManager, 
quotaRootResolver, messageParser);
+            QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, 
MessageParser messageParser,
+            MessageId.Factory messageIdFactory) throws MailboxException {
+        this(mapperFactory, index, dispatcher, locker,  mailbox, 
AdvancedFeature.None, aclResolver, 
+                groupMembershipResolver, quotaManager, quotaRootResolver, 
messageParser, messageIdFactory);
     }
 
     public OpenJPAMessageManager(MailboxSessionMapperFactory mapperFactory, 
                MessageSearchIndex index, MailboxEventDispatcher dispatcher, 
                MailboxPathLocker locker, Mailbox mailbox, AdvancedFeature f, 
                MailboxACLResolver aclResolver, GroupMembershipResolver 
groupMembershipResolver,
-            QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, 
MessageParser messageParser) throws MailboxException {
+            QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, 
MessageParser messageParser,
+            MessageId.Factory messageIdFactory) throws MailboxException {
        
-        super(mapperFactory,  index, dispatcher, locker, mailbox, aclResolver, 
groupMembershipResolver, quotaManager, quotaRootResolver, messageParser);
+        super(mapperFactory,  index, dispatcher, locker, mailbox, aclResolver, 
groupMembershipResolver, quotaManager, quotaRootResolver, messageParser, 
messageIdFactory);
         this.feature = f;
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
----------------------------------------------------------------------
diff --git a/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml 
b/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
index 21caf57..ecb471f 100644
--- a/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
+++ b/mailbox/jpa/src/main/resources/META-INF/spring/mailbox-jpa.xml
@@ -37,11 +37,15 @@
         <constructor-arg index="4" ref="aclResolver"/>
         <constructor-arg index="5" ref="groupMembershipResolver"/>
         <constructor-arg index="6" ref="messageParser"/>
+        <constructor-arg index="7" ref="jpa-messageIdFactory" />
         <property name="quotaManager" ref="quotaManager"/>
         <property name="quotaRootResolver" ref="quotaRootResolver"/>
         <property name="quotaUpdater" ref="quotaUpdater"/>
         <property name="delegatingMailboxListener" ref="delegating-listener"/>
     </bean>
+    
+    <bean id="jpa-messageIdFactory" 
class="org.apache.james.mailbox.store.mail.model.DefaultMessageId.Factory" />
+    
     <bean id ="jpa-subscriptionManager" 
class="org.apache.james.mailbox.jpa.JPASubscriptionManager">
         <constructor-arg index="0" ref="jpa-sessionMapperFactory"/>
     </bean>

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
index b8c583a..c496704 100644
--- 
a/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
+++ 
b/mailbox/jpa/src/test/java/org/apache/james/mailbox/jpa/JPAMailboxManagerTest.java
@@ -38,6 +38,7 @@ import 
org.apache.james.mailbox.jpa.mail.model.openjpa.JPAMailboxMessage;
 import org.apache.james.mailbox.jpa.openjpa.OpenJPAMailboxManager;
 import org.apache.james.mailbox.jpa.user.model.JPASubscription;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.openjpa.persistence.OpenJPAPersistence;
 import org.junit.runner.RunWith;
@@ -86,7 +87,7 @@ public class JPAMailboxManagerTest {
             GroupMembershipResolver groupMembershipResolver = new 
SimpleGroupMembershipResolver();
             MessageParser messageParser = new MessageParser();
 
-            openJPAMailboxManager = new OpenJPAMailboxManager(mf, null, 
aclResolver, groupMembershipResolver, messageParser);
+            openJPAMailboxManager = new OpenJPAMailboxManager(mf, null, 
aclResolver, groupMembershipResolver, messageParser, new 
DefaultMessageId.Factory());
 
             try {
                 openJPAMailboxManager.init();

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java
 
b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java
index a45e9fc..cc3e1b4 100644
--- 
a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java
+++ 
b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMailboxMessageSearchIndexTest.java
@@ -47,6 +47,7 @@ import org.apache.james.mailbox.model.SimpleMailboxACL;
 import org.apache.james.mailbox.store.MessageBuilder;
 import org.apache.james.mailbox.store.SimpleMailboxMembership;
 import org.apache.james.mailbox.store.TestId;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.lucene.store.RAMDirectory;
 import org.junit.Before;
@@ -106,23 +107,23 @@ public class LuceneMailboxMessageSearchIndexTest {
         headersTestSubject.put("Cc", "test211 <test21@localhost>, test6 
<test6@foobar>");
         
         uid1 = MessageUid.of(1);
-        SimpleMailboxMembership m = new 
SimpleMailboxMembership(mailbox.getMailboxId(), uid1, 0, new Date(), 200, new 
Flags(Flag.ANSWERED), "My Body".getBytes(), headersSubject);
+        SimpleMailboxMembership m = new SimpleMailboxMembership(new 
DefaultMessageId(), mailbox.getMailboxId(), uid1, 0, new Date(), 200, new 
Flags(Flag.ANSWERED), "My Body".getBytes(), headersSubject);
         index.add(null, mailbox, m);
 
         uid2 = MessageUid.of(1);
-        SimpleMailboxMembership m2 = new 
SimpleMailboxMembership(mailbox2.getMailboxId(), uid2, 0, new Date(), 20, new 
Flags(Flag.ANSWERED), "My Body".getBytes(), headersSubject);
+        SimpleMailboxMembership m2 = new SimpleMailboxMembership(new 
DefaultMessageId(), mailbox2.getMailboxId(), uid2, 0, new Date(), 20, new 
Flags(Flag.ANSWERED), "My Body".getBytes(), headersSubject);
         index.add(null, mailbox2, m2);
         
         uid3 = MessageUid.of(2);
         Calendar cal = Calendar.getInstance();
         cal.set(1980, 2, 10);
-        SimpleMailboxMembership m3 = new 
SimpleMailboxMembership(mailbox.getMailboxId(), uid3, 0, cal.getTime(), 20, new 
Flags(Flag.DELETED), "My Otherbody".getBytes(), headersTest);
+        SimpleMailboxMembership m3 = new SimpleMailboxMembership(new 
DefaultMessageId(), mailbox.getMailboxId(), uid3, 0, cal.getTime(), 20, new 
Flags(Flag.DELETED), "My Otherbody".getBytes(), headersTest);
         index.add(null, mailbox, m3);
         
         uid4 = MessageUid.of(3);
         Calendar cal2 = Calendar.getInstance();
         cal2.set(8000, 2, 10);
-        SimpleMailboxMembership m4 = new 
SimpleMailboxMembership(mailbox.getMailboxId(), uid4, 0, cal2.getTime(), 20, 
new Flags(Flag.DELETED), "My Otherbody2".getBytes(), headersTestSubject);
+        SimpleMailboxMembership m4 = new SimpleMailboxMembership(new 
DefaultMessageId(), mailbox.getMailboxId(), uid4, 0, cal2.getTime(), 20, new 
Flags(Flag.DELETED), "My Otherbody2".getBytes(), headersTestSubject);
         index.add(null, mailbox, m4);
         
         uid5 = MessageUid.of(10);

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
 
b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
index dd3bd62..0551ae8 100644
--- 
a/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
+++ 
b/mailbox/lucene/src/test/java/org/apache/james/mailbox/lucene/search/LuceneMessageSearchIndexTest.java
@@ -25,9 +25,11 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.search.AbstractMessageSearchIndexTest;
 import org.apache.lucene.store.RAMDirectory;
@@ -43,13 +45,15 @@ public class LuceneMessageSearchIndexTest extends 
AbstractMessageSearchIndexTest
     protected void initializeMailboxManager() throws Exception {
         MailboxSessionMapperFactory mapperFactory = new 
InMemoryMailboxSessionMapperFactory();
         messageSearchIndex = new LuceneMessageSearchIndex(mapperFactory, new 
InMemoryId.Factory(), new RAMDirectory());
+        MessageId.Factory messageIdFactory = new DefaultMessageId.Factory();
         storeMailboxManager = new InMemoryMailboxManager(
             mapperFactory,
             new FakeAuthenticator(),
             new JVMMailboxPathLocker(),
             new UnionMailboxACLResolver(),
             new SimpleGroupMembershipResolver(),
-            new MessageParser());
+            new MessageParser(),
+            messageIdFactory);
         storeMailboxManager.setMessageSearchIndex(messageSearchIndex);
         storeMailboxManager.init();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml
----------------------------------------------------------------------
diff --git 
a/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml 
b/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml
index 5e369f8..aaa1062 100644
--- a/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml
+++ b/mailbox/maildir/src/main/resources/META-INF/spring/mailbox-maildir.xml
@@ -40,12 +40,16 @@
         <constructor-arg index="3" ref="aclResolver"/>
         <constructor-arg index="4" ref="groupMembershipResolver"/>
         <constructor-arg index="5" ref="messageParser"/>
+        <constructor-arg index="6" ref="maildir-messageIdFactory" />
 <!--         <property name="messageSearchIndex" ref="lazyIndex"/> -->
         <property name="quotaManager" ref="quotaManager"/>
         <property name="quotaRootResolver" ref="quotaRootResolver"/>
         <property name="quotaUpdater" ref="quotaUpdater"/>
         <property name="delegatingMailboxListener" ref="delegating-listener"/>
     </bean>
+    
+    <bean id="maildir-messageIdFactory" 
class="org.apache.james.mailbox.store.mail.model.DefaultMessageId.Factory" />
+    
     <bean id ="maildir-subscriptionManager" 
class="org.apache.james.mailbox.store.StoreSubscriptionManager">
         <constructor-arg index="0" ref="maildir-sessionMapperFactory"/>
     </bean>

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTests.java
----------------------------------------------------------------------
diff --git 
a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTests.java
 
b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTests.java
index 1369f64..2c3a13d 100644
--- 
a/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTests.java
+++ 
b/mailbox/maildir/src/test/java/org/apache/james/mailbox/maildir/MaildirMailboxManagerTests.java
@@ -29,6 +29,7 @@ import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.StoreMailboxManager;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.junit.Ignore;
 import org.junit.Rule;
@@ -58,7 +59,8 @@ public class MaildirMailboxManagerTests {
             GroupMembershipResolver groupMembershipResolver = new 
SimpleGroupMembershipResolver();
             MessageParser messageParser = new MessageParser();
 
-            StoreMailboxManager manager = new StoreMailboxManager(mf, null, 
new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver, 
messageParser);
+            StoreMailboxManager manager = new StoreMailboxManager(mf, null, 
new JVMMailboxPathLocker(), aclResolver, 
+                    groupMembershipResolver, messageParser, new 
DefaultMessageId.Factory());
             manager.init();
 
             return manager;

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
index 78bac42..4f77b52 100644
--- 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
+++ 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManager.java
@@ -28,6 +28,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.acl.MailboxACLResolver;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.StoreMailboxManager;
@@ -38,8 +39,10 @@ import 
org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 public class InMemoryMailboxManager extends StoreMailboxManager {
 
     @Inject
-    public InMemoryMailboxManager(MailboxSessionMapperFactory 
mailboxSessionMapperFactory, Authenticator authenticator, MailboxPathLocker 
locker, MailboxACLResolver aclResolver, GroupMembershipResolver 
groupMembershipResolver, MessageParser messageParser) {
-        super(mailboxSessionMapperFactory, authenticator, locker, aclResolver, 
groupMembershipResolver, messageParser);
+    public InMemoryMailboxManager(MailboxSessionMapperFactory 
mailboxSessionMapperFactory, Authenticator authenticator, 
+            MailboxPathLocker locker, MailboxACLResolver aclResolver, 
GroupMembershipResolver groupMembershipResolver,
+            MessageParser messageParser, MessageId.Factory messageIdFactory) {
+        super(mailboxSessionMapperFactory, authenticator, locker, aclResolver, 
groupMembershipResolver, messageParser, messageIdFactory);
     }
 
     @Override
@@ -63,6 +66,7 @@ public class InMemoryMailboxManager extends 
StoreMailboxManager {
             getGroupMembershipResolver(),
             getQuotaManager(),
             getQuotaRootResolver(),
-            getMessageParser());
+            getMessageParser(),
+            getMessageIdFactory());
     }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
index 667948a..a9448b6 100644
--- 
a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
+++ 
b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/InMemoryMessageManager.java
@@ -7,6 +7,7 @@ import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.acl.GroupMembershipResolver;
 import org.apache.james.mailbox.acl.MailboxACLResolver;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.quota.QuotaManager;
 import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
@@ -18,8 +19,10 @@ import 
org.apache.james.mailbox.store.search.MessageSearchIndex;
 
 public class InMemoryMessageManager extends StoreMessageManager {
 
-    public InMemoryMessageManager(MailboxSessionMapperFactory mapperFactory, 
MessageSearchIndex index, MailboxEventDispatcher dispatcher, MailboxPathLocker 
locker, Mailbox mailbox, MailboxACLResolver aclResolver, 
GroupMembershipResolver groupMembershipResolver, QuotaManager quotaManager, 
QuotaRootResolver quotaRootResolver, MessageParser messageParser) throws 
MailboxException {
-        super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, 
groupMembershipResolver, quotaManager, quotaRootResolver, messageParser);
+    public InMemoryMessageManager(MailboxSessionMapperFactory mapperFactory, 
MessageSearchIndex index, MailboxEventDispatcher dispatcher, 
+            MailboxPathLocker locker, Mailbox mailbox, MailboxACLResolver 
aclResolver, GroupMembershipResolver groupMembershipResolver, 
+            QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, 
MessageParser messageParser, MessageId.Factory messageIdFactory) throws 
MailboxException {
+        super(mapperFactory, index, dispatcher, locker, mailbox, aclResolver, 
groupMembershipResolver, quotaManager, quotaRootResolver, messageParser, 
messageIdFactory);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml 
b/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml
index 5da789a..8789871 100644
--- a/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml
+++ b/mailbox/memory/src/main/resources/META-INF/spring/mailbox-memory.xml
@@ -36,12 +36,15 @@
         <constructor-arg index="3" ref="aclResolver"/>
         <constructor-arg index="4" ref="groupMembershipResolver"/>
         <constructor-arg index="5" ref="messageParser"/>
+        <constructor-arg index="6" ref="memory-messageIdFactory" />
 <!--         <property name="messageSearchIndex" ref="lazyIndex"/> -->
         <property name="quotaManager" ref="quotaManager"/>
         <property name="quotaRootResolver" ref="quotaRootResolver"/>
         <property name="quotaUpdater" ref="quotaUpdater"/>
     </bean>
 
+    <bean id="memory-messageIdFactory" 
class="org.apache.james.mailbox.store.mail.model.DefaultMessageId.Factory" />
+
     <bean id ="memory-subscriptionManager" 
class="org.apache.james.mailbox.store.StoreSubscriptionManager">
         <constructor-arg index="0" ref="memory-sessionMapperFactory"/>
     </bean>

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
index 40de979..b3c8d19 100644
--- 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
+++ 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/InMemoryMailboxManagerTest.java
@@ -24,8 +24,10 @@ import org.apache.james.mailbox.acl.MailboxACLResolver;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.exception.MailboxException;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.junit.runner.RunWith;
 import org.xenei.junit.contract.Contract;
@@ -48,7 +50,9 @@ public class InMemoryMailboxManagerTest {
             MessageParser messageParser = new MessageParser();
 
             InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = 
new InMemoryMailboxSessionMapperFactory();
-            InMemoryMailboxManager mailboxManager = new 
InMemoryMailboxManager(mailboxSessionMapperFactory, new FakeAuthenticator(), 
new JVMMailboxPathLocker(), aclResolver, groupMembershipResolver, 
messageParser);
+            MessageId.Factory messageIdFactory = new 
DefaultMessageId.Factory();
+            InMemoryMailboxManager mailboxManager = new 
InMemoryMailboxManager(mailboxSessionMapperFactory, new FakeAuthenticator(), 
+                    new JVMMailboxPathLocker(), aclResolver, 
groupMembershipResolver, messageParser, messageIdFactory);
 
             try {
                 mailboxManager.init();

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
index db95b61..f862e53 100644
--- 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
+++ 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMailboxManagerAttachmentTest.java
@@ -29,10 +29,12 @@ import org.apache.james.mailbox.MailboxManager;
 import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.AbstractMailboxManagerAttachmentTest;
 import org.apache.james.mailbox.store.Authenticator;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.NoMailboxPathLocker;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 
 public class InMemoryMailboxManagerAttachmentTest extends 
AbstractMailboxManagerAttachmentTest {
@@ -44,12 +46,15 @@ public class InMemoryMailboxManagerAttachmentTest extends 
AbstractMailboxManager
     public InMemoryMailboxManagerAttachmentTest() throws Exception {
         mailboxSessionMapperFactory = new 
InMemoryMailboxSessionMapperFactory();
         Authenticator noAuthenticator = null;
-        mailboxManager = new 
InMemoryMailboxManager(mailboxSessionMapperFactory, noAuthenticator, new 
NoMailboxPathLocker(), new UnionMailboxACLResolver(), null, new 
MessageParser());
+        MessageId.Factory messageIdFactory = new DefaultMessageId.Factory();
+        mailboxManager = new 
InMemoryMailboxManager(mailboxSessionMapperFactory, noAuthenticator, new 
NoMailboxPathLocker(), 
+                new UnionMailboxACLResolver(), null, new MessageParser(), 
messageIdFactory);
         mailboxManager.init();
         MessageParser failingMessageParser = mock(MessageParser.class);
         when(failingMessageParser.retrieveAttachments(any(InputStream.class)))
             .thenThrow(new RuntimeException("Message parser set to fail"));
-        parseFailingMailboxManager = new 
InMemoryMailboxManager(mailboxSessionMapperFactory, noAuthenticator, new 
NoMailboxPathLocker(), new UnionMailboxACLResolver(), null, 
failingMessageParser);
+        parseFailingMailboxManager = new 
InMemoryMailboxManager(mailboxSessionMapperFactory, noAuthenticator, new 
NoMailboxPathLocker(),
+                new UnionMailboxACLResolver(), null, failingMessageParser, 
messageIdFactory);
         parseFailingMailboxManager.init();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
index cc50512..815744c 100644
--- 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
+++ 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/mail/InMemoryMapperProvider.java
@@ -6,18 +6,22 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryId;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
 import org.apache.james.mailbox.mock.MockMailboxSession;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.AnnotationMapper;
 import org.apache.james.mailbox.store.mail.AttachmentMapper;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.MapperProvider;
 
 public class InMemoryMapperProvider implements MapperProvider {
 
     private final Random random;
+    private MessageId.Factory messageIdFactory;
 
     public InMemoryMapperProvider() {
         random = new Random();
+        messageIdFactory = new DefaultMessageId.Factory();
     }
 
     @Override
@@ -59,4 +63,9 @@ public class InMemoryMapperProvider implements MapperProvider 
{
     public AnnotationMapper createAnnotationMapper() throws MailboxException {
         return new 
InMemoryMailboxSessionMapperFactory().createAnnotationMapper(new 
MockMailboxSession("user"));
     }
+    
+    @Override
+    public MessageId generateMessageId() {
+        return messageIdFactory.generate();
+    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
----------------------------------------------------------------------
diff --git 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
index a47965f..508f2d7 100644
--- 
a/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
+++ 
b/mailbox/memory/src/test/java/org/apache/james/mailbox/inmemory/manager/InMemoryIntegrationResources.java
@@ -47,6 +47,7 @@ import org.apache.james.mailbox.quota.QuotaRootResolver;
 import org.apache.james.mailbox.store.FakeAuthenticator;
 import org.apache.james.mailbox.store.NoMailboxPathLocker;
 import org.apache.james.mailbox.store.StoreMailboxManager;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.apache.james.mailbox.store.quota.CurrentQuotaCalculator;
 import org.apache.james.mailbox.store.quota.DefaultQuotaRootResolver;
@@ -63,13 +64,15 @@ public class InMemoryIntegrationResources implements 
IntegrationResources {
         FakeAuthenticator mockAuthenticator = new FakeAuthenticator();
         mockAuthenticator.addUser(ManagerTestResources.USER, 
ManagerTestResources.USER_PASS);
         InMemoryMailboxSessionMapperFactory mailboxSessionMapperFactory = new 
InMemoryMailboxSessionMapperFactory();
+        MessageId.Factory messageIdFactory = new DefaultMessageId.Factory();
         final StoreMailboxManager manager = new InMemoryMailboxManager(
             mailboxSessionMapperFactory,
             mockAuthenticator,
             new NoMailboxPathLocker(),
             new UnionMailboxACLResolver(),
             groupMembershipResolver,
-            new MessageParser());
+            new MessageParser(),
+            messageIdFactory);
         manager.init();
         return manager;
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
 
b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
index 34e351d..b104f7a 100644
--- 
a/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
+++ 
b/mailbox/scanning-search/src/test/java/org/apache/james/mailbox/store/search/SimpleMessageSearchIndexTest.java
@@ -24,9 +24,11 @@ import org.apache.james.mailbox.acl.UnionMailboxACLResolver;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxManager;
 import org.apache.james.mailbox.inmemory.InMemoryMailboxSessionMapperFactory;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.JVMMailboxPathLocker;
 import org.apache.james.mailbox.store.MailboxSessionMapperFactory;
 import org.apache.james.mailbox.store.FakeAuthenticator;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
 import org.junit.Ignore;
 
@@ -40,13 +42,15 @@ public class SimpleMessageSearchIndexTest extends 
AbstractMessageSearchIndexTest
     protected void initializeMailboxManager() throws Exception {
         MailboxSessionMapperFactory mapperFactory = new 
InMemoryMailboxSessionMapperFactory();
         messageSearchIndex = new SimpleMessageSearchIndex(mapperFactory, 
mapperFactory);
+        MessageId.Factory messageIdFactory = new DefaultMessageId.Factory();
         storeMailboxManager = new InMemoryMailboxManager(
             mapperFactory,
             new FakeAuthenticator(),
             new JVMMailboxPathLocker(),
             new UnionMailboxACLResolver(),
             new SimpleGroupMembershipResolver(),
-            new MessageParser());
+            new MessageParser(),
+            messageIdFactory);
         storeMailboxManager.setMessageSearchIndex(messageSearchIndex);
         storeMailboxManager.init();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageResultImpl.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageResultImpl.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageResultImpl.java
index 6b79611..4b8d7d7 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageResultImpl.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/MessageResultImpl.java
@@ -34,6 +34,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.Content;
 import org.apache.james.mailbox.model.Headers;
 import org.apache.james.mailbox.model.MessageAttachment;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageResult;
 import org.apache.james.mailbox.model.MimeDescriptor;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
@@ -72,6 +73,11 @@ public class MessageResultImpl implements MessageResult {
     }
 
     @Override
+    public MessageId getMessageId() {
+        return message.getMessageId();
+    }
+    
+    @Override
     public Date getInternalDate() {
         return message.getInternalDate();
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java
index 7f01b2c..19ad052 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/SimpleMessageMetaData.java
@@ -24,6 +24,7 @@ import java.util.Date;
 import javax.mail.Flags;
 
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 
@@ -36,17 +37,19 @@ public class SimpleMessageMetaData implements 
MessageMetaData{
     private final long size;
     private final Date internalDate;
     private final long modSeq;
+    private final MessageId messageId;
 
-    public SimpleMessageMetaData(MessageUid uid, long modSeq, Flags flags, 
long size, Date internalDate) {
+    public SimpleMessageMetaData(MessageUid uid, long modSeq, Flags flags, 
long size, Date internalDate, MessageId messageId) {
         this.uid = uid;
         this.flags = flags;
         this.size = size;
         this.modSeq = modSeq;
         this.internalDate = internalDate;
+        this.messageId = messageId;
     }
     
     public SimpleMessageMetaData(MailboxMessage message) {
-        this(message.getUid(), message.getModSeq(), message.createFlags(), 
message.getFullContentOctets(), message.getInternalDate());
+        this(message.getUid(), message.getModSeq(), message.createFlags(), 
message.getFullContentOctets(), message.getInternalDate(), 
message.getMessageId());
     }
     
     @Override
@@ -70,6 +73,11 @@ public class SimpleMessageMetaData implements 
MessageMetaData{
     }
 
     @Override
+    public MessageId getMessageId() {
+        return messageId;
+    }
+    
+    @Override
     public boolean equals(Object obj) {
         if(obj instanceof SimpleMessageMetaData) {
             return uid.equals(((SimpleMessageMetaData) obj).getUid());

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
index 9512849..1a54ee4 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMailboxManager.java
@@ -58,6 +58,8 @@ import org.apache.james.mailbox.model.MailboxMetaData;
 import org.apache.james.mailbox.model.MailboxMetaData.Selectability;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MailboxQuery;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.model.MessageId.Factory;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.MultimailboxesSearchQuery;
 import org.apache.james.mailbox.model.SimpleMailboxACL;
@@ -126,22 +128,32 @@ public class StoreMailboxManager implements 
MailboxManager {
     private int fetchBatchSize = DEFAULT_FETCH_BATCH_SIZE;
 
     private final MessageParser messageParser;
+    private final Factory messageIdFactory;
 
 
     @Inject
-    public StoreMailboxManager(MailboxSessionMapperFactory 
mailboxSessionMapperFactory, Authenticator authenticator, MailboxPathLocker 
locker, MailboxACLResolver aclResolver, GroupMembershipResolver 
groupMembershipResolver, MessageParser messageParser) {
+    public StoreMailboxManager(MailboxSessionMapperFactory 
mailboxSessionMapperFactory, Authenticator authenticator, 
+            MailboxPathLocker locker, MailboxACLResolver aclResolver, 
GroupMembershipResolver groupMembershipResolver, 
+            MessageParser messageParser, MessageId.Factory messageIdFactory) {
         this.authenticator = authenticator;
         this.locker = locker;
         this.mailboxSessionMapperFactory = mailboxSessionMapperFactory;
         this.aclResolver = aclResolver;
         this.groupMembershipResolver = groupMembershipResolver;
         this.messageParser = messageParser;
+        this.messageIdFactory = messageIdFactory;
     }
 
-    public StoreMailboxManager(MailboxSessionMapperFactory 
mailboxSessionMapperFactory, Authenticator authenticator, MailboxACLResolver 
aclResolver, GroupMembershipResolver groupMembershipResolver, MessageParser 
messageParser) {
-        this(mailboxSessionMapperFactory, authenticator, new 
JVMMailboxPathLocker(), aclResolver, groupMembershipResolver, messageParser);
+    public StoreMailboxManager(MailboxSessionMapperFactory 
mailboxSessionMapperFactory, Authenticator authenticator, 
+            MailboxACLResolver aclResolver, GroupMembershipResolver 
groupMembershipResolver, MessageParser messageParser,
+            MessageId.Factory messageIdFactory) {
+        this(mailboxSessionMapperFactory, authenticator, new 
JVMMailboxPathLocker(), aclResolver, groupMembershipResolver, messageParser, 
messageIdFactory);
     }
 
+    protected Factory getMessageIdFactory() {
+        return messageIdFactory;
+    }
+    
     public void setMailboxSessionIdGenerator(MailboxSessionIdGenerator 
idGenerator) {
         this.idGenerator = idGenerator;
     }
@@ -389,7 +401,9 @@ public class StoreMailboxManager implements MailboxManager {
      * @return storeMailbox
      */
     protected StoreMessageManager createMessageManager(Mailbox mailbox, 
MailboxSession session) throws MailboxException {
-        return new StoreMessageManager(getMapperFactory(), 
getMessageSearchIndex(), getEventDispatcher(), getLocker(), mailbox, 
getAclResolver(), getGroupMembershipResolver(), getQuotaManager(), 
getQuotaRootResolver(), getMessageParser());
+        return new StoreMessageManager(getMapperFactory(), 
getMessageSearchIndex(), getEventDispatcher(), 
+                getLocker(), mailbox, getAclResolver(), 
getGroupMembershipResolver(), getQuotaManager(), 
+                getQuotaRootResolver(), getMessageParser(), 
getMessageIdFactory());
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index c794073..4a394d3 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -57,6 +57,8 @@ import 
org.apache.james.mailbox.model.MailboxACL.MailboxACLRights;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
 import org.apache.james.mailbox.model.MessageAttachment;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.model.MessageId.Factory;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.MessageResult.FetchGroup;
@@ -70,7 +72,6 @@ import 
org.apache.james.mailbox.store.event.MailboxEventDispatcher;
 import org.apache.james.mailbox.store.mail.AttachmentMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper;
 import org.apache.james.mailbox.store.mail.MessageMapper.FetchType;
-import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -147,10 +148,13 @@ public class StoreMessageManager implements 
org.apache.james.mailbox.MessageMana
 
     private final MessageParser messageParser;
 
+    private final Factory messageIdFactory;
+    
     private int fetchBatchSize;
 
-    public StoreMessageManager(MailboxSessionMapperFactory mapperFactory, 
MessageSearchIndex index, MailboxEventDispatcher dispatcher, MailboxPathLocker 
locker, Mailbox mailbox, MailboxACLResolver aclResolver,
-            final GroupMembershipResolver groupMembershipResolver, 
QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, MessageParser 
messageParser) throws MailboxException {
+    public StoreMessageManager(MailboxSessionMapperFactory mapperFactory, 
MessageSearchIndex index, MailboxEventDispatcher dispatcher, 
+            MailboxPathLocker locker, Mailbox mailbox, MailboxACLResolver 
aclResolver, GroupMembershipResolver groupMembershipResolver,
+            QuotaManager quotaManager, QuotaRootResolver quotaRootResolver, 
MessageParser messageParser, MessageId.Factory messageIdFactory) throws 
MailboxException {
         this.mailbox = mailbox;
         this.dispatcher = dispatcher;
         this.mapperFactory = mapperFactory;
@@ -161,12 +165,17 @@ public class StoreMessageManager implements 
org.apache.james.mailbox.MessageMana
         this.quotaManager = quotaManager;
         this.quotaRootResolver = quotaRootResolver;
         this.messageParser = messageParser;
+        this.messageIdFactory = messageIdFactory;
     }
 
     public void setFetchBatchSize(int fetchBatchSize) {
         this.fetchBatchSize = fetchBatchSize;
     }
 
+    protected Factory getMessageIdFactory() {
+        return messageIdFactory;
+    }
+    
     /**
      * Return the {@link MailboxPathLocker}
      * 
@@ -398,7 +407,7 @@ public class StoreMessageManager implements 
org.apache.james.mailbox.MessageMana
                     MailboxId mailboxId = getMailboxEntity().getMailboxId();
                     uids.put(messageUid, data);
                     dispatcher.added(mailboxSession, uids, getMailboxEntity());
-                    return new ComposedMessageId(mailboxId, new 
DefaultMessageId(mailboxId, messageUid), messageUid);
+                    return new ComposedMessageId(mailboxId, 
data.getMessageId(), messageUid);
                 }
             }, true);
 
@@ -435,18 +444,9 @@ public class StoreMessageManager implements 
org.apache.james.mailbox.MessageMana
 
     /**
      * Create a new {@link MailboxMessage} for the given data
-     * 
-     * @param internalDate
-     * @param size
-     * @param bodyStartOctet
-     * @param content
-     * @param flags
-     * @param attachments 
-     * @return membership
-     * @throws MailboxException
      */
     protected MailboxMessage createMessage(Date internalDate, int size, int 
bodyStartOctet, SharedInputStream content, Flags flags, PropertyBuilder 
propertyBuilder, List<MessageAttachment> attachments) throws MailboxException {
-        return new SimpleMailboxMessage(internalDate, size, bodyStartOctet, 
content, flags, propertyBuilder, getMailboxEntity().getMailboxId(), 
attachments);
+        return new SimpleMailboxMessage(messageIdFactory.generate(), 
internalDate, size, bodyStartOctet, content, flags, propertyBuilder, 
getMailboxEntity().getMailboxId(), attachments);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java
index 84ea6ce..93e8bda 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageResultIterator.java
@@ -30,6 +30,7 @@ import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.Content;
 import org.apache.james.mailbox.model.Headers;
 import org.apache.james.mailbox.model.MessageAttachment;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.model.MessageRange;
 import org.apache.james.mailbox.model.MessageRange.Type;
 import org.apache.james.mailbox.model.MessageResult;
@@ -195,6 +196,8 @@ public class StoreMessageResultIterator implements 
MessageResultIterator {
 
         private final Flags flags;
 
+        private final MessageId messageId;
+
         private long modSeq = -1;
 
         public UnloadedMessageResult(MailboxMessage message, MailboxException 
exception) {
@@ -204,6 +207,7 @@ public class StoreMessageResultIterator implements 
MessageResultIterator {
             uid = message.getUid();
             flags = message.createFlags();
             modSeq = message.getModSeq();
+            messageId = message.getMessageId();
             this.exception = exception;
         }
 
@@ -231,13 +235,18 @@ public class StoreMessageResultIterator implements 
MessageResultIterator {
             return uid;
         }
 
+        @Override
+        public MessageId getMessageId() {
+            return messageId;
+        }
+        
         public int compareTo(MessageResult that) {
             return uid.compareTo(that.getUid());
         }
 
         @Override
         public int hashCode() {
-            return Objects.hashCode(exception, internalDate, size, uid, flags, 
modSeq);
+            return Objects.hashCode(exception, internalDate, size, uid, flags, 
modSeq, messageId);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/dto/MessageMetaDataDataTransferObject.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/dto/MessageMetaDataDataTransferObject.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/dto/MessageMetaDataDataTransferObject.java
index 01f191f..94473ba 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/dto/MessageMetaDataDataTransferObject.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/json/event/dto/MessageMetaDataDataTransferObject.java
@@ -19,18 +19,19 @@
 
 package org.apache.james.mailbox.store.json.event.dto;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonProperty;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.model.MessageMetaData;
 import org.apache.james.mailbox.store.SimpleMessageMetaData;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonProperty;
 
 public class MessageMetaDataDataTransferObject {
     @JsonProperty()
@@ -85,10 +86,10 @@ public class MessageMetaDataDataTransferObject {
     @JsonIgnore
     public SimpleMessageMetaData getMetadata() {
         try {
-            return new SimpleMessageMetaData(MessageUid.of(uid), modseq, 
flags.getFlags(), size, parse(date));
+            return new SimpleMessageMetaData(MessageUid.of(uid), modseq, 
flags.getFlags(), size, parse(date), new DefaultMessageId()); //FIXME
         } catch(ParseException parseException) {
             LOG.error("Parse exception while parsing date while deserializing 
metadata upon event serialization. Using nowadays date instead.");
-            return new SimpleMessageMetaData(MessageUid.of(uid), modseq, 
flags.getFlags(), size, new Date());
+            return new SimpleMessageMetaData(MessageUid.of(uid), modseq, 
flags.getFlags(), size, new Date(), new DefaultMessageId()); //FIXME
         }
 
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DefaultMessageId.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DefaultMessageId.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DefaultMessageId.java
index 45e6087..f3655b1 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DefaultMessageId.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DefaultMessageId.java
@@ -1,59 +1,21 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
 package org.apache.james.mailbox.store.mail.model;
 
-import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageId;
 
-import com.google.common.base.Objects;
-import com.google.common.base.Preconditions;
-
 public class DefaultMessageId implements MessageId {
 
-    private final MailboxId mailboxId;
-    private final MessageUid messageUid;
+    public static class Factory implements MessageId.Factory {
 
-    public DefaultMessageId(MailboxId mailboxId, MessageUid messageUid) {
-        Preconditions.checkNotNull(mailboxId);
-        this.mailboxId = mailboxId;
-        this.messageUid = messageUid;
+        @Override
+        public MessageId generate() {
+            return new DefaultMessageId();
+        }
+        
     }
-    
+
     @Override
     public String serialize() {
-        return String.format("%s-%d", mailboxId.serialize(), 
messageUid.asLong());
-    }
-    
-    @Override
-    public final boolean equals(Object obj) {
-        if (obj instanceof DefaultMessageId) {
-            DefaultMessageId other = (DefaultMessageId) obj;
-            return Objects.equal(mailboxId, other.mailboxId) &&
-                    Objects.equal(messageUid, other.messageUid);
-            
-        }
-        return false;
+        throw new IllegalStateException("Capabilities should prevent calling 
this method");
     }
     
-    @Override
-    public final int hashCode() {
-        return Objects.hashCode(mailboxId, messageUid);
-    }
 }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DelegatingMailboxMessage.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DelegatingMailboxMessage.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DelegatingMailboxMessage.java
index a0128b1..3601005 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DelegatingMailboxMessage.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/DelegatingMailboxMessage.java
@@ -26,6 +26,7 @@ import java.util.List;
 import javax.mail.Flags;
 
 import org.apache.james.mailbox.model.MessageAttachment;
+import org.apache.james.mailbox.model.MessageId;
 
 public abstract class DelegatingMailboxMessage implements MailboxMessage {
 
@@ -106,8 +107,8 @@ public abstract class DelegatingMailboxMessage implements 
MailboxMessage {
     }
 
     @Override
-    public DefaultMessageId getMessageId() {
-        return new DefaultMessageId(getMailboxId(), getUid());
+    public MessageId getMessageId() {
+        return message.getMessageId();
     }
 
     public Message getMessage() {

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessage.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessage.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessage.java
index 04d660f..b17f66c 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessage.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMailboxMessage.java
@@ -32,6 +32,7 @@ import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MessageAttachment;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.model.DelegatingMailboxMessage;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 
@@ -50,7 +51,7 @@ public class SimpleMailboxMessage extends 
DelegatingMailboxMessage {
         int bodyStartOctet = Ints.checkedCast(original.getFullContentOctets() 
- original.getBodyOctets());
         PropertyBuilder pBuilder = new 
PropertyBuilder(original.getProperties());
         pBuilder.setTextualLineCount(original.getTextualLineCount());
-        return new SimpleMailboxMessage(internalDate, size, bodyStartOctet, 
content, flags, pBuilder, mailboxId, original.getAttachments());
+        return new SimpleMailboxMessage(original.getMessageId(), internalDate, 
size, bodyStartOctet, content, flags, pBuilder, mailboxId, 
original.getAttachments());
     }
 
     private static SharedByteArrayInputStream copyFullContent(MailboxMessage 
original) throws MailboxException {
@@ -72,10 +73,11 @@ public class SimpleMailboxMessage extends 
DelegatingMailboxMessage {
     private String[] userFlags;
     private long modSeq;
 
-    public SimpleMailboxMessage(Date internalDate, long size, int 
bodyStartOctet,
+    public SimpleMailboxMessage(MessageId messageId, Date internalDate, long 
size, int bodyStartOctet,
             SharedInputStream content, Flags flags,
             PropertyBuilder propertyBuilder, MailboxId mailboxId, 
List<MessageAttachment> attachments) {
         super(new SimpleMessage(
+                messageId,
                 content, size, internalDate, propertyBuilder.getSubType(),
                 propertyBuilder.getMediaType(),
                 bodyStartOctet,
@@ -89,10 +91,10 @@ public class SimpleMailboxMessage extends 
DelegatingMailboxMessage {
             this.userFlags = flags.getUserFlags();
     }
 
-    public SimpleMailboxMessage(Date internalDate, long size, int 
bodyStartOctet,
+    public SimpleMailboxMessage(MessageId messageId, Date internalDate, long 
size, int bodyStartOctet,
                                 SharedInputStream content, Flags flags,
                                 PropertyBuilder propertyBuilder, MailboxId 
mailboxId) {
-        this(internalDate, size, bodyStartOctet,
+        this(messageId, internalDate, size, bodyStartOctet,
                 content, flags,
                 propertyBuilder, mailboxId, 
ImmutableList.<MessageAttachment>of());
     }

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java
 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java
index b517c26..71ad13e 100644
--- 
a/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java
+++ 
b/mailbox/store/src/main/java/org/apache/james/mailbox/store/mail/model/impl/SimpleMessage.java
@@ -34,6 +34,7 @@ import com.google.common.collect.ImmutableList;
 
 public class SimpleMessage implements Message {
 
+    private final MessageId messageId;
     private final String subType;
     private final String mediaType;
     private final SharedInputStream content;
@@ -44,7 +45,8 @@ public class SimpleMessage implements Message {
     private final List<Property> properties;
     private final List<MessageAttachment> attachments;
 
-    public SimpleMessage(SharedInputStream content, long size, Date 
internalDate, String subType, String mediaType, int bodyStartOctet, Long 
textualLineCount, List<Property> properties, List<MessageAttachment> 
attachments) {
+    public SimpleMessage(MessageId messageId, SharedInputStream content, long 
size, Date internalDate, String subType, String mediaType, int bodyStartOctet, 
Long textualLineCount, List<Property> properties, List<MessageAttachment> 
attachments) {
+        this.messageId = messageId;
         this.subType = subType;
         this.mediaType = mediaType;
         this.content = content;
@@ -56,13 +58,13 @@ public class SimpleMessage implements Message {
         this.attachments = attachments;
     }
 
-    public SimpleMessage(SharedInputStream content, long size, Date 
internalDate, String subType, String mediaType, int bodyStartOctet, Long 
textualLineCount, List<Property> properties) {
-        this(content, size, internalDate, subType, mediaType, bodyStartOctet, 
textualLineCount, properties, ImmutableList.<MessageAttachment>of());
+    public SimpleMessage(MessageId messageId, SharedInputStream content, long 
size, Date internalDate, String subType, String mediaType, int bodyStartOctet, 
Long textualLineCount, List<Property> properties) {
+        this(messageId, content, size, internalDate, subType, mediaType, 
bodyStartOctet, textualLineCount, properties, 
ImmutableList.<MessageAttachment>of());
     }
 
     @Override
     public MessageId getMessageId() {
-        return null;
+        return messageId;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageBuilder.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageBuilder.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageBuilder.java
index 61df70d..d4adb4d 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageBuilder.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/MessageBuilder.java
@@ -25,6 +25,7 @@ import java.util.Map;
 import javax.mail.Flags;
 
 import org.apache.james.mailbox.MessageUid;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 
 public class MessageBuilder {
@@ -39,7 +40,7 @@ public class MessageBuilder {
     public int lineNumber = 0;
     
     public MailboxMessage build() throws Exception {
-        return new SimpleMailboxMembership(mailboxId, uid, -1,  internalDate, 
size, flags, body, headers);
+        return new SimpleMailboxMembership(new DefaultMessageId(), mailboxId, 
uid, -1,  internalDate, size, flags, body, headers);
     }
     
     public void header(String field, String value) {

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
index 6b18190..e250e86 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/SimpleMailboxMembership.java
@@ -38,7 +38,7 @@ import javax.mail.Flags;
 import org.apache.commons.lang.NotImplementedException;
 import org.apache.james.mailbox.MessageUid;
 import org.apache.james.mailbox.model.MessageAttachment;
-import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.Property;
 
@@ -58,9 +58,12 @@ public class SimpleMailboxMembership implements 
MailboxMessage {
     public boolean flagged = false;
     public boolean seen = false;
 
-    public SimpleMailboxMembership(TestId mailboxId, MessageUid uid, long 
modSeq, Date internalDate, int size, 
+    private MessageId messageId;
+
+    public SimpleMailboxMembership(MessageId messageId, TestId mailboxId, 
MessageUid uid, long modSeq, Date internalDate, int size, 
             Flags flags, byte[] body, Map<String, String> headers) throws 
Exception {
         super();
+        this.messageId = messageId;
         this.mailboxId = mailboxId;
         this.uid = uid;
         this.internalDate = internalDate;
@@ -263,8 +266,8 @@ public class SimpleMailboxMembership implements 
MailboxMessage {
     }
 
     @Override
-    public DefaultMessageId getMessageId() {
-        return new DefaultMessageId(getMailboxId(), getUid());
+    public MessageId getMessageId() {
+        return messageId;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
index e5003e5..a38c762 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerAnnotationTest.java
@@ -41,6 +41,7 @@ import org.apache.james.mailbox.model.MailboxAnnotation;
 import org.apache.james.mailbox.model.MailboxAnnotationKey;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.MessageId;
 import org.apache.james.mailbox.store.mail.AnnotationMapper;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
@@ -76,6 +77,7 @@ public class StoreMailboxManagerAnnotationTest {
     @Mock private Mailbox mailbox;
     @Mock private MessageParser messageParser;
     @Mock private MailboxId mailboxId;
+    @Mock private MessageId.Factory messageIdFactory;
 
     @InjectMocks
     private StoreMailboxManager storeMailboxManager;
@@ -90,7 +92,7 @@ public class StoreMailboxManagerAnnotationTest {
         when(mailbox.getMailboxId()).thenReturn(mailboxId);
         
when(mailboxMapper.findMailboxByPath(eq(mailboxPath))).thenReturn(mailbox);
 
-        storeMailboxManager = spy(new 
StoreMailboxManager(mailboxSessionMapperFactory, authenticator, aclResolver, 
groupMembershipResolver, messageParser));
+        storeMailboxManager = spy(new 
StoreMailboxManager(mailboxSessionMapperFactory, authenticator, aclResolver, 
groupMembershipResolver, messageParser, messageIdFactory));
         storeMailboxManager.init();
     }
 

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
index a81be1a..7f55608 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxManagerTest.java
@@ -19,10 +19,11 @@
 
 package org.apache.james.mailbox.store;
 
-import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import static org.assertj.core.api.Assertions.assertThat;
+
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.MessageManager;
 import org.apache.james.mailbox.acl.SimpleGroupMembershipResolver;
@@ -32,6 +33,8 @@ import 
org.apache.james.mailbox.exception.MailboxNotFoundException;
 import org.apache.james.mailbox.mock.MockMailboxSession;
 import org.apache.james.mailbox.model.MailboxId;
 import org.apache.james.mailbox.model.MailboxPath;
+import org.apache.james.mailbox.model.MessageId;
+import org.apache.james.mailbox.model.MessageId.Factory;
 import org.apache.james.mailbox.store.mail.MailboxMapper;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.impl.MessageParser;
@@ -55,7 +58,10 @@ public class StoreMailboxManagerTest {
         mockedMailboxMapper = mock(MailboxMapper.class);
         when(mockedMapperFactory.getMailboxMapper(mockedMailboxSession))
             .thenReturn(mockedMailboxMapper);
-        storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, new 
FakeAuthenticator(), new JVMMailboxPathLocker(), new UnionMailboxACLResolver(), 
new SimpleGroupMembershipResolver(), new MessageParser());
+        Factory messageIdFactory = mock(MessageId.Factory.class);
+        storeMailboxManager = new StoreMailboxManager(mockedMapperFactory, new 
FakeAuthenticator(), 
+                new JVMMailboxPathLocker(), new UnionMailboxACLResolver(), new 
SimpleGroupMembershipResolver(), 
+                new MessageParser(), messageIdFactory);
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
index 77a3523..3d35013 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/StoreMailboxMessageResultIteratorTest.java
@@ -40,6 +40,7 @@ import org.apache.james.mailbox.model.MessageResult;
 import org.apache.james.mailbox.model.MessageResult.FetchGroup;
 import org.apache.james.mailbox.model.UpdatedFlags;
 import org.apache.james.mailbox.store.mail.MessageMapper;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.Mailbox;
 import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
@@ -98,7 +99,7 @@ public class StoreMailboxMessageResultIteratorTest {
         }
 
         private SimpleMailboxMessage createMessage(MessageUid uid) {
-            SimpleMailboxMessage message = new SimpleMailboxMessage(null, 0, 
0, new SharedByteArrayInputStream(
+            SimpleMailboxMessage message = new SimpleMailboxMessage(new 
DefaultMessageId(), null, 0, 0, new SharedByteArrayInputStream(
                     "".getBytes()), new Flags(), new PropertyBuilder(), 
TestId.of(1L));
             message.setUid(uid);
             return message;

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/EventSerializerTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/EventSerializerTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/EventSerializerTest.java
index 1159f63..74a0c63 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/EventSerializerTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/json/EventSerializerTest.java
@@ -36,6 +36,7 @@ import org.apache.james.mailbox.store.SimpleMessageMetaData;
 import org.apache.james.mailbox.store.TestId;
 import org.apache.james.mailbox.store.event.EventFactory;
 import org.apache.james.mailbox.store.event.EventSerializer;
+import org.apache.james.mailbox.store.mail.model.DefaultMessageId;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
 import org.junit.Before;
 import org.junit.Test;
@@ -49,7 +50,7 @@ public abstract class EventSerializerTest {
     public static final UpdatedFlags UPDATED_FLAGS = new UpdatedFlags(UID, 
MOD_SEQ, new Flags(), new Flags(Flags.Flag.SEEN));
     public static final Flags FLAGS = new Flags();
     public static final long SIZE = 45L;
-    public static final SimpleMessageMetaData MESSAGE_META_DATA = new 
SimpleMessageMetaData(UID, MOD_SEQ, FLAGS, SIZE, null);
+    public static final SimpleMessageMetaData MESSAGE_META_DATA = new 
SimpleMessageMetaData(UID, MOD_SEQ, FLAGS, SIZE, null, new DefaultMessageId());
     public static final MailboxPath FROM = new MailboxPath("namespace", 
"user", "name");
     private EventSerializer serializer;
     private EventFactory eventFactory;

http://git-wip-us.apache.org/repos/asf/james-project/blob/7882e36f/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/DefaultMailboxMessageIdTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/DefaultMailboxMessageIdTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/DefaultMailboxMessageIdTest.java
deleted file mode 100644
index ecfeb9f..0000000
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/DefaultMailboxMessageIdTest.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-package org.apache.james.mailbox.store.mail.model;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import org.apache.james.mailbox.MessageUid;
-import org.apache.james.mailbox.store.TestId;
-import org.junit.Test;
-
-import nl.jqno.equalsverifier.EqualsVerifier;
-
-public class DefaultMailboxMessageIdTest {
-
-    @Test(expected=NullPointerException.class)
-    public void constructorShouldThrowWhenNullMailboxId() {
-        new DefaultMessageId(null, MessageUid.of(1));
-    }
-
-    @Test
-    public void serializeShouldFormatMailboxIdAndUid() {
-        DefaultMessageId id = new DefaultMessageId(TestId.of(12l), 
MessageUid.of(1));
-        assertThat(id.serialize()).isEqualTo("12-1");
-    }
-    
-    @Test
-    public void shouldRespectJavaBeanContract() {
-        EqualsVerifier.forClass(DefaultMessageId.class).verify();
-    }
-    
-}


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to