diff --git a/android/src/com/android/tools/idea/gradle/project/AndroidGradleProjectResolver.java b/android/src/com/android/tools/idea/gradle/project/AndroidGradleProjectResolver.java
index 524bcf6..d395e1e 100644
--- a/android/src/com/android/tools/idea/gradle/project/AndroidGradleProjectResolver.java
+++ b/android/src/com/android/tools/idea/gradle/project/AndroidGradleProjectResolver.java
@@ -58,8 +58,8 @@
 import java.io.IOException;
 import java.util.*;
 
+import static com.android.SdkConstants.GRADLE_MINIMUM_VERSION;
 import static com.android.tools.idea.gradle.util.GradleBuilds.BUILD_SRC_FOLDER_NAME;
-import static com.android.tools.idea.gradle.util.GradleUtil.GRADLE_MINIMUM_VERSION;
 
 /**
  * Imports Android-Gradle projects into IDEA.
diff --git a/android/src/com/android/tools/idea/gradle/project/GradleModelVersionCheck.java b/android/src/com/android/tools/idea/gradle/project/GradleModelVersionCheck.java
index cd2caf0..24b3dac 100644
--- a/android/src/com/android/tools/idea/gradle/project/GradleModelVersionCheck.java
+++ b/android/src/com/android/tools/idea/gradle/project/GradleModelVersionCheck.java
@@ -15,9 +15,9 @@
  */
 package com.android.tools.idea.gradle.project;
 
+import com.android.SdkConstants;
 import com.android.builder.model.AndroidProject;
 import com.android.sdklib.repository.FullRevision;
-import com.android.tools.idea.gradle.util.GradleUtil;
 import com.google.common.base.Strings;
 import com.intellij.openapi.diagnostic.Logger;
 import org.jetbrains.annotations.NotNull;
@@ -26,7 +26,7 @@
 final class GradleModelVersionCheck {
   private static final Logger LOG = Logger.getInstance(GradleModelVersionCheck.class);
 
-  static final FullRevision MINIMUM_SUPPORTED_VERSION = FullRevision.parseRevision(GradleUtil.GRADLE_PLUGIN_MINIMUM_VERSION);
+  static final FullRevision MINIMUM_SUPPORTED_VERSION = FullRevision.parseRevision(SdkConstants.GRADLE_PLUGIN_MINIMUM_VERSION);
 
   static boolean isSupportedVersion(@NotNull AndroidProject androidProject) {
     return isSupportedVersion(androidProject, MINIMUM_SUPPORTED_VERSION);
diff --git a/android/src/com/android/tools/idea/gradle/project/ProjectImportErrorHandler.java b/android/src/com/android/tools/idea/gradle/project/ProjectImportErrorHandler.java
index 6959b79..939313c 100644
--- a/android/src/com/android/tools/idea/gradle/project/ProjectImportErrorHandler.java
+++ b/android/src/com/android/tools/idea/gradle/project/ProjectImportErrorHandler.java
@@ -16,7 +16,6 @@
 package com.android.tools.idea.gradle.project;
 
 import com.android.SdkConstants;
-import com.android.tools.idea.gradle.util.GradleUtil;
 import com.intellij.openapi.externalSystem.model.ExternalSystemException;
 import com.intellij.openapi.util.Pair;
 import org.gradle.tooling.UnsupportedVersionException;
@@ -30,6 +29,9 @@
 import java.net.UnknownHostException;
 import java.util.regex.Pattern;
 
+import static com.android.SdkConstants.GRADLE_MINIMUM_VERSION;
+import static com.android.SdkConstants.GRADLE_LATEST_VERSION;
+
 /**
  * Provides better error messages for android projects import failures.
  */
@@ -42,7 +44,7 @@
   private static final Pattern SDK_NOT_FOUND = Pattern.compile("The SDK directory '(.*?)' does not exist.");
 
   private static final String EMPTY_LINE = "\n\n";
-  private static final String UNSUPPORTED_GRADLE_VERSION_ERROR = "Gradle version " + GradleUtil.GRADLE_MINIMUM_VERSION + " is required";
+  private static final String UNSUPPORTED_GRADLE_VERSION_ERROR = "Gradle version " + GRADLE_MINIMUM_VERSION + " is required";
   private static final String SDK_DIR_PROPERTY_MISSING = "No sdk.dir property defined in local.properties file.";
 
   @Override
@@ -59,8 +61,7 @@
     Throwable rootCause = rootCauseAndLocation.getFirst();
 
     if (isOldGradleVersion(rootCause)) {
-      String msg = String.format("You are using an unsupported version of Gradle. Please use version %1$s.",
-                                 GradleUtil.GRADLE_MINIMUM_VERSION);
+      String msg = String.format("You are using an unsupported version of Gradle. Please use version %1$s.", GRADLE_LATEST_VERSION);
       msg += ('\n' + FIX_GRADLE_VERSION);
       // Location of build.gradle is useless for this error. Omitting it.
       return createUserFriendlyError(msg, null);
diff --git a/android/src/com/android/tools/idea/gradle/service/notification/FixGradleModelVersionHyperlink.java b/android/src/com/android/tools/idea/gradle/service/notification/FixGradleModelVersionHyperlink.java
index 1daba6a..26adf4b 100644
--- a/android/src/com/android/tools/idea/gradle/service/notification/FixGradleModelVersionHyperlink.java
+++ b/android/src/com/android/tools/idea/gradle/service/notification/FixGradleModelVersionHyperlink.java
@@ -31,10 +31,10 @@
 
 import java.io.File;
 
+import static com.android.SdkConstants.GRADLE_LATEST_VERSION;
+import static com.android.SdkConstants.GRADLE_PLUGIN_RECOMMENDED_VERSION;
 import static com.android.tools.idea.gradle.parser.BuildFileKey.PLUGIN_VERSION;
 import static com.android.tools.idea.gradle.service.notification.FixGradleVersionInWrapperHyperlink.updateGradleVersion;
-import static com.android.tools.idea.gradle.util.GradleUtil.GRADLE_LATEST_VERSION;
-import static com.android.tools.idea.gradle.util.GradleUtil.GRADLE_PLUGIN_LATEST_VERSION;
 
 class FixGradleModelVersionHyperlink extends NotificationHyperlink {
   private final boolean myOpenMigrationGuide;
@@ -65,7 +65,7 @@
           WriteCommandAction.runWriteCommandAction(project, new Runnable() {
             @Override
             public void run() {
-              buildFile.setValue(PLUGIN_VERSION, GRADLE_PLUGIN_LATEST_VERSION);
+              buildFile.setValue(PLUGIN_VERSION, GRADLE_PLUGIN_RECOMMENDED_VERSION);
             }
           });
           atLeastOnUpdated = true;
diff --git a/android/src/com/android/tools/idea/gradle/util/GradleUtil.java b/android/src/com/android/tools/idea/gradle/util/GradleUtil.java
index 2446989..b116036 100644
--- a/android/src/com/android/tools/idea/gradle/util/GradleUtil.java
+++ b/android/src/com/android/tools/idea/gradle/util/GradleUtil.java
@@ -80,12 +80,6 @@
 public final class GradleUtil {
   @NonNls public static final String BUILD_DIR_DEFAULT_NAME = "build";
 
-  @NonNls public static final String GRADLE_MINIMUM_VERSION = SdkConstants.GRADLE_MINIMUM_VERSION;
-  @NonNls public static final String GRADLE_LATEST_VERSION = SdkConstants.GRADLE_LATEST_VERSION;
-
-  @NonNls public static final String GRADLE_PLUGIN_MINIMUM_VERSION = SdkConstants.GRADLE_PLUGIN_MINIMUM_VERSION;
-  @NonNls public static final String GRADLE_PLUGIN_LATEST_VERSION = SdkConstants.GRADLE_PLUGIN_LATEST_VERSION;
-
   /** The name of the gradle wrapper executable associated with the current OS. */
   @NonNls public static final String GRADLE_WRAPPER_EXECUTABLE_NAME =
     SystemInfo.isWindows ? SdkConstants.FN_GRADLE_WRAPPER_WIN : SdkConstants.FN_GRADLE_WRAPPER_UNIX;
diff --git a/android/src/com/android/tools/idea/wizard/ImportWizardModuleBuilder.java b/android/src/com/android/tools/idea/wizard/ImportWizardModuleBuilder.java
index f894fc0..89a89dc 100644
--- a/android/src/com/android/tools/idea/wizard/ImportWizardModuleBuilder.java
+++ b/android/src/com/android/tools/idea/wizard/ImportWizardModuleBuilder.java
@@ -17,7 +17,6 @@
 
 import com.android.annotations.VisibleForTesting;
 import com.android.tools.idea.gradle.project.GradleProjectImporter;
-import com.android.tools.idea.gradle.util.GradleUtil;
 import com.android.tools.idea.templates.Template;
 import com.android.tools.idea.templates.TemplateMetadata;
 import com.google.common.base.Functions;
@@ -54,6 +53,8 @@
 import java.util.List;
 import java.util.Map;
 
+import static com.android.SdkConstants.GRADLE_LATEST_VERSION;
+import static com.android.SdkConstants.GRADLE_PLUGIN_LATEST_VERSION;
 import static com.android.tools.idea.templates.TemplateMetadata.*;
 import static com.android.tools.idea.wizard.NewModuleWizardState.ATTR_PROJECT_LOCATION;
 import static com.android.tools.idea.wizard.NewProjectWizardState.ATTR_MODULE_NAME;
@@ -135,8 +136,8 @@
     if (project != null) {
       myWizardState.put(NewModuleWizardState.ATTR_PROJECT_LOCATION, project.getBasePath());
     }
-    myWizardState.put(TemplateMetadata.ATTR_GRADLE_VERSION, GradleUtil.GRADLE_LATEST_VERSION);
-    myWizardState.put(TemplateMetadata.ATTR_GRADLE_PLUGIN_VERSION, GradleUtil.GRADLE_PLUGIN_LATEST_VERSION);
+    myWizardState.put(TemplateMetadata.ATTR_GRADLE_VERSION, GRADLE_LATEST_VERSION);
+    myWizardState.put(TemplateMetadata.ATTR_GRADLE_PLUGIN_VERSION, GRADLE_PLUGIN_LATEST_VERSION);
     update();
 
     myInitializationComplete = true;
diff --git a/android/src/com/android/tools/idea/wizard/NewProjectWizard.java b/android/src/com/android/tools/idea/wizard/NewProjectWizard.java
index eb9a569..b11b291 100644
--- a/android/src/com/android/tools/idea/wizard/NewProjectWizard.java
+++ b/android/src/com/android/tools/idea/wizard/NewProjectWizard.java
@@ -18,7 +18,6 @@
 import com.android.annotations.VisibleForTesting;
 import com.android.tools.idea.gradle.project.GradleProjectImporter;
 import com.android.tools.idea.gradle.project.NewProjectImportGradleSyncListener;
-import com.android.tools.idea.gradle.util.GradleUtil;
 import com.android.tools.idea.sdk.VersionCheck;
 import com.android.tools.idea.templates.Template;
 import com.android.tools.idea.templates.TemplateManager;
@@ -45,6 +44,8 @@
 import java.io.IOException;
 import java.util.List;
 
+import static com.android.SdkConstants.GRADLE_LATEST_VERSION;
+import static com.android.SdkConstants.GRADLE_PLUGIN_LATEST_VERSION;
 import static com.android.tools.idea.templates.Template.CATEGORY_ACTIVITIES;
 import static com.android.tools.idea.templates.TemplateMetadata.ATTR_JAVA_VERSION;
 import static icons.AndroidIcons.Wizards.NewProjectSidePanel;
@@ -102,8 +103,8 @@
     }
     myWizardState = new NewProjectWizardState();
     Template.convertApisToInt(myWizardState.getParameters());
-    myWizardState.put(TemplateMetadata.ATTR_GRADLE_VERSION, GradleUtil.GRADLE_LATEST_VERSION);
-    myWizardState.put(TemplateMetadata.ATTR_GRADLE_PLUGIN_VERSION, GradleUtil.GRADLE_PLUGIN_LATEST_VERSION);
+    myWizardState.put(TemplateMetadata.ATTR_GRADLE_VERSION, GRADLE_LATEST_VERSION);
+    myWizardState.put(TemplateMetadata.ATTR_GRADLE_PLUGIN_VERSION, GRADLE_PLUGIN_LATEST_VERSION);
     myWizardState.put(TemplateMetadata.ATTR_PER_MODULE_REPOS, false);
 
     myConfigureAndroidModuleStep = new ConfigureAndroidModuleStep(myWizardState, myProject, NewProjectSidePanel, this);
diff --git a/android/src/com/android/tools/idea/wizard/NewProjectWizardDynamic.java b/android/src/com/android/tools/idea/wizard/NewProjectWizardDynamic.java
index 2d30d62..355ff80 100644
--- a/android/src/com/android/tools/idea/wizard/NewProjectWizardDynamic.java
+++ b/android/src/com/android/tools/idea/wizard/NewProjectWizardDynamic.java
@@ -17,7 +17,6 @@
 
 import com.android.tools.idea.gradle.project.GradleProjectImporter;
 import com.android.tools.idea.gradle.project.NewProjectImportGradleSyncListener;
-import com.android.tools.idea.gradle.util.GradleUtil;
 import com.android.tools.idea.templates.KeystoreUtils;
 import com.android.tools.idea.templates.TemplateManager;
 import com.android.tools.idea.templates.TemplateMetadata;
@@ -38,6 +37,8 @@
 import java.io.IOException;
 import java.util.List;
 
+import static com.android.SdkConstants.GRADLE_LATEST_VERSION;
+import static com.android.SdkConstants.GRADLE_PLUGIN_LATEST_VERSION;
 import static com.android.tools.idea.templates.TemplateMetadata.*;
 import static com.android.tools.idea.wizard.ConfigureAndroidProjectStep.APPLICATION_NAME_KEY;
 import static com.android.tools.idea.wizard.ConfigureAndroidProjectStep.PROJECT_LOCATION_KEY;
@@ -83,8 +84,8 @@
       addPath(path);
     }
     ScopedStateStore state = getState();
-    state.put(GRADLE_VERSION_KEY, GradleUtil.GRADLE_LATEST_VERSION);
-    state.put(GRADLE_PLUGIN_VERSION_KEY, GradleUtil.GRADLE_PLUGIN_LATEST_VERSION);
+    state.put(GRADLE_VERSION_KEY, GRADLE_LATEST_VERSION);
+    state.put(GRADLE_PLUGIN_VERSION_KEY, GRADLE_PLUGIN_LATEST_VERSION);
     state.put(USE_PER_MODULE_REPOS_KEY, false);
     state.put(IS_NEW_PROJECT_KEY, true);
     state.put(IS_GRADLE_PROJECT_KEY, true);
diff --git a/android/testSrc/com/android/tools/idea/gradle/stubs/android/AndroidProjectStub.java b/android/testSrc/com/android/tools/idea/gradle/stubs/android/AndroidProjectStub.java
index 1a15f9c..80900d2 100644
--- a/android/testSrc/com/android/tools/idea/gradle/stubs/android/AndroidProjectStub.java
+++ b/android/testSrc/com/android/tools/idea/gradle/stubs/android/AndroidProjectStub.java
@@ -67,7 +67,7 @@
   @Override
   @NotNull
   public String getModelVersion() {
-    return GradleUtil.GRADLE_PLUGIN_MINIMUM_VERSION + "-SNAPSHOT";
+    return SdkConstants.GRADLE_PLUGIN_MINIMUM_VERSION + "-SNAPSHOT";
   }
 
   @Override
diff --git a/android/testSrc/com/android/tools/idea/templates/AndroidGradleTestCase.java b/android/testSrc/com/android/tools/idea/templates/AndroidGradleTestCase.java
index 042a7bf..6dc22be 100644
--- a/android/testSrc/com/android/tools/idea/templates/AndroidGradleTestCase.java
+++ b/android/testSrc/com/android/tools/idea/templates/AndroidGradleTestCase.java
@@ -178,10 +178,10 @@
     if (requireRecentSdk() && ourPreviousSdkData == null) {
       ourPreviousSdkData = AndroidSdkUtils.tryToChooseAndroidSdk();
       if (ourPreviousSdkData != null) {
-        VersionCheck.VersionCheckResult check = VersionCheck.checkVersion(ourPreviousSdkData.getPath());
+        VersionCheck.VersionCheckResult check = VersionCheck.checkVersion(ourPreviousSdkData.getLocation().getPath());
         // "The sdk1.5" version of the SDK stored in the test directory isn't really a 22.0.5 version of the SDK even
         // though its sdk1.5/tools/source.properties says it is. We can't use this one for these tests.
-        if (!check.isCompatibleVersion() || ourPreviousSdkData.getPath().endsWith(File.separator + "sdk1.5")) {
+        if (!check.isCompatibleVersion() || ourPreviousSdkData.getLocation().getPath().endsWith(File.separator + "sdk1.5")) {
           AndroidSdkData sdkData = createTestSdkManager();
           assertNotNull(sdkData);
           AndroidSdkUtils.setSdkData(sdkData);
@@ -320,7 +320,7 @@
     }
     FileUtil.copyDirContent(gradleWrapperSrc, projectRoot);
     File wrapperPropertiesFile = GradleUtil.getGradleWrapperPropertiesFilePath(projectRoot);
-    GradleUtil.updateGradleDistributionUrl(GradleUtil.GRADLE_LATEST_VERSION, wrapperPropertiesFile);
+    GradleUtil.updateGradleDistributionUrl(GRADLE_LATEST_VERSION, wrapperPropertiesFile);
   }
 
   protected static void assertFilesExist(@Nullable File baseDir, @NotNull String... paths) {
@@ -353,13 +353,14 @@
     assert sdkData != null;
 
     Template.convertApisToInt(projectWizardState.getParameters());
-    projectWizardState.put(TemplateMetadata.ATTR_GRADLE_VERSION, GradleUtil.GRADLE_LATEST_VERSION);
-    projectWizardState.put(TemplateMetadata.ATTR_GRADLE_PLUGIN_VERSION, GradleUtil.GRADLE_PLUGIN_LATEST_VERSION);
+    projectWizardState.put(TemplateMetadata.ATTR_GRADLE_VERSION, GRADLE_LATEST_VERSION);
+    projectWizardState.put(TemplateMetadata.ATTR_GRADLE_PLUGIN_VERSION, GRADLE_PLUGIN_LATEST_VERSION);
     projectWizardState.put(NewModuleWizardState.ATTR_PROJECT_LOCATION, project.getBasePath());
     projectWizardState.put(NewProjectWizardState.ATTR_MODULE_NAME, "TestModule");
     projectWizardState.put(TemplateMetadata.ATTR_PACKAGE_NAME, "test.pkg");
     projectWizardState.put(TemplateMetadata.ATTR_CREATE_ICONS, false); // If not, you need to initialize additional state
-    final BuildToolInfo buildTool = sdkData.getLatestBuildTool();
+    BuildToolInfo buildTool = sdkData.getLatestBuildTool();
+    assertNotNull(buildTool);
     projectWizardState.put(TemplateMetadata.ATTR_BUILD_TOOLS_VERSION, buildTool.getRevision().toString());
     IAndroidTarget[] targets = sdkData.getTargets();
     AndroidVersion version = targets[targets.length - 1].getVersion();
@@ -465,8 +466,7 @@
     GradleProjectImporter projectImporter = GradleProjectImporter.getInstance();
     // When importing project for tests we do not generate the sources as that triggers a compilation which finishes asynchronously. This
     // causes race conditions and intermittent errors. If a test needs source generation this should be handled separately.
-    boolean generateSources = false;
-    projectImporter.importProject(projectName, projectRoot, generateSources, new GradleSyncListener() {
+    projectImporter.importProject(projectName, projectRoot, false /* do not generate sources */, new GradleSyncListener() {
       @Override
       public void syncStarted(@NotNull Project project) {
       }
diff --git a/android/testSrc/com/android/tools/idea/templates/TemplateTest.java b/android/testSrc/com/android/tools/idea/templates/TemplateTest.java
index 35a5df8..248621d 100644
--- a/android/testSrc/com/android/tools/idea/templates/TemplateTest.java
+++ b/android/testSrc/com/android/tools/idea/templates/TemplateTest.java
@@ -50,8 +50,6 @@
 import java.util.Set;
 
 import static com.android.SdkConstants.*;
-import static com.android.tools.idea.gradle.util.GradleUtil.GRADLE_LATEST_VERSION;
-import static com.android.tools.idea.gradle.util.GradleUtil.GRADLE_PLUGIN_LATEST_VERSION;
 import static com.android.tools.idea.templates.TemplateMetadata.*;
 import static com.android.tools.idea.templates.TemplateMetadata.ATTR_TARGET_API;
 import static com.android.tools.idea.wizard.NewModuleWizardState.ATTR_CREATE_ACTIVITY;
@@ -151,7 +149,7 @@
           System.out.println("recentSDK required= " + requireRecentSdk());
           System.out.println("getTestSdkPath= " + getTestSdkPath());
           System.out.println("getPlatformDir=" + getPlatformDir());
-          String location = sdkData.getPath();
+          String location = sdkData.getLocation().getPath();
           System.out.println("Using SDK at " + location);
           VersionCheck.VersionCheckResult result = VersionCheck.checkVersion(location);
           System.out.println("Version check=" + result.getRevision());
