diff --git a/libraries/pom.xml b/libraries/pom.xml
index 560c1a1e5e6..48652d81263 100644
--- a/libraries/pom.xml
+++ b/libraries/pom.xml
@@ -56,6 +56,7 @@
tools/kotlin-compiler
tools/kotlin-jdk-annotations
tools/runtime
+ tools/kotlin-gradle-plugin
tools/kotlin-gradle-plugin-core
tools/kotlin-maven-plugin
tools/kotlin-js-library
diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/annotations.xml
new file mode 100644
index 00000000000..dc5cd1bbcbe
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/annotations.xml
@@ -0,0 +1,18 @@
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/file/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/file/annotations.xml
new file mode 100644
index 00000000000..dea5cec6774
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/file/annotations.xml
@@ -0,0 +1,5 @@
+
+ -
+
+
+
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/initialization/dsl/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/initialization/dsl/annotations.xml
new file mode 100644
index 00000000000..a33a584b9ed
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/initialization/dsl/annotations.xml
@@ -0,0 +1,7 @@
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/internal/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/internal/annotations.xml
new file mode 100644
index 00000000000..c14ebed20ae
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/internal/annotations.xml
@@ -0,0 +1,15 @@
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/internal/project/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/internal/project/annotations.xml
new file mode 100644
index 00000000000..6595499a4a1
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/internal/project/annotations.xml
@@ -0,0 +1,5 @@
+
+ -
+
+
+
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/logging/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/logging/annotations.xml
new file mode 100644
index 00000000000..87c8bc5da18
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/logging/annotations.xml
@@ -0,0 +1,5 @@
+
+ -
+
+
+
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/plugins/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/plugins/annotations.xml
new file mode 100644
index 00000000000..5859b33807e
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/plugins/annotations.xml
@@ -0,0 +1,22 @@
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/tasks/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/tasks/annotations.xml
new file mode 100644
index 00000000000..67bc433ea20
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/tasks/annotations.xml
@@ -0,0 +1,7 @@
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/tasks/compile/annotations.xml b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/tasks/compile/annotations.xml
new file mode 100644
index 00000000000..812dfa500fa
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/kotlinAnnotation/org/gradle/api/tasks/compile/annotations.xml
@@ -0,0 +1,5 @@
+
+ -
+
+
+
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/pom.xml b/libraries/tools/kotlin-gradle-plugin/pom.xml
new file mode 100644
index 00000000000..543601c16bb
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/pom.xml
@@ -0,0 +1,107 @@
+
+
+
+
+ 4.0.0
+
+ 3.0.4
+
+
+
+ org.jetbrains.kotlin
+ kotlin-project
+ 0.1-SNAPSHOT
+ ../../pom.xml
+
+
+ kotlin-gradle-plugin-core
+ jar
+
+
+
+ org.jetbrains.kotlin
+ gradle-api
+ 1.4
+ provided
+
+
+
+
+
+ ${project.basedir}/src/main/kotlin
+ ${project.basedir}/src/test/kotlin
+
+
+
+ ${project.basedir}/src/main/resources
+
+
+
+
+
+ kotlin-maven-plugin
+ org.jetbrains.kotlin
+ ${project.version}
+
+
+ ${basedir}/kotlinAnnotation
+
+
+
+
+
+ compile
+ compile
+ compile
+
+
+
+ test-compile
+ test-compile
+ test-compile
+
+
+
+
+
+ maven-invoker-plugin
+ 1.8
+
+ ${project.build.directory}/it
+ local-repo
+ verify
+
+
+
+ create_local
+ pre-integration-test
+
+ install
+
+
+
+
+
+ maven-failsafe-plugin
+ 2.6
+
+
+
+ integration-test
+ verify
+
+
+
+
+
+
+
+
+
+ jetbrains-utils
+ http://repository.jetbrains.com/utils
+
+
+
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/java/org/jetbrains/kotlin/gradle/classloaders/ParentLastURLClassLoader.java b/libraries/tools/kotlin-gradle-plugin/src/main/java/org/jetbrains/kotlin/gradle/classloaders/ParentLastURLClassLoader.java
new file mode 100644
index 00000000000..d71acde71e3
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/java/org/jetbrains/kotlin/gradle/classloaders/ParentLastURLClassLoader.java
@@ -0,0 +1,74 @@
+package org.jetbrains.kotlin.gradle.classloaders;
+
+
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.List;
+
+/**
+ * A parent-last classloader that will try the child classloader first and then the parent.
+ * This takes a fair bit of doing because java really prefers parent-first.
+ *
+ * For those not familiar with class loading trickery, be wary
+ */
+public class ParentLastURLClassLoader extends ClassLoader {
+ private ChildURLClassLoader childClassLoader;
+
+ public ParentLastURLClassLoader(List classpath, ClassLoader parent) {
+ super(Thread.currentThread().getContextClassLoader());
+
+ URL[] urls = classpath.toArray(new URL[classpath.size()]);
+
+ childClassLoader = new ChildURLClassLoader(urls, new FindClassClassLoader(parent));
+ }
+
+ @Override
+ protected synchronized Class> loadClass(String name, boolean resolve) throws ClassNotFoundException {
+ try {
+ // first we try to find a class inside the child classloader
+ return childClassLoader.findClass(name);
+ } catch (ClassNotFoundException e) {
+ // didn't find it, try the parent
+ return super.loadClass(name, resolve);
+ }
+ }
+
+ /**
+ * This class allows me to call findClass on a classloader
+ */
+ private static class FindClassClassLoader extends ClassLoader {
+ public FindClassClassLoader(ClassLoader parent) {
+ super(parent);
+ }
+
+ @Override
+ public Class> findClass(String name) throws ClassNotFoundException {
+ return super.findClass(name);
+ }
+ }
+
+ /**
+ * This class delegates (child then parent) for the findClass method for a URLClassLoader.
+ * We need this because findClass is protected in URLClassLoader
+ */
+ private static class ChildURLClassLoader extends URLClassLoader {
+ private FindClassClassLoader realParent;
+
+ public ChildURLClassLoader(URL[] urls, FindClassClassLoader realParent) {
+ super(urls, null);
+
+ this.realParent = realParent;
+ }
+
+ @Override
+ public Class> findClass(String name) throws ClassNotFoundException {
+ try {
+ // first try to use the URLClassLoader findClass
+ return super.findClass(name);
+ } catch (ClassNotFoundException e) {
+ // if that fails, we ask our real parent classloader to load the class (we give up)
+ return realParent.loadClass(name);
+ }
+ }
+ }
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt
new file mode 100644
index 00000000000..611f34ad2aa
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPluginWrapper.kt
@@ -0,0 +1,13 @@
+package org.jetbrains.kotlin.gradle.plugin
+
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+import org.gradle.api.artifacts.dsl.DependencyHandler
+
+open class KotlinPluginWrapper: Plugin {
+ public override fun apply(project: Project) {
+ val dependencyHandler : DependencyHandler = project.getDependencies()
+ dependencyHandler.create("org.jetbrains.kotlin:kotlin-gradle-plugin-core:0.1-SNAPSHOT")
+
+ }
+}
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin-core/src/main/resources/META-INF/gradle-plugins/kotlin.properties b/libraries/tools/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/kotlin.properties
similarity index 85%
rename from libraries/tools/kotlin-gradle-plugin-core/src/main/resources/META-INF/gradle-plugins/kotlin.properties
rename to libraries/tools/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/kotlin.properties
index 4f8cd030af6..3a22596804f 100644
--- a/libraries/tools/kotlin-gradle-plugin-core/src/main/resources/META-INF/gradle-plugins/kotlin.properties
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/resources/META-INF/gradle-plugins/kotlin.properties
@@ -1 +1 @@
-implementation-class=org.jetbrains.kotlin.gradle.plugin.KotlinPlugin
\ No newline at end of file
+implementation-class=org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper
\ No newline at end of file