Index: src/main/java/hudson/plugins/blame_upstream_commiters/BlameUpstreamCommitersPublisher.java
===================================================================
--- src/main/java/hudson/plugins/blame_upstream_commiters/BlameUpstreamCommitersPublisher.java	(revision 34210)
+++ src/main/java/hudson/plugins/blame_upstream_commiters/BlameUpstreamCommitersPublisher.java	(working copy)
@@ -1,11 +1,11 @@
 package hudson.plugins.blame_upstream_commiters;
 
+import com.google.common.base.Function;
+import com.google.common.collect.Collections2;
 import hudson.Extension;
 import hudson.Launcher;
-import hudson.model.AbstractBuild;
-import hudson.model.AbstractProject;
-import hudson.model.BuildListener;
-import hudson.model.Result;
+import hudson.Util;
+import hudson.model.*;
 import hudson.tasks.ArtifactArchiver;
 import hudson.tasks.BuildStepDescriptor;
 import hudson.tasks.BuildStepMonitor;
@@ -15,13 +15,13 @@
 import hudson.tasks.Publisher;
 
 import java.io.File;
-import java.util.ArrayList;
-import java.util.Map;
+import java.util.*;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.tools.ant.types.selectors.SelectorUtils;
+import org.apache.tools.ant.util.CollectionUtils;
 import org.kohsuke.stapler.DataBoundConstructor;
 
 @SuppressWarnings({ "unchecked" })
@@ -49,56 +49,54 @@
     public boolean perform(AbstractBuild<?,?> build, Launcher launcher, BuildListener listener) throws InterruptedException {
 		if (build.getResult() != Result.SUCCESS)
 		{
-			ArrayList<String> recipientUpstreamProjects=this.getUpstreamRecipients(build);
-			if (recipientUpstreamProjects.size() > 0) {
-				String recipentString="";
-				recipentString = "upstream-individuals:"+StringUtils.join(recipientUpstreamProjects, " upstream-individuals:");
-				listener.getLogger().println("Upstream projects changes detected. Mailing upstream committers in the following projects:");
-				listener.getLogger().println(StringUtils.join(recipientUpstreamProjects,","));
+//			ArrayList<String> recipientUpstreamProjects=this.getUpstreamRecipients(build);
+			Set<AbstractProject> upstreamProjects = getUpstreamProjects(build);
+			if (!upstreamProjects.isEmpty()) {
+                
+                Collection<String> namesCollection = Collections2.transform(upstreamProjects, new Function<AbstractProject, String>() {
+                    public String apply(AbstractProject from) {
+                        return from.getName();
+                    }
+                });
+                listener.getLogger().println("Upstream projects changes detected. Mailing upstream committers in the following projects:");
+                listener.getLogger().println(StringUtils.join(namesCollection, ","));
+                
+                MailSender sender = new MailSender( "", false, sendToIndividuals ) {
+                    /** Check whether a path (/-separated) will be archived. */
+                    @Override
+                    public boolean artifactMatches( String path, AbstractBuild<?, ?> build ) {
+                        ArtifactArchiver aa = build.getProject().getPublishersList().get( ArtifactArchiver.class );
+                        if ( aa == null ) {
+                            LOGGER.finer( "No ArtifactArchiver found" );
+                            return false;
+                        }
+                        String artifacts = aa.getArtifacts();
+                        for ( String include : artifacts.split( "[, ]+" ) ) {
+                            String pattern = include.replace( File.separatorChar, '/' );
+                            if ( pattern.endsWith( "/" ) ) {
+                                pattern += "**";
+                            }
+                            if ( SelectorUtils.matchPath( pattern, path ) ) {
+                                LOGGER.log( Level.FINER, "DescriptorImpl.artifactMatches true for {0} against {1}", new Object[]{path, pattern} );
+                                return true;
+                            }
+                        }
+                        LOGGER.log( Level.FINER, "DescriptorImpl.artifactMatches for {0} matched none of {1}", new Object[]{path, artifacts} );
+                        return false;
+                    }
+                };
+                
+                sender.includeUpstreamIndividualsOf(upstreamProjects);
 
-				return new MailSender(recipentString,false,sendToIndividuals) {
-		            /** Check whether a path (/-separated) will be archived. */
-		            @Override
-		            public boolean artifactMatches(String path, AbstractBuild<?,?> build) {
-		                ArtifactArchiver aa = build.getProject().getPublishersList().get(ArtifactArchiver.class);
-		                if (aa == null) {
-		                    LOGGER.finer("No ArtifactArchiver found");
-		                    return false;
-		                }
-		                String artifacts = aa.getArtifacts();
-		                for (String include : artifacts.split("[, ]+")) {
-		                    String pattern = include.replace(File.separatorChar, '/');
-		                    if (pattern.endsWith("/")) {
-		                        pattern += "**";
-		                    }
-		                    if (SelectorUtils.matchPath(pattern, path)) {
-		                        LOGGER.log(Level.FINER, "DescriptorImpl.artifactMatches true for {0} against {1}", new Object[] {path, pattern});
-		                        return true;
-		                    }
-		                }
-		                LOGGER.log(Level.FINER, "DescriptorImpl.artifactMatches for {0} matched none of {1}", new Object[] {path, artifacts});
-		                return false;
-		            }
-		        }.execute(build,listener);
+                return sender.execute(build,listener);
 			}
 		}
 		return true;
 	}
-	
-	private ArrayList<String> getUpstreamRecipients (AbstractBuild<?,?> build)
-	{
-		ArrayList<String> recipientList =new ArrayList<String>();
-		Map <AbstractProject,Integer> upstreamBuilds = build.getUpstreamBuilds();
-		
-        if (upstreamBuilds != null) {
-        	
-        	for (AbstractProject project : upstreamBuilds.keySet()) {
-        		recipientList.add(project.getName().replaceAll(" ", "\\ "));
-        	}
-        }
 
-        return recipientList;
-	}
+    private Set<AbstractProject> getUpstreamProjects(AbstractBuild<?, ?> build) {
+        return build.getUpstreamBuilds().keySet();
+    }
 
     @Extension
     public static final class DescriptorImpl extends BuildStepDescriptor<Publisher> {
Index: pom.xml
===================================================================
--- pom.xml	(revision 34210)
+++ pom.xml	(working copy)
@@ -3,7 +3,7 @@
   <parent>
     <groupId>org.jvnet.hudson.plugins</groupId>
     <artifactId>plugin</artifactId>
-    <version>1.323</version><!-- which version of Hudson is this plugin built against? -->
+    <version>1.375-SNAPSHOT</version><!-- which version of Hudson is this plugin built against? -->
     <relativePath>../pom.xml</relativePath>
   </parent>
 
