diff --git a/subprojects/gradle-core/src/main/groovy/org/gradle/api/tasks/ide/eclipse/ProjectType.java b/subprojects/gradle-core/src/main/groovy/org/gradle/api/tasks/ide/eclipse/ProjectType.java
index 5936a05..d7abb5e 100644
--- a/subprojects/gradle-core/src/main/groovy/org/gradle/api/tasks/ide/eclipse/ProjectType.java
+++ b/subprojects/gradle-core/src/main/groovy/org/gradle/api/tasks/ide/eclipse/ProjectType.java
@@ -29,6 +29,13 @@ public enum ProjectType {
         public List<String> natureNames() {
             return WrapUtil.toList("org.eclipse.jdt.core.javanature");
         }},
+    SCALA {
+        public List<String> buildCommandNames() {
+            return WrapUtil.toList("ch.epfl.lamp.sdt.core.scalabuilder");
+        }
+        public List<String> natureNames() {
+            return WrapUtil.toList("org.eclipse.jdt.core.javanature", "ch.epfl.lamp.sdt.core.scalanature");
+        }},
     SIMPLE {
         public List<String> buildCommandNames() {
             return new ArrayList<String>();
diff --git a/subprojects/gradle-plugins/src/main/groovy/org/gradle/api/plugins/EclipsePlugin.java b/subprojects/gradle-plugins/src/main/groovy/org/gradle/api/plugins/EclipsePlugin.java
index 6c09250..e49bb27 100644
--- a/subprojects/gradle-plugins/src/main/groovy/org/gradle/api/plugins/EclipsePlugin.java
+++ b/subprojects/gradle-plugins/src/main/groovy/org/gradle/api/plugins/EclipsePlugin.java
@@ -25,6 +25,7 @@ import org.gradle.api.artifacts.ProjectDependency;
 import org.gradle.api.artifacts.specs.DependencySpecs;
 import org.gradle.api.artifacts.specs.Type;
 import org.gradle.api.internal.IConventionAware;
+import org.gradle.api.plugins.scala.ScalaPlugin;
 import org.gradle.api.specs.Spec;
 import org.gradle.api.specs.Specs;
 import org.gradle.api.tasks.ConventionValue;
@@ -61,6 +62,11 @@ public class EclipsePlugin implements Plugin {
                 configureEclipseWtpModuleForJavaProjects(project);
             }
         });
+        projectPluginsHandler.withType(ScalaPlugin.class).allPlugins(new Action<ScalaPlugin>() {
+            public void execute(ScalaPlugin plugin) {
+                configureEclipseScalaProjectAndClasspath(project);
+            }
+        });
         projectPluginsHandler.withType(WarPlugin.class).allPlugins(new Action<WarPlugin>() {
             public void execute(WarPlugin plugin) {
                 configureEclipseWtpModuleForWarProjects(project, (War) project.getTasks().findByName(WarPlugin.WAR_TASK_NAME));
@@ -68,6 +74,17 @@ public class EclipsePlugin implements Plugin {
         });
     }
 
+    private void configureEclipseScalaProjectAndClasspath(Project project) {
+        EclipseProject eclipseProject =  configureEclipseProject(project);
+        eclipseProject.setProjectType(ProjectType.SCALA);
+        project.getTasks().replace(ECLIPSE_TASK_NAME).dependsOn(
+                eclipseProject,
+                configureEclipseClasspath(project)
+        ).setDescription("Generates an Eclipse .project and .classpath file.");
+
+        project.getTasks().replace(ECLIPSE_CLEAN_TASK_NAME, EclipseClean.class).setDescription("Deletes the Eclipse .project and .classpath files.");
+    }
+
     private void configureEclipseProjectAndClasspath(Project project) {
         project.getTasks().add(ECLIPSE_TASK_NAME).dependsOn(
                 configureEclipseProject(project),
@@ -78,7 +95,7 @@ public class EclipsePlugin implements Plugin {
     }
 
     private EclipseProject configureEclipseProject(Project project) {
-        EclipseProject eclipseProject = project.getTasks().add(ECLIPSE_PROJECT_TASK_NAME, EclipseProject.class);
+        EclipseProject eclipseProject = project.getTasks().replace(ECLIPSE_PROJECT_TASK_NAME, EclipseProject.class);
         eclipseProject.setProjectName(project.getName());
         eclipseProject.setProjectType(ProjectType.JAVA);
         eclipseProject.setDescription("Generates an Eclipse .project file.");
@@ -86,7 +103,7 @@ public class EclipsePlugin implements Plugin {
     }
 
     private EclipseClasspath configureEclipseClasspath(final Project project) {
-        EclipseClasspath eclipseClasspath = project.getTasks().add(ECLIPSE_CP_TASK_NAME, EclipseClasspath.class);
+        EclipseClasspath eclipseClasspath = project.getTasks().replace(ECLIPSE_CP_TASK_NAME, EclipseClasspath.class);
         eclipseClasspath.getConventionMapping().map(GUtil.map(
                 "srcDirs", new ConventionValue() {
                     public Object getValue(Convention convention, IConventionAware conventionAwareObject) {
@@ -219,4 +236,4 @@ public class EclipsePlugin implements Plugin {
     private WarPluginConvention war(Convention convention) {
         return convention.getPlugin(WarPluginConvention.class);
     }
-}
\ No newline at end of file
+}
