diff --git a/src/main/java/io/mifos/core/test/servicestarter/ArtifactResolver.java b/src/main/java/io/mifos/core/test/servicestarter/ArtifactResolver.java
index be0146c..84cb916 100644
--- a/src/main/java/io/mifos/core/test/servicestarter/ArtifactResolver.java
+++ b/src/main/java/io/mifos/core/test/servicestarter/ArtifactResolver.java
@@ -33,22 +33,10 @@
  */
 class ArtifactResolver {
   private final String artifactoryDirectory;
-  private final String username;
-  private final String password;
 
-  private RemoteRepository repositoryForProject(final String project)
-  {
-    return new RemoteRepository.Builder(project, "default", "https://mifosio-radar.bintray.com/io.mifos." + project)
-            .setAuthentication(new AuthenticationBuilder().addUsername(username).addPassword(password).build())
-            .build();
-  }
-
-
-  ArtifactResolver(final String artifactoryDirectory, final String username, final String password)
+  ArtifactResolver(final String artifactoryDirectory)
   {
     this.artifactoryDirectory = artifactoryDirectory;
-    this.username = username;
-    this.password = password;
   }
 
   File getJarFile(final String project, final String group, final String name, final String version)
@@ -59,7 +47,6 @@
 
     final ArtifactRequest artifactRequest = new ArtifactRequest();
     artifactRequest.setArtifact(new DefaultArtifact(group, name, "jar", version));
-    artifactRequest.setRepositories(Collections.singletonList(repositoryForProject(project)));
 
     final ArtifactResult artifactResult = system.resolveArtifact(session, artifactRequest);
 
diff --git a/src/main/java/io/mifos/core/test/servicestarter/IntegrationTestEnvironment.java b/src/main/java/io/mifos/core/test/servicestarter/IntegrationTestEnvironment.java
index 8c9dbbb..b57b6f1 100644
--- a/src/main/java/io/mifos/core/test/servicestarter/IntegrationTestEnvironment.java
+++ b/src/main/java/io/mifos/core/test/servicestarter/IntegrationTestEnvironment.java
@@ -50,16 +50,6 @@
     return homeDirectory + File.separator + ".m2" + File.separator + "repository";
   }
 
-  static String getBintrayUser()
-  {
-    return System.getenv().get("BINTRAY_USER");
-  }
-
-  static String getBintrayPassword()
-  {
-    return System.getenv().get("BINTRAY_PASSWORD");
-  }
-
   private int nextPort;
   private final Set<Integer> ports;
   private final RsaKeyPairFactory.KeyPairHolder keyPairHolder;
diff --git a/src/main/java/io/mifos/core/test/servicestarter/Microservice.java b/src/main/java/io/mifos/core/test/servicestarter/Microservice.java
index 13db326..ef5fb14 100644
--- a/src/main/java/io/mifos/core/test/servicestarter/Microservice.java
+++ b/src/main/java/io/mifos/core/test/servicestarter/Microservice.java
@@ -88,9 +88,7 @@
   public void start() throws ArtifactResolutionException, IOException, InterruptedException {
 
     final ArtifactResolver artifactResolver = new ArtifactResolver(
-            IntegrationTestEnvironment.getArtifactoryDirectory(),
-            IntegrationTestEnvironment.getBintrayUser(),
-            IntegrationTestEnvironment.getBintrayPassword());
+            IntegrationTestEnvironment.getArtifactoryDirectory());
 
     final File jarFile = artifactResolver.getJarFile(artifactName, "io.mifos." + artifactName, "service-boot", artifactVersion);
 
