diff --git a/.gitignore b/.gitignore
index 536de5a..c0af34f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,7 +2,10 @@
 .idea
 build/
 target/
-
+bin/
+.project
+.settings/
+.classpath
 # Ignore Gradle GUI config
 gradle-app.setting
 
diff --git a/build.gradle b/build.gradle
index 96abe59..24c0680 100644
--- a/build.gradle
+++ b/build.gradle
@@ -25,9 +25,9 @@
 }
 
 plugins {
-    id 'com.github.hierynomus.license' version '0.13.1'
-    id("org.nosphere.apache.rat") version "0.3.1"
-    id "com.jfrog.artifactory" version "4.9.5"
+    id 'com.github.hierynomus.license' version '0.15.0'
+    id("org.nosphere.apache.rat") version "0.6.0"
+    id "com.jfrog.artifactory" version "4.15.1"
     id 'maven-publish'
     id 'idea'
     id 'java'
@@ -37,10 +37,10 @@
 version 'spring_boot_2-SNAPSHOT'
 
 ext.versions = [
-        springcontext        : '4.3.3.RELEASE',
-        springboot           : '1.4.1.RELEASE',
-        feigngson            : '8.16.2',
-        findbugs             : '3.0.1',
+        springcontext        : '5.2.5.RELEASE',
+        springboot           : '2.2.6.RELEASE',
+        feigngson            : '8.18.0',
+        findbugs             : '3.0.2',
         frameworklangversion : 'spring_boot_2-SNAPSHOT'
 ]
 
@@ -59,14 +59,14 @@
 
 dependencyManagement {
     imports {
-        mavenBom 'org.springframework.cloud:spring-cloud-netflix:1.2.0.RELEASE'
+        mavenBom 'org.springframework.cloud:spring-cloud-dependencies:Hoxton.SR3'
     }
 }
 
 dependencies {
     compile(
-            [group: 'org.springframework.cloud', name: 'spring-cloud-starter-feign'],
-            [group: 'org.springframework.cloud', name: 'spring-cloud-starter-eureka'],
+            [group: 'org.springframework.cloud', name: 'spring-cloud-starter-openfeign'],
+            [group: 'org.springframework.cloud', name: 'spring-cloud-starter-netflix-eureka-client'],
             [group: 'org.springframework', name: 'spring-context', version: versions.springcontext],
             [group: 'com.google.code.findbugs', name: 'jsr305', version: versions.findbugs],
             [group: 'com.netflix.feign', name: 'feign-gson', version: versions.feigngson],
@@ -128,6 +128,10 @@
             "build/**",
             "gradlew",
             "gradlew.bat",
-            "README.md"
+            "README.md",
+            ".project",
+            "bin/**",
+            ".classpath",
+            ".settings/**"
     ]
 }
diff --git a/src/main/java/org/apache/fineract/cn/api/util/ApiFactory.java b/src/main/java/org/apache/fineract/cn/api/util/ApiFactory.java
index 1a574bd..7ac1e2b 100644
--- a/src/main/java/org/apache/fineract/cn/api/util/ApiFactory.java
+++ b/src/main/java/org/apache/fineract/cn/api/util/ApiFactory.java
@@ -25,7 +25,7 @@
 import org.slf4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.cloud.netflix.feign.support.SpringMvcContract;
+import org.springframework.cloud.openfeign.support.SpringMvcContract;
 import org.springframework.stereotype.Component;
 
 /**
diff --git a/src/main/java/org/apache/fineract/cn/api/util/CustomFeignClientsConfiguration.java b/src/main/java/org/apache/fineract/cn/api/util/CustomFeignClientsConfiguration.java
index d8e4b60..76888a1 100644
--- a/src/main/java/org/apache/fineract/cn/api/util/CustomFeignClientsConfiguration.java
+++ b/src/main/java/org/apache/fineract/cn/api/util/CustomFeignClientsConfiguration.java
@@ -29,7 +29,7 @@
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Qualifier;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.cloud.netflix.feign.FeignClientsConfiguration;
+import org.springframework.cloud.openfeign.FeignClientsConfiguration;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Scope;
 
diff --git a/src/test/java/org/apache/fineract/cn/api/util/AnnotatedErrorDecoderTest.java b/src/test/java/org/apache/fineract/cn/api/util/AnnotatedErrorDecoderTest.java
index b272ab7..aed2d6d 100644
--- a/src/test/java/org/apache/fineract/cn/api/util/AnnotatedErrorDecoderTest.java
+++ b/src/test/java/org/apache/fineract/cn/api/util/AnnotatedErrorDecoderTest.java
@@ -21,6 +21,7 @@
 import feign.Feign;
 import feign.FeignException;
 import feign.Response;
+import feign.Request;
 import org.apache.fineract.cn.api.annotation.ThrowsException;
 import org.junit.Assert;
 import org.junit.Test;
@@ -50,51 +51,62 @@
   public static Collection testCases() throws NoSuchMethodException {
     final Collection<TestCase> ret = new ArrayList<>();
 
+    final String TEST_URL = "http://igle.pop.org/app/v1/";
+    final Request request = Request.create("GET", TEST_URL, Collections.emptyMap(), new byte[]{}, Charset.defaultCharset());
+  
     final Response emptyInternalServerErrorResponse = Response.builder()
             .status(HttpStatus.INTERNAL_SERVER_ERROR.value())
             .body("blah", Charset.defaultCharset())
             .headers(Collections.emptyMap())
+            .request(request)
             .build();
 
     final Response emptyBadRequestResponse = Response.builder()
             .status(HttpStatus.BAD_REQUEST.value())
             .body("blah", Charset.defaultCharset())
             .headers(Collections.emptyMap())
+            .request(request)
             .build();
 
     final Response emptyBadRequestResponseWithNoBody = Response.builder()
             .status(HttpStatus.BAD_REQUEST.value())
             .headers(Collections.emptyMap())
+            .request(request)
             .build();
 
     final Response emptyNotFoundRequestResponse = Response.builder()
             .status(HttpStatus.NOT_FOUND.value())
             .body("blah", Charset.defaultCharset())
             .headers(Collections.emptyMap())
+            .request(request)
             .build();
 
     final Response emptyConflictResponse = Response.builder()
             .status(HttpStatus.CONFLICT.value())
             .body("blah", Charset.defaultCharset())
             .headers(Collections.emptyMap())
+            .request(request)
             .build();
 
     final Response emptyIAmATeapotResponse = Response.builder()
             .status(HttpStatus.I_AM_A_TEAPOT.value())
             .body("blah", Charset.defaultCharset())
             .headers(Collections.emptyMap())
+            .request(request)
             .build();
 
     final Response emptyUnauthorizedResponse = Response.builder()
             .status(HttpStatus.UNAUTHORIZED.value())
             .body("blah", Charset.defaultCharset())
             .headers(Collections.emptyMap())
+            .request(request)
             .build();
 
     final Response emptyForbiddenResponse = Response.builder()
             .status(HttpStatus.FORBIDDEN.value())
             .body("blah", Charset.defaultCharset())
             .headers(Collections.emptyMap())
+            .request(request)
             .build();
 
     final String madeUpMethodKey = "x";
@@ -106,10 +118,10 @@
         Feign.configKey(OneMethodInterface.class, OneMethodInterface.class.getMethod("method"));
 
     final String onceAnnotatedMethodKey =
-            Feign.configKey(OneMethodOneAnnotationInterface.class, OneMethodOneAnnotationInterface.class.getMethod("method"));
+        Feign.configKey(OneMethodOneAnnotationInterface.class, OneMethodOneAnnotationInterface.class.getMethod("method"));
 
     final String onceAnnotatedWithStringExceptionMethodKey =
-            Feign.configKey(OneMethodOneAnnotationStringParameteredExceptionInterface.class, OneMethodOneAnnotationStringParameteredExceptionInterface.class.getMethod("method"));
+        Feign.configKey(OneMethodOneAnnotationStringParameteredExceptionInterface.class, OneMethodOneAnnotationStringParameteredExceptionInterface.class.getMethod("method"));
 
     ret.add(new TestCase("Methodless interface")
         .clazz(MethodlessInterface.class)
@@ -154,10 +166,10 @@
         .expectedResult(new ParameterlessException()));
 
     ret.add(new TestCase("Interface with one method that has one annotation containing an exception which accepts a string parameter.")
-            .clazz(OneMethodOneAnnotationStringParameteredExceptionInterface.class)
-            .methodKey(onceAnnotatedWithStringExceptionMethodKey)
-            .response(emptyBadRequestResponse)
-            .expectedResult(new StringParameteredException("blah")));
+        .clazz(OneMethodOneAnnotationStringParameteredExceptionInterface.class)
+        .methodKey(onceAnnotatedWithStringExceptionMethodKey)
+        .response(emptyBadRequestResponse)
+        .expectedResult(new StringParameteredException("blah")));
 
     ret.add(new TestCase("Bad request on an interface in which bad request isn't mapped.")
         .clazz(AnnotationlessInterface.class)
@@ -166,17 +178,17 @@
         .expectedResult(new IllegalArgumentException("blah")));
 
     ret.add(new TestCase("Bad request with no body on an interface in which bad request isn't mapped.")
-            .clazz(AnnotationlessInterface.class)
-            .methodKey(annotationlessMethodKey)
-            .response(emptyBadRequestResponseWithNoBody)
-            .expectedResult(new IllegalArgumentException((String)null)));
+        .clazz(AnnotationlessInterface.class)
+        .methodKey(annotationlessMethodKey)
+        .response(emptyBadRequestResponseWithNoBody)
+        .expectedResult(new IllegalArgumentException((String)null)));
 
 
     ret.add(new TestCase("Not found request on an interface in which not found request isn't mapped.")
-            .clazz(AnnotationlessInterface.class)
-            .methodKey(annotationlessMethodKey)
-            .response(emptyNotFoundRequestResponse)
-            .expectedResult(new NotFoundException("blah")));
+        .clazz(AnnotationlessInterface.class)
+        .methodKey(annotationlessMethodKey)
+        .response(emptyNotFoundRequestResponse)
+        .expectedResult(new NotFoundException("blah")));
 
     ret.add(new TestCase("Request with invalid token.")
         .clazz(OneMethodOneAnnotationInterface.class)
diff --git a/src/test/java/org/apache/fineract/cn/api/util/CookieInterceptingClientTest.java b/src/test/java/org/apache/fineract/cn/api/util/CookieInterceptingClientTest.java
index 0b64af1..1c4102c 100644
--- a/src/test/java/org/apache/fineract/cn/api/util/CookieInterceptingClientTest.java
+++ b/src/test/java/org/apache/fineract/cn/api/util/CookieInterceptingClientTest.java
@@ -38,12 +38,12 @@
  */
 public class CookieInterceptingClientTest {
   private final static String TEST_URL = "http://igle.pop.org/app/v1/";
+  private final Request request = Request.create("GET", TEST_URL, Collections.emptyMap(), new byte[]{}, Charset.defaultCharset());
 
   @Test
   public void cookiesPlacedInJarThenAttachedToRequest() throws IOException, URISyntaxException {
     final CookieInterceptingClient testSubject = new CookieInterceptingClient(TEST_URL);
 
-    //response
     final CookieInterceptingClient spiedTestSubject = Mockito.spy(testSubject);
 
     final Map<String, Collection<String>> cookieHeaders = new HashMap<>();
@@ -52,11 +52,12 @@
             .status(HttpStatus.INTERNAL_SERVER_ERROR.value())
             .reason("blah")
             .headers(cookieHeaders)
+            .request(this.request)
             .build();
 
     Mockito.doReturn(dummyResponse).when(spiedTestSubject).superExecute(Mockito.anyObject(), Mockito.anyObject());
 
-    spiedTestSubject.execute(Request.create("", TEST_URL +"request", Collections.emptyMap(), new byte[]{}, Charset.defaultCharset()), new Request.Options());
+    spiedTestSubject.execute(this.request, new Request.Options());
 
     final Map<String, List<String>> ret = testSubject.cookieManager.get(new URI(TEST_URL), Collections.emptyMap());
     Assert.assertEquals(ret.get("Cookie"), Collections.singletonList("x=y"));
