diff --git mailets/src/main/java/org/apache/james/transport/mailets/AbstractRecipientRewriteTableMailet.java mailets/src/main/java/org/apache/james/transport/mailets/AbstractRecipientRewriteTableMailet.java
index 6a69c77..a725d40 100644
--- mailets/src/main/java/org/apache/james/transport/mailets/AbstractRecipientRewriteTableMailet.java
+++ mailets/src/main/java/org/apache/james/transport/mailets/AbstractRecipientRewriteTableMailet.java
@@ -157,7 +157,6 @@ public abstract class AbstractRecipientRewriteTableMailet extends GenericMailet
                         logBuffer.append(", ");
                 }
                 getMailetContext().log(logBuffer.toString());
-                return null;
             } catch (MessagingException me) {
                 StringBuffer logBuffer = new StringBuffer(128).append("Error forwarding mail to ");
                 for (Iterator<MailAddress> j = remoteRecipients.iterator(); j.hasNext();) {
diff --git mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableMock.java mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableMock.java
new file mode 100644
index 0000000..5a8ffe7
--- /dev/null
+++ mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableMock.java
@@ -0,0 +1,148 @@
+/****************************************************************
+ * 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.transport.mailets;
+
+import org.apache.james.rrt.api.RecipientRewriteTableException;
+
+import java.util.*;
+
+/**
+ * @since 15.12.12 11:40
+ */
+public class RecipientRewriteTableMock implements org.apache.james.rrt.api.RecipientRewriteTable {
+
+    public static class Mapping {
+        public final String address;
+        public final List<String> target;
+
+        public Mapping(String address, List<String> target) {
+            this.address = address;
+            this.target = target;
+        }
+
+        public Mapping(String address) {
+            this.address = address;
+            this.target = null;
+        }
+
+        public Mapping to(String... target) {
+            return new Mapping(address, Arrays.asList(target));
+        }
+    }
+
+    public static Mapping mapFrom(String from) {
+        return new Mapping(from);
+    }
+
+    public static RecipientRewriteTableMock rewriteTableMock(Mapping... mappings) {
+        return new RecipientRewriteTableMock(Arrays.asList(mappings));
+    }
+
+    private final List<Mapping> mappings = new LinkedList<Mapping>();
+
+    private RecipientRewriteTableMock(List<Mapping> mappings) {
+        this.mappings.addAll(mappings);
+    }
+
+    private List<Mapping> findUserDomain(String user, String domain) {
+        List<Mapping> results = new LinkedList<Mapping>();
+        for (Mapping m : mappings) {
+            String[] parts = m.address.split("@", 2);
+            if (parts.length == 2) {
+                if (user.equals(parts[0]) && domain.equals(parts[1])) {
+                    results.add(m);
+                }
+            }
+        }
+        return results;
+    }
+
+    @Override
+    public Collection<String> getMappings(String user, String domain) throws ErrorMappingException, RecipientRewriteTableException {
+        List<String> recipients = new LinkedList<String>();
+        for (Mapping m : findUserDomain(user, domain)) {
+            recipients.addAll(m.target);
+        }
+        if (recipients.isEmpty()) {
+            return null;
+        } else {
+            return recipients;
+        }
+    }
+
+    @Override
+    public void addRegexMapping(String user, String domain, String regex) throws RecipientRewriteTableException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public void removeRegexMapping(String user, String domain, String regex) throws RecipientRewriteTableException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public void addAddressMapping(String user, String domain, String address) throws RecipientRewriteTableException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public void removeAddressMapping(String user, String domain, String address) throws RecipientRewriteTableException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public void addErrorMapping(String user, String domain, String error) throws RecipientRewriteTableException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public void removeErrorMapping(String user, String domain, String error) throws RecipientRewriteTableException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public Collection<String> getUserDomainMappings(String user, String domain) throws RecipientRewriteTableException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public void addMapping(String user, String domain, String mapping) throws RecipientRewriteTableException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public void removeMapping(String user, String domain, String mapping) throws RecipientRewriteTableException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public Map<String, Collection<String>> getAllMappings() throws RecipientRewriteTableException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public void addAliasDomainMapping(String aliasDomain, String realDomain) throws RecipientRewriteTableException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+
+    @Override
+    public void removeAliasDomainMapping(String aliasDomain, String realDomain) throws RecipientRewriteTableException {
+        throw new UnsupportedOperationException("Not implemented");
+    }
+}
diff --git mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableTest.java mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableTest.java
index 6dc4a56..ad2dffa 100644
--- mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableTest.java
+++ mailets/src/test/java/org/apache/james/transport/mailets/RecipientRewriteTableTest.java
@@ -18,28 +18,34 @@
  ****************************************************************/
 package org.apache.james.transport.mailets;
 
-import java.util.*;
-import javax.mail.MessagingException;
-import org.apache.james.rrt.api.RecipientRewriteTableException;
 import org.apache.mailet.Mail;
 import org.apache.mailet.MailAddress;
+import org.apache.mailet.MailetContext;
 import org.apache.mailet.base.test.FakeMail;
 import org.apache.mailet.base.test.FakeMailContext;
 import org.apache.mailet.base.test.FakeMailetConfig;
 import org.apache.mailet.base.test.FakeMimeMessage;
 import org.junit.After;
-import static org.junit.Assert.*;
 import org.junit.Before;
 import org.junit.Test;
 
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.Properties;
+
+import static org.apache.james.transport.mailets.RecipientRewriteTableMock.mapFrom;
+import static org.apache.james.transport.mailets.RecipientRewriteTableMock.rewriteTableMock;
+import static org.junit.Assert.assertEquals;
+
 public class RecipientRewriteTableTest {
 
     private org.apache.james.transport.mailets.RecipientRewriteTable table;
 
     @Before
     public void setUp() throws Exception {
-
-        table = new org.apache.james.transport.mailets.RecipientRewriteTable();
         final FakeMailContext mockMailetContext = new FakeMailContext() {
 
             @Override
@@ -51,99 +57,23 @@ public class RecipientRewriteTableTest {
                 return false;
             }
         };
-        FakeMailetConfig mockMailetConfig = new FakeMailetConfig("vut", mockMailetContext, new Properties());
-        // mockMailetConfig.put("recipientrewritetable", "vut");
-
-        table.setRecipientRewriteTable(new org.apache.james.rrt.api.RecipientRewriteTable() {
-
-            @Override
-            public Collection<String> getMappings(String user, String domain) throws ErrorMappingException,
-                    RecipientRewriteTableException {
-                if (user.equals("test") && domain.equals("localhost")) {
-                    return Arrays.asList(new String[]{"whatever@localhost", "blah@localhost"});
-                }
-                return null;
-            }
-
-            @Override
-            public void addRegexMapping(String user, String domain, String regex) throws RecipientRewriteTableException {
-                throw new UnsupportedOperationException("Not implemented");
-            }
-
-            @Override
-            public void removeRegexMapping(String user, String domain, String regex) throws
-                    RecipientRewriteTableException {
-                throw new UnsupportedOperationException("Not implemented");
-
-            }
-
-            @Override
-            public void addAddressMapping(String user, String domain, String address) throws
-                    RecipientRewriteTableException {
-                throw new UnsupportedOperationException("Not implemented");
-
-            }
-
-            @Override
-            public void removeAddressMapping(String user, String domain, String address) throws
-                    RecipientRewriteTableException {
-                throw new UnsupportedOperationException("Not implemented");
-
-            }
-
-            @Override
-            public void addErrorMapping(String user, String domain, String error) throws RecipientRewriteTableException {
-                throw new UnsupportedOperationException("Not implemented");
-
-            }
-
-            @Override
-            public void removeErrorMapping(String user, String domain, String error) throws
-                    RecipientRewriteTableException {
-                throw new UnsupportedOperationException("Not implemented");
 
-            }
-
-            @Override
-            public Collection<String> getUserDomainMappings(String user, String domain) throws
-                    RecipientRewriteTableException {
-                throw new UnsupportedOperationException("Not implemented");
-            }
-
-            @Override
-            public void addMapping(String user, String domain, String mapping) throws RecipientRewriteTableException {
-                throw new UnsupportedOperationException("Not implemented");
-
-            }
-
-            @Override
-            public void removeMapping(String user, String domain, String mapping) throws RecipientRewriteTableException {
-                throw new UnsupportedOperationException("Not implemented");
-
-            }
-
-            @Override
-            public Map<String, Collection<String>> getAllMappings() throws RecipientRewriteTableException {
-                throw new UnsupportedOperationException("Not implemented");
-            }
-
-            @Override
-            public void addAliasDomainMapping(String aliasDomain, String realDomain) throws
-                    RecipientRewriteTableException {
-                throw new UnsupportedOperationException("Not implemented");
-
-            }
-
-            @Override
-            public void removeAliasDomainMapping(String aliasDomain, String realDomain) throws
-                    RecipientRewriteTableException {
-                throw new UnsupportedOperationException("Not implemented");
-
-            }
-        });
+        table = createRecipientRewriteMailet(
+            rewriteTableMock(mapFrom("test@localhost").to("whatever@localhost", "blah@localhost")),
+            mockMailetContext
+        );
+    }
 
-        table.init(mockMailetConfig);
+    private static RecipientRewriteTable createRecipientRewriteMailet(
+            org.apache.james.rrt.api.RecipientRewriteTable vut,
+            MailetContext mailContext) throws MessagingException {
+        RecipientRewriteTable rrt = new org.apache.james.transport.mailets.RecipientRewriteTable();
 
+        FakeMailetConfig mockMailetConfig = new FakeMailetConfig("vut", mailContext, new Properties());
+        // mockMailetConfig.put("recipientrewritetable", "vut");
+        rrt.setRecipientRewriteTable(vut);
+        rrt.init(mockMailetConfig);
+        return rrt;
     }
 
     @After
@@ -178,4 +108,35 @@ public class RecipientRewriteTableTest {
         mail.setMessage(new FakeMimeMessage());
         return mail;
     }
+
+    @Test
+    public void testMixedLocalAndRemoteRecipients() throws Exception {
+        RecordingMailContext context = new RecordingMailContext();
+        RecipientRewriteTable mailet = createRecipientRewriteMailet(
+            rewriteTableMock(mapFrom("mixed@localhost").to("a@localhost", "b@remote.com")),
+            context
+        );
+        Mail mail = createMail(new String[]{"mixed@localhost"});
+        mailet.service(mail);
+        //the mail must be send via the context to b@remote.com, the other
+        //recipient a@localhost must be in the recipient list of the message
+        //after processing.
+        assertEquals(context.getSendmails().size(), 1);
+        MimeMessage msg = context.getSendmails().get(0).getMessage();
+        if (msg == null) {
+            msg = context.getSendmails().get(0).getMail().getMessage();
+        }
+        if (msg.getRecipients(Message.RecipientType.TO).length == 1) {
+            assertEquals(msg.getRecipients(Message.RecipientType.TO)[0].toString(), "b@remote.com");
+        } else {
+            assertEquals(context.getSendmails().get(0).getRecipients().size(), 1);
+            MailAddress rec = context.getSendmails().get(0).getRecipients().iterator().next();
+            assertEquals(rec.toInternetAddress().toString(), "b@remote.com");
+        }
+
+        assertEquals(mail.getRecipients().size(), 1);
+        MailAddress localRec = (MailAddress) mail.getRecipients().iterator().next();
+        assertEquals(localRec.toInternetAddress().toString(), "a@localhost");
+    }
+
 }
diff --git mailets/src/test/java/org/apache/james/transport/mailets/RecordingMailContext.java mailets/src/test/java/org/apache/james/transport/mailets/RecordingMailContext.java
new file mode 100644
index 0000000..b4b848e
--- /dev/null
+++ mailets/src/test/java/org/apache/james/transport/mailets/RecordingMailContext.java
@@ -0,0 +1,121 @@
+/****************************************************************
+ * 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.transport.mailets;
+
+import org.apache.mailet.Mail;
+import org.apache.mailet.MailAddress;
+import org.apache.mailet.base.test.FakeMailContext;
+
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMessage;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * @since 15.12.12 12:02
+ */
+public class RecordingMailContext extends FakeMailContext {
+
+    private final List<SendMailEvent> sendmails = new LinkedList<SendMailEvent>();
+
+    @Override
+    public boolean isLocalServer(String serverName) {
+        return "localhost".equals(serverName);
+    }
+
+    @Override
+    public void sendMail(Mail mail) throws MessagingException {
+        sendmails.add(new SendMailEvent(mail));
+    }
+
+    @Override
+    public void sendMail(MimeMessage msg) throws MessagingException {
+       sendmails.add(new SendMailEvent(msg));
+    }
+
+    @Override
+    public void sendMail(MailAddress sender, Collection recipients, MimeMessage msg) throws MessagingException {
+        sendmails.add(new SendMailEvent(msg, sender, recipients));
+    }
+
+    @Override
+    public void sendMail(MailAddress sender, Collection recipients, MimeMessage msg, String state) throws MessagingException {
+        sendmails.add(new SendMailEvent(msg, sender, recipients, state));
+    }
+
+    public List<SendMailEvent> getSendmails() {
+        return sendmails;
+    }
+
+    public static class SendMailEvent {
+        private final Object message;
+        private final MailAddress sender;
+        private final Collection<MailAddress> recipients;
+        private final String state;
+
+        private SendMailEvent(Object message, MailAddress sender, Collection<MailAddress> recipients, String state) {
+            this.message = message;
+            this.sender = sender;
+            this.recipients = recipients;
+            this.state = state;
+        }
+
+        public SendMailEvent(Mail mail) {
+            this(mail, null, null, null);
+        }
+
+        public SendMailEvent(MimeMessage mail) {
+            this(mail, null, null, null);
+        }
+
+        public SendMailEvent(MimeMessage mail, MailAddress sender, Collection<MailAddress> recipients) {
+            this(mail, sender, recipients, null);
+        }
+        public SendMailEvent(MimeMessage mail, MailAddress sender, Collection<MailAddress> recipients, String state) {
+            this((Object)mail, sender, recipients, state);
+        }
+
+        public Mail getMail() {
+            if (message instanceof Mail) {
+                return (Mail) message;
+            }
+            return null;
+        }
+        public MimeMessage getMessage() {
+            if (message instanceof MimeMessage) {
+                return  (MimeMessage) message;
+            }
+            return null;
+        }
+
+        public MailAddress getSender() {
+            return sender;
+        }
+
+        public Collection<MailAddress> getRecipients() {
+            return recipients;
+        }
+
+        public String getState() {
+            return state;
+        }
+    }
+
+}
