diff --git a/geoentitylinker-addon/src/main/java/opennlp/addons/geoentitylinker/indexing/GeonamesProcessor.java b/geoentitylinker-addon/src/main/java/opennlp/addons/geoentitylinker/indexing/GeonamesProcessor.java
index 8b57aaa..cd032e8 100644
--- a/geoentitylinker-addon/src/main/java/opennlp/addons/geoentitylinker/indexing/GeonamesProcessor.java
+++ b/geoentitylinker-addon/src/main/java/opennlp/addons/geoentitylinker/indexing/GeonamesProcessor.java
@@ -16,6 +16,7 @@
 package opennlp.addons.geoentitylinker.indexing;
 
 import java.io.BufferedReader;
+import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileReader;
 import java.io.FileWriter;
@@ -146,6 +147,7 @@
   public static void writeCountryContextFile(File outfile, Map<String, AdminBoundary> adms) {
     // FileWriter writer = null;
     try (FileWriter writer = new FileWriter(outfile, true)) {
+      BufferedWriter bw = new BufferedWriter(writer);
 
       for (String admKey : adms.keySet()) {
         AdminBoundary adm = adms.get(admKey);
@@ -157,7 +159,7 @@
 
         String line = adm.getCountryCode() + "\t" + adm.getProvCode() + "\t" + "" + "\t" + country + "\t" + province + "\t" + "" + "\t" + "(" + country + ")" + "\t"
             + adm.getProvinceName() + "\t" + adm.getCountyName() + "\n";
-        writer.write(line);
+        bw.write(line);
         // System.out.println(line);
 
       }
diff --git a/geoentitylinker-addon/src/main/java/opennlp/addons/geoentitylinker/indexing/RegionProcessor.java b/geoentitylinker-addon/src/main/java/opennlp/addons/geoentitylinker/indexing/RegionProcessor.java
index f457822..de91e0c 100644
--- a/geoentitylinker-addon/src/main/java/opennlp/addons/geoentitylinker/indexing/RegionProcessor.java
+++ b/geoentitylinker-addon/src/main/java/opennlp/addons/geoentitylinker/indexing/RegionProcessor.java
@@ -16,6 +16,7 @@
 package opennlp.addons.geoentitylinker.indexing;
 
 import java.io.BufferedReader;
+import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileReader;
 import java.io.FileWriter;
@@ -102,11 +103,12 @@
       w.commit();
     }
     FileWriter writer = new FileWriter(outputCountryContextfile, true);
+    BufferedWriter bw = new BufferedWriter(writer);
     for (String string : ccfileentries) {
-      writer.write(string);
+      bw.write(string);
     }
     System.out.println("successfully wrote Region entries to country oontext file");
-    writer.close();
+    bw.close();
     System.out.println("Completed indexing regions!");
   }
 
diff --git a/geoentitylinker-addon/src/main/java/opennlp/addons/geoentitylinker/indexing/USGSProcessor.java b/geoentitylinker-addon/src/main/java/opennlp/addons/geoentitylinker/indexing/USGSProcessor.java
index fcd61c1..59c94b7 100644
--- a/geoentitylinker-addon/src/main/java/opennlp/addons/geoentitylinker/indexing/USGSProcessor.java
+++ b/geoentitylinker-addon/src/main/java/opennlp/addons/geoentitylinker/indexing/USGSProcessor.java
@@ -16,6 +16,7 @@
 package opennlp.addons.geoentitylinker.indexing;
 
 import java.io.BufferedReader;
+import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileReader;
 import java.io.FileWriter;
@@ -225,6 +226,7 @@
   public static void writeCountryContextFile(File outfile, Map<String, AdminBoundary> adms) {
     // FileWriter writer = null;
     try (FileWriter writer = new FileWriter(outfile, true)) {
+      BufferedWriter bw = new BufferedWriter(writer);
 
       for (String admkey : adms.keySet()) {
         AdminBoundary adm = adms.get(admkey);
@@ -239,7 +241,7 @@
          */
         String line = adm.getCountryCode() + "\t" + adm.getProvCode() + "\t" + adm.getCountyCode() + "\t" + country + "\t" + province + "\t" + adm.getCountyName() + "\t"
             + "(U\\.S\\.[ $]|U\\.S\\.A\\.[ $]|United States|the US[ $]|a us[ $])" + "\t" + adm.getProvinceName() + "\t" + adm.getCountyName() + "\n";
-        writer.write(line);
+        bw.write(line);i
         ///  System.out.println(line);
 
       }
diff --git a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/GenericModelableImpl.java b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/GenericModelableImpl.java
index 2a0a730..ccfddcb 100644
--- a/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/GenericModelableImpl.java
+++ b/modelbuilder-addon/src/main/java/opennlp/addons/modelbuilder/impls/GenericModelableImpl.java
@@ -19,6 +19,7 @@
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.FileWriter;
+import java.io.BufferedWriter;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.charset.Charset;
@@ -61,11 +62,12 @@
     try {
 
       FileWriter writer = new FileWriter(params.getAnnotatedTrainingDataFile(), false);
+      BufferedWriter bw = new BufferedWriter(writer);
 
       for (String s : annotatedSentences) {
-        writer.write(s.replace("\n", " ").trim() + "\n");
+        bw.write(s.replace("\n", " ").trim() + "\n");
       }
-      writer.close();
+      bw.close();
     } catch (IOException ex) {
       ex.printStackTrace();
     }
