Index: src/plugin/languageidentifier/src/java/org/apache/nutch/analysis/lang/LanguageIdentifier.java
===================================================================
--- src/plugin/languageidentifier/src/java/org/apache/nutch/analysis/lang/LanguageIdentifier.java	(revision 537349)
+++ src/plugin/languageidentifier/src/java/org/apache/nutch/analysis/lang/LanguageIdentifier.java	(working copy)
@@ -69,8 +69,6 @@
  
   private final static int DEFAULT_ANALYSIS_LENGTH = 0;    // 0 means full content
   
-  private final static float SCORE_THRESOLD = 0.00F;
-
   private final static Log LOG = LogFactory.getLog(LanguageIdentifier.class);
   
   private ArrayList languages = new ArrayList();
@@ -90,12 +88,9 @@
   private HashMap ngramsIdx = new HashMap();
 
   /** The NGramProfile used for identification */
-  private NGramProfile suspect = null;
-
-  /** My singleton instance */
-  private static LanguageIdentifier identifier = null;
-
-
+  
+  private ThreadLocal<NGramProfile> ngramProfile;
+  
   /**
    * Constructs a new Language Identifier.
    */
@@ -174,7 +169,15 @@
       }
       if (LOG.isInfoEnabled()) { LOG.info(list.toString()); }
       // Create the suspect profile
-      suspect = new NGramProfile("suspect", minLength, maxLength);
+      ngramProfile = new ThreadLocal<NGramProfile>(){
+
+        @Override
+        protected synchronized NGramProfile initialValue() {
+          return new NGramProfile("suspect", minLength, maxLength);
+      }
+
+      };
+
     } catch (Exception e) {
       if (LOG.isFatalEnabled()) { LOG.fatal(e.toString()); }
     }
@@ -392,8 +395,9 @@
         text.setLength(analyzeLength);
     }
 
-    suspect.analyze(text);
-    Iterator iter = suspect.getSorted().iterator();
+    NGramProfile detect = ngramProfile.get();
+    detect.analyze(text);
+    Iterator iter = detect.getSorted().iterator();
     float topscore = Float.MIN_VALUE;
     String lang = "";
     HashMap scores = new HashMap();
