diff --git a/README.md b/README.md
index a4f6501..b1a9c16 100644
--- a/README.md
+++ b/README.md
@@ -27,6 +27,6 @@
 
 ### Generate and print RSA keys
 
-You can use this library to generate and print RSA keys. You need to add path to spring-core (see second -cp parameter in the following example).
+You can use this library to generate and print RSA keys:
 
-`java -cp lang-0.1.0-BUILD-SNAPSHOT.jar:spring-core-4.3.3.RELEASE.jar  org.apache.fineract.cn.lang.security.RsaKeyPairFactory`
+`java -cp build/libs/lang-0.1.0-BUILD-SNAPSHOT.jar  org.apache.fineract.cn.lang.security.RsaKeyPairFactory`
diff --git a/src/main/java/org/apache/fineract/cn/lang/DateConverter.java b/src/main/java/org/apache/fineract/cn/lang/DateConverter.java
index a378a64..bd200a9 100644
--- a/src/main/java/org/apache/fineract/cn/lang/DateConverter.java
+++ b/src/main/java/org/apache/fineract/cn/lang/DateConverter.java
@@ -28,19 +28,16 @@
 public interface DateConverter {
   @Nonnull
   static Long toEpochMillis(@Nonnull final LocalDateTime localDateTime) {
-    Assert.notNull(localDateTime, "LocalDateTime must be given.");
     return localDateTime.toInstant(ZoneOffset.UTC).toEpochMilli();
   }
 
   @Nonnull
   static Long toEpochDay(@Nonnull final LocalDate localDate) {
-    Assert.notNull(localDate, "LocalDate must be given.");
     return localDate.toEpochDay();
   }
 
   @Nonnull
   static LocalDateTime fromEpochMillis(@Nonnull final Long epochMillis) {
-    Assert.notNull(epochMillis, "Epoch milliseconds must be given.");
     return LocalDateTime.from(Instant.ofEpochMilli(epochMillis).atZone(ZoneOffset.UTC));
   }
 
@@ -51,19 +48,16 @@
 
   @Nonnull
   static String toIsoString(@Nonnull final LocalDateTime localDateTime) {
-    Assert.notNull(localDateTime, "LocalDateTime must be given.");
     return localDateTime.format(DateTimeFormatter.ISO_DATE_TIME) + "Z";
   }
 
   @Nonnull
   static LocalDateTime fromIsoString(@Nonnull final String isoDateTimeString) {
-    Assert.notNull(isoDateTimeString, "ISO date time must be given.");
     return LocalDateTime.from(Instant.parse(isoDateTimeString).atZone(ZoneOffset.UTC));
   }
 
   @Nonnull
   static LocalDate dateFromIsoString(@Nonnull final String isoDateString) {
-    Assert.notNull(isoDateString, "ISO date time must be given.");
     final int zIndex = isoDateString.indexOf("Z");
     final String shortenedString = isoDateString.substring(0, zIndex);
     return LocalDate.from(DateTimeFormatter.ISO_LOCAL_DATE.parse(shortenedString));
@@ -71,13 +65,11 @@
 
   @Nonnull
   static String toIsoString(@Nonnull final LocalDate localDate) {
-    Assert.notNull(localDate, "LocalDateTime must be given.");
     return localDate.format(DateTimeFormatter.ISO_DATE) + "Z";
   }
 
   @Nonnull
   static LocalDate toLocalDate(@Nonnull final LocalDateTime localDateTime) {
-    Assert.notNull(localDateTime, "LocalDateTime must be given.");
     return localDateTime.toLocalDate();
   }
 }
diff --git a/src/main/java/org/apache/fineract/cn/lang/DateRange.java b/src/main/java/org/apache/fineract/cn/lang/DateRange.java
index 789eff7..adce114 100644
--- a/src/main/java/org/apache/fineract/cn/lang/DateRange.java
+++ b/src/main/java/org/apache/fineract/cn/lang/DateRange.java
@@ -40,8 +40,6 @@
   private final @Nonnull LocalDate end;
 
   public DateRange(final @Nonnull LocalDate start, final @Nonnull LocalDate end) {
-    Assert.notNull(start, "Range start must be given.");
-    Assert.notNull(start, "Range end must be given.");
     this.start = start;
     this.end = end;
   }
@@ -84,4 +82,4 @@
       }
     }
   }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/fineract/cn/lang/TenantContextHolder.java b/src/main/java/org/apache/fineract/cn/lang/TenantContextHolder.java
index f90aab0..c9f8c15 100644
--- a/src/main/java/org/apache/fineract/cn/lang/TenantContextHolder.java
+++ b/src/main/java/org/apache/fineract/cn/lang/TenantContextHolder.java
@@ -42,7 +42,6 @@
   }
 
   public static void setIdentifier(@Nonnull final String identifier) {
-    Assert.notNull(identifier, "A tenant identifier must be given.");
     Assert.hasLength(identifier, "A tenant identifier must have at least one character.");
     Assert.isNull(TenantContextHolder.THREAD_LOCAL.get(), "Tenant identifier already set.");
     TenantContextHolder.THREAD_LOCAL.set(identifier);
