diff --git a/htroot/BlacklistCleaner_p.java b/htroot/BlacklistCleaner_p.java
index 5cfae65ae..0dbea480a 100644
--- a/htroot/BlacklistCleaner_p.java
+++ b/htroot/BlacklistCleaner_p.java
@@ -50,10 +50,10 @@ import de.anomic.data.Blacklist;
 import de.anomic.data.DefaultBlacklist;
 import de.anomic.data.listManager;
 import de.anomic.http.httpRequestHeader;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.server.serverObjects;
 import de.anomic.server.serverSwitch;
+import de.anomic.yacy.logging.Log;
 
 public class BlacklistCleaner_p {
     
diff --git a/htroot/Blacklist_p.java b/htroot/Blacklist_p.java
index 622905bfb..da678dacc 100644
--- a/htroot/Blacklist_p.java
+++ b/htroot/Blacklist_p.java
@@ -43,12 +43,12 @@ import de.anomic.data.AbstractBlacklist;
 import de.anomic.data.Blacklist;
 import de.anomic.data.listManager;
 import de.anomic.http.httpRequestHeader;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaSearchEvent;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.server.serverObjects;
 import de.anomic.server.serverSwitch;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public class Blacklist_p {
     private final static String EDIT             = "edit_";
diff --git a/htroot/BlogComments.java b/htroot/BlogComments.java
index 6e71f9dfd..dbe19020b 100644
--- a/htroot/BlogComments.java
+++ b/htroot/BlogComments.java
@@ -41,12 +41,12 @@ import de.anomic.data.messageBoard;
 import de.anomic.data.userDB;
 import de.anomic.data.blogBoard.BlogEntry;
 import de.anomic.http.httpRequestHeader;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.server.serverObjects;
 import de.anomic.server.serverSwitch;
 import de.anomic.yacy.yacyCore;
+import de.anomic.yacy.logging.Log;
 
 public class BlogComments {
 
diff --git a/htroot/Bookmarks.java b/htroot/Bookmarks.java
index d36afa0e9..9907adecd 100644
--- a/htroot/Bookmarks.java
+++ b/htroot/Bookmarks.java
@@ -43,7 +43,6 @@ import de.anomic.data.bookmarksDB.Tag;
 import de.anomic.http.httpRequestHeader;
 import de.anomic.kelondro.text.metadataPrototype.URLMetadataRow;
 import de.anomic.kelondro.util.DateFormatter;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaParserDocument;
 import de.anomic.plasma.plasmaSnippetCache;
 import de.anomic.plasma.plasmaSwitchboard;
@@ -52,6 +51,7 @@ import de.anomic.server.serverSwitch;
 import de.anomic.yacy.yacyNewsPool;
 import de.anomic.yacy.yacyNewsRecord;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 
 public class Bookmarks {
diff --git a/htroot/CrawlResults.java b/htroot/CrawlResults.java
index 46c892173..49ce6647b 100644
--- a/htroot/CrawlResults.java
+++ b/htroot/CrawlResults.java
@@ -32,13 +32,13 @@ import java.util.Locale;
 
 import de.anomic.http.httpRequestHeader;
 import de.anomic.kelondro.text.metadataPrototype.URLMetadataRow;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.server.serverObjects;
 import de.anomic.server.serverSwitch;
 import de.anomic.tools.nxTools;
 import de.anomic.yacy.yacySeed;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public class CrawlResults {
 
diff --git a/htroot/ProxyIndexingMonitor_p.java b/htroot/ProxyIndexingMonitor_p.java
index cba9b4bb4..0b9243f86 100644
--- a/htroot/ProxyIndexingMonitor_p.java
+++ b/htroot/ProxyIndexingMonitor_p.java
@@ -31,12 +31,12 @@ import java.io.File;
 import java.io.IOException;
 
 import de.anomic.http.httpRequestHeader;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaHTCache;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.plasma.plasmaSwitchboardConstants;
 import de.anomic.server.serverObjects;
 import de.anomic.server.serverSwitch;
+import de.anomic.yacy.logging.Log;
 
 public class ProxyIndexingMonitor_p {
 
diff --git a/htroot/ViewImage.java b/htroot/ViewImage.java
index 2a3d44923..66b586b8d 100644
--- a/htroot/ViewImage.java
+++ b/htroot/ViewImage.java
@@ -30,13 +30,13 @@ import java.net.MalformedURLException;
 import java.util.HashMap;
 
 import de.anomic.http.httpRequestHeader;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.plasma.plasmaSnippetCache;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.server.serverObjects;
 import de.anomic.server.serverSwitch;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 import de.anomic.ymage.ymageImageParser;
 
 public class ViewImage {
diff --git a/htroot/yacy/crawlReceipt.java b/htroot/yacy/crawlReceipt.java
index 2f125889a..61bd02900 100644
--- a/htroot/yacy/crawlReceipt.java
+++ b/htroot/yacy/crawlReceipt.java
@@ -32,13 +32,13 @@ import java.io.IOException;
 import de.anomic.crawler.ZURL;
 import de.anomic.http.httpRequestHeader;
 import de.anomic.kelondro.text.metadataPrototype.URLMetadataRow;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.server.serverObjects;
 import de.anomic.server.serverSwitch;
 import de.anomic.tools.crypt;
 import de.anomic.yacy.yacyNetwork;
 import de.anomic.yacy.yacySeed;
+import de.anomic.yacy.logging.Log;
 
 public final class crawlReceipt {
 
diff --git a/htroot/yacy/message.java b/htroot/yacy/message.java
index 5d832abf4..71176c12f 100644
--- a/htroot/yacy/message.java
+++ b/htroot/yacy/message.java
@@ -36,7 +36,6 @@ import java.util.Date;
 
 import de.anomic.data.messageBoard;
 import de.anomic.http.httpRequestHeader;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.server.serverObjects;
@@ -45,6 +44,7 @@ import de.anomic.tools.crypt;
 import de.anomic.yacy.yacyCore;
 import de.anomic.yacy.yacyNetwork;
 import de.anomic.yacy.yacySeed;
+import de.anomic.yacy.logging.Log;
 
 public final class message {
 
diff --git a/htroot/yacy/transferRWI.java b/htroot/yacy/transferRWI.java
index 30575f56e..8817222f3 100644
--- a/htroot/yacy/transferRWI.java
+++ b/htroot/yacy/transferRWI.java
@@ -37,7 +37,6 @@ import de.anomic.data.Blacklist;
 import de.anomic.http.httpRequestHeader;
 import de.anomic.kelondro.text.referencePrototype.WordReferenceRow;
 import de.anomic.kelondro.util.FileUtils;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.plasma.plasmaSwitchboardConstants;
 import de.anomic.server.serverCore;
@@ -48,6 +47,7 @@ import de.anomic.yacy.yacyCore;
 import de.anomic.yacy.yacyNetwork;
 import de.anomic.yacy.yacySeed;
 import de.anomic.yacy.dht.FlatWordPartitionScheme;
+import de.anomic.yacy.logging.Log;
 
 public final class transferRWI {
 
diff --git a/htroot/yacysearch.java b/htroot/yacysearch.java
index 0fbf119aa..a9d013dc8 100644
--- a/htroot/yacysearch.java
+++ b/htroot/yacysearch.java
@@ -38,7 +38,6 @@ import de.anomic.kelondro.order.Bitfield;
 import de.anomic.kelondro.text.metadataPrototype.URLMetadataRow;
 import de.anomic.kelondro.util.MemoryControl;
 import de.anomic.kelondro.util.SetTools;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaParserDocument;
 import de.anomic.plasma.plasmaProfiling;
 import de.anomic.plasma.plasmaSearchEvent;
@@ -61,6 +60,7 @@ import de.anomic.xml.RSSFeed;
 import de.anomic.yacy.yacyNewsPool;
 import de.anomic.yacy.yacyNewsRecord;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public class yacysearch {
 
diff --git a/source/de/anomic/crawler/AbstractImporter.java b/source/de/anomic/crawler/AbstractImporter.java
index fdaeab07a..9f857daa8 100644
--- a/source/de/anomic/crawler/AbstractImporter.java
+++ b/source/de/anomic/crawler/AbstractImporter.java
@@ -1,6 +1,6 @@
 package de.anomic.crawler;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public abstract class AbstractImporter extends Thread implements Importer {
 
diff --git a/source/de/anomic/crawler/Balancer.java b/source/de/anomic/crawler/Balancer.java
index 54fd8f5ca..651abfcd4 100644
--- a/source/de/anomic/crawler/Balancer.java
+++ b/source/de/anomic/crawler/Balancer.java
@@ -37,7 +37,7 @@ import de.anomic.kelondro.index.Row;
 import de.anomic.kelondro.index.ObjectIndex;
 import de.anomic.kelondro.order.CloneableIterator;
 import de.anomic.kelondro.table.EcoTable;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class Balancer {
     
diff --git a/source/de/anomic/crawler/CrawlQueues.java b/source/de/anomic/crawler/CrawlQueues.java
index 50ca29d6c..25ec451c1 100644
--- a/source/de/anomic/crawler/CrawlQueues.java
+++ b/source/de/anomic/crawler/CrawlQueues.java
@@ -41,7 +41,6 @@ import de.anomic.http.httpClient;
 import de.anomic.kelondro.table.FlexWidthArray;
 import de.anomic.kelondro.util.DateFormatter;
 import de.anomic.kelondro.util.FileUtils;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaParser;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.plasma.plasmaSwitchboardConstants;
@@ -52,6 +51,7 @@ import de.anomic.yacy.yacyClient;
 import de.anomic.yacy.yacySeed;
 import de.anomic.yacy.yacyURL;
 import de.anomic.yacy.dht.PeerSelection;
+import de.anomic.yacy.logging.Log;
 
 public class CrawlQueues {
 
diff --git a/source/de/anomic/crawler/CrawlStacker.java b/source/de/anomic/crawler/CrawlStacker.java
index af163ac38..6b50db1ab 100644
--- a/source/de/anomic/crawler/CrawlStacker.java
+++ b/source/de/anomic/crawler/CrawlStacker.java
@@ -34,12 +34,12 @@ import java.util.Date;
 import de.anomic.data.Blacklist;
 import de.anomic.kelondro.text.Segment;
 import de.anomic.kelondro.text.metadataPrototype.URLMetadataRow;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.server.serverDomains;
 import de.anomic.server.serverProcessor;
 import de.anomic.yacy.yacySeedDB;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public final class CrawlStacker {
 
diff --git a/source/de/anomic/crawler/CrawlSwitchboard.java b/source/de/anomic/crawler/CrawlSwitchboard.java
index dfd938059..cca281cf9 100644
--- a/source/de/anomic/crawler/CrawlSwitchboard.java
+++ b/source/de/anomic/crawler/CrawlSwitchboard.java
@@ -33,9 +33,9 @@ import java.util.Iterator;
 import de.anomic.crawler.CrawlProfile.entry;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.kelondro.util.kelondroException;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.parser.Word;
 import de.anomic.yacy.yacySeedDB;
+import de.anomic.yacy.logging.Log;
 
 public final class CrawlSwitchboard {
 
diff --git a/source/de/anomic/crawler/FTPLoader.java b/source/de/anomic/crawler/FTPLoader.java
index 03ff28e76..7fec7dae4 100644
--- a/source/de/anomic/crawler/FTPLoader.java
+++ b/source/de/anomic/crawler/FTPLoader.java
@@ -36,13 +36,13 @@ import de.anomic.http.httpRequestHeader;
 import de.anomic.http.httpResponseHeader;
 import de.anomic.http.httpdProxyCacheEntry;
 import de.anomic.kelondro.util.DateFormatter;
-import de.anomic.kelondro.util.Log;
 import de.anomic.net.ftpc;
 import de.anomic.plasma.plasmaHTCache;
 import de.anomic.plasma.plasmaParser;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.plasma.parser.Document;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public class FTPLoader {
 
diff --git a/source/de/anomic/crawler/HTTPLoader.java b/source/de/anomic/crawler/HTTPLoader.java
index 8e66275b3..f46d730a7 100644
--- a/source/de/anomic/crawler/HTTPLoader.java
+++ b/source/de/anomic/crawler/HTTPLoader.java
@@ -34,12 +34,12 @@ import de.anomic.http.httpResponse;
 import de.anomic.http.httpRequestHeader;
 import de.anomic.http.httpResponseHeader;
 import de.anomic.http.httpdProxyCacheEntry;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaHTCache;
 import de.anomic.plasma.plasmaParser;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.plasma.parser.Document;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public final class HTTPLoader {
 
diff --git a/source/de/anomic/crawler/ImporterManager.java b/source/de/anomic/crawler/ImporterManager.java
index 2db701c0d..c0a1561eb 100644
--- a/source/de/anomic/crawler/ImporterManager.java
+++ b/source/de/anomic/crawler/ImporterManager.java
@@ -2,7 +2,7 @@ package de.anomic.crawler;
 
 import java.util.Vector;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class ImporterManager {
 
diff --git a/source/de/anomic/crawler/IndexingStack.java b/source/de/anomic/crawler/IndexingStack.java
index 1a5b68990..604de3345 100644
--- a/source/de/anomic/crawler/IndexingStack.java
+++ b/source/de/anomic/crawler/IndexingStack.java
@@ -42,12 +42,12 @@ import de.anomic.kelondro.table.Stack;
 import de.anomic.kelondro.text.MetadataRepository;
 import de.anomic.kelondro.text.metadataPrototype.URLMetadataRow;
 import de.anomic.kelondro.util.DateFormatter;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaHTCache;
 import de.anomic.plasma.plasmaSwitchboardConstants;
 import de.anomic.yacy.yacySeed;
 import de.anomic.yacy.yacySeedDB;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public class IndexingStack {
 
diff --git a/source/de/anomic/crawler/NoticedURL.java b/source/de/anomic/crawler/NoticedURL.java
index 52a18d7b4..9e281b7a0 100755
--- a/source/de/anomic/crawler/NoticedURL.java
+++ b/source/de/anomic/crawler/NoticedURL.java
@@ -30,7 +30,7 @@ import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class NoticedURL {
     
diff --git a/source/de/anomic/crawler/ProtocolLoader.java b/source/de/anomic/crawler/ProtocolLoader.java
index 37213b575..7412f7b66 100644
--- a/source/de/anomic/crawler/ProtocolLoader.java
+++ b/source/de/anomic/crawler/ProtocolLoader.java
@@ -33,11 +33,11 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.plasma.parser.Document;
 import de.anomic.server.serverCore;
 import de.anomic.server.serverProcessorJob;
+import de.anomic.yacy.logging.Log;
 
 public final class ProtocolLoader {
 
diff --git a/source/de/anomic/crawler/ResourceObserver.java b/source/de/anomic/crawler/ResourceObserver.java
index 334e12f75..5dd2b981a 100644
--- a/source/de/anomic/crawler/ResourceObserver.java
+++ b/source/de/anomic/crawler/ResourceObserver.java
@@ -28,10 +28,10 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.plasma.plasmaSwitchboardConstants;
 import de.anomic.tools.diskUsage;
+import de.anomic.yacy.logging.Log;
 
 public final class ResourceObserver {
     // Unknown for now
diff --git a/source/de/anomic/crawler/ResultURLs.java b/source/de/anomic/crawler/ResultURLs.java
index 695f65a34..3cfb9893e 100644
--- a/source/de/anomic/crawler/ResultURLs.java
+++ b/source/de/anomic/crawler/ResultURLs.java
@@ -42,9 +42,9 @@ import java.util.List;
 import de.anomic.kelondro.order.Bitfield;
 import de.anomic.kelondro.text.metadataPrototype.URLMetadataRow;
 import de.anomic.kelondro.util.ScoreCluster;
-import de.anomic.kelondro.util.Log;
 import de.anomic.yacy.yacySeedDB;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public final class ResultURLs {
 
diff --git a/source/de/anomic/crawler/RobotsTxt.java b/source/de/anomic/crawler/RobotsTxt.java
index 341bf6e53..50faa4ded 100644
--- a/source/de/anomic/crawler/RobotsTxt.java
+++ b/source/de/anomic/crawler/RobotsTxt.java
@@ -49,9 +49,9 @@ import de.anomic.kelondro.order.NaturalOrder;
 import de.anomic.kelondro.util.ByteBuffer;
 import de.anomic.kelondro.util.DateFormatter;
 import de.anomic.kelondro.util.kelondroException;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public class RobotsTxt {
     
diff --git a/source/de/anomic/data/SitemapParser.java b/source/de/anomic/data/SitemapParser.java
index b012547ae..f8b8cd87f 100644
--- a/source/de/anomic/data/SitemapParser.java
+++ b/source/de/anomic/data/SitemapParser.java
@@ -47,9 +47,9 @@ import de.anomic.http.httpRequestHeader;
 import de.anomic.http.httpdByteCountInputStream;
 import de.anomic.kelondro.text.metadataPrototype.URLMetadataRow;
 import de.anomic.kelondro.util.DateFormatter;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 /**
  * Class to parse a sitemap file.<br>
diff --git a/source/de/anomic/data/URLFetcherStack.java b/source/de/anomic/data/URLFetcherStack.java
index dc0abf313..9d819719c 100644
--- a/source/de/anomic/data/URLFetcherStack.java
+++ b/source/de/anomic/data/URLFetcherStack.java
@@ -33,8 +33,8 @@ import de.anomic.kelondro.index.Row.EntryIndex;
 import de.anomic.kelondro.order.Base64Order;
 import de.anomic.kelondro.table.Stack;
 import de.anomic.kelondro.util.kelondroException;
-import de.anomic.kelondro.util.Log;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public class URLFetcherStack {
     
diff --git a/source/de/anomic/data/blogBoard.java b/source/de/anomic/data/blogBoard.java
index 46095a265..f3e190840 100644
--- a/source/de/anomic/data/blogBoard.java
+++ b/source/de/anomic/data/blogBoard.java
@@ -54,7 +54,7 @@ import de.anomic.kelondro.order.Base64Order;
 import de.anomic.kelondro.order.NaturalOrder;
 import de.anomic.kelondro.util.DateFormatter;
 import de.anomic.kelondro.util.kelondroException;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class blogBoard {
     
diff --git a/source/de/anomic/data/blogBoardComments.java b/source/de/anomic/data/blogBoardComments.java
index 911d400d8..1f28b38da 100644
--- a/source/de/anomic/data/blogBoardComments.java
+++ b/source/de/anomic/data/blogBoardComments.java
@@ -51,7 +51,7 @@ import de.anomic.kelondro.blob.BLOBTree;
 import de.anomic.kelondro.blob.MapView;
 import de.anomic.kelondro.order.Base64Order;
 import de.anomic.kelondro.order.NaturalOrder;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class blogBoardComments {
     
diff --git a/source/de/anomic/data/bookmarksDB.java b/source/de/anomic/data/bookmarksDB.java
index b7fbf0932..c6a1e5462 100644
--- a/source/de/anomic/data/bookmarksDB.java
+++ b/source/de/anomic/data/bookmarksDB.java
@@ -71,7 +71,6 @@ import de.anomic.kelondro.order.CloneableIterator;
 import de.anomic.kelondro.order.NaturalOrder;
 import de.anomic.kelondro.util.DateFormatter;
 import de.anomic.kelondro.util.kelondroException;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.plasma.parser.Word;
@@ -80,6 +79,7 @@ import de.anomic.server.serverInstantBusyThread;
 import de.anomic.yacy.yacyNewsPool;
 import de.anomic.yacy.yacyNewsRecord;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public class bookmarksDB {
 	// ------------------------------------
diff --git a/source/de/anomic/data/translator.java b/source/de/anomic/data/translator.java
index cf460b4b6..b3fe05a7d 100644
--- a/source/de/anomic/data/translator.java
+++ b/source/de/anomic/data/translator.java
@@ -48,9 +48,9 @@ import java.util.Vector;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import de.anomic.kelondro.util.Log;
 import de.anomic.server.serverSwitch;
 import de.anomic.tools.Formatter;
+import de.anomic.yacy.logging.Log;
 
 /**
  * Wordlist based translator
diff --git a/source/de/anomic/http/AcceptEverythingTrustManager.java b/source/de/anomic/http/AcceptEverythingTrustManager.java
index bc04dbc80..6fd24d0cb 100644
--- a/source/de/anomic/http/AcceptEverythingTrustManager.java
+++ b/source/de/anomic/http/AcceptEverythingTrustManager.java
@@ -7,7 +7,7 @@ import java.security.cert.X509Certificate;
 
 import javax.net.ssl.X509TrustManager;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 /**
  * trust every server
diff --git a/source/de/anomic/http/HttpConnectionInfo.java b/source/de/anomic/http/HttpConnectionInfo.java
index 251cd5984..6352ea8c6 100644
--- a/source/de/anomic/http/HttpConnectionInfo.java
+++ b/source/de/anomic/http/HttpConnectionInfo.java
@@ -30,7 +30,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 /**
  * Information about a connection
diff --git a/source/de/anomic/http/httpClient.java b/source/de/anomic/http/httpClient.java
index ecae456ac..809bd626a 100644
--- a/source/de/anomic/http/httpClient.java
+++ b/source/de/anomic/http/httpClient.java
@@ -64,8 +64,8 @@ import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
 
 import de.anomic.crawler.Latency;
 import de.anomic.kelondro.order.Base64Order;
-import de.anomic.kelondro.util.Log;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 /**
  * HttpClient implementation which uses Jakarta Commons HttpClient 3.x {@link http://hc.apache.org/httpclient-3.x/}
diff --git a/source/de/anomic/http/httpResponseHeader.java b/source/de/anomic/http/httpResponseHeader.java
index 133eebb54..21415629f 100755
--- a/source/de/anomic/http/httpResponseHeader.java
+++ b/source/de/anomic/http/httpResponseHeader.java
@@ -30,7 +30,7 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class httpResponseHeader extends httpHeader {
 
diff --git a/source/de/anomic/http/httpTemplate.java b/source/de/anomic/http/httpTemplate.java
index 89226b415..372bfebee 100644
--- a/source/de/anomic/http/httpTemplate.java
+++ b/source/de/anomic/http/httpTemplate.java
@@ -61,8 +61,8 @@ import java.util.HashMap;
 import java.util.List;
 
 import de.anomic.kelondro.util.ByteBuffer;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
+import de.anomic.yacy.logging.Log;
 
 /**
  * A template engine, which substitutes patterns in strings<br>
diff --git a/source/de/anomic/http/httpd.java b/source/de/anomic/http/httpd.java
index 6803cd4c2..d8016c7c0 100644
--- a/source/de/anomic/http/httpd.java
+++ b/source/de/anomic/http/httpd.java
@@ -66,7 +66,6 @@ import de.anomic.kelondro.order.Base64Order;
 import de.anomic.kelondro.order.Digest;
 import de.anomic.kelondro.util.ByteBuffer;
 import de.anomic.kelondro.util.DateFormatter;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.kelondro.util.MemoryControl;
 import de.anomic.plasma.plasmaSwitchboard;
@@ -77,6 +76,7 @@ import de.anomic.server.serverHandler;
 import de.anomic.server.serverObjects;
 import de.anomic.server.serverSwitch;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 
 /**
diff --git a/source/de/anomic/http/httpdFileHandler.java b/source/de/anomic/http/httpdFileHandler.java
index ea142efab..58742a45b 100644
--- a/source/de/anomic/http/httpdFileHandler.java
+++ b/source/de/anomic/http/httpdFileHandler.java
@@ -84,7 +84,6 @@ import de.anomic.htmlFilter.htmlFilterContentScraper;
 import de.anomic.htmlFilter.htmlFilterInputStream;
 import de.anomic.kelondro.util.ByteBuffer;
 import de.anomic.kelondro.util.DateFormatter;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.kelondro.util.MemoryControl;
 import de.anomic.plasma.plasmaParser;
@@ -96,6 +95,7 @@ import de.anomic.server.serverObjects;
 import de.anomic.server.serverSwitch;
 import de.anomic.server.servletProperties;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 import de.anomic.ymage.ymageMatrix;
 
 public final class httpdFileHandler {
diff --git a/source/de/anomic/http/httpdProxyHandler.java b/source/de/anomic/http/httpdProxyHandler.java
index 1f1b52ca3..77a5ecd45 100644
--- a/source/de/anomic/http/httpdProxyHandler.java
+++ b/source/de/anomic/http/httpdProxyHandler.java
@@ -76,7 +76,6 @@ import de.anomic.data.Blacklist;
 import de.anomic.htmlFilter.htmlFilterContentTransformer;
 import de.anomic.htmlFilter.htmlFilterTransformer;
 import de.anomic.kelondro.util.DateFormatter;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.plasma.plasmaHTCache;
 import de.anomic.plasma.plasmaParser;
@@ -87,6 +86,7 @@ import de.anomic.server.serverCore;
 import de.anomic.server.serverDomains;
 import de.anomic.server.serverObjects;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public final class httpdProxyHandler {
     
diff --git a/source/de/anomic/icap/icapd.java b/source/de/anomic/icap/icapd.java
index b4ebcfa8f..80c80e309 100644
--- a/source/de/anomic/icap/icapd.java
+++ b/source/de/anomic/icap/icapd.java
@@ -41,7 +41,6 @@ import de.anomic.http.httpRequestHeader;
 import de.anomic.http.httpResponseHeader;
 import de.anomic.http.httpdProxyCacheEntry;
 import de.anomic.kelondro.util.DateFormatter;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.plasma.plasmaHTCache;
 import de.anomic.plasma.plasmaParser;
@@ -51,6 +50,7 @@ import de.anomic.server.serverCore;
 import de.anomic.server.serverHandler;
 import de.anomic.server.serverCore.Session;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 /**
  * @author theli
diff --git a/source/de/anomic/kelondro/blob/BLOBArray.java b/source/de/anomic/kelondro/blob/BLOBArray.java
index 895b0809c..f1572692a 100755
--- a/source/de/anomic/kelondro/blob/BLOBArray.java
+++ b/source/de/anomic/kelondro/blob/BLOBArray.java
@@ -48,7 +48,7 @@ import de.anomic.kelondro.text.ReferenceFactory;
 import de.anomic.kelondro.text.ReferenceContainerCache.blobFileEntries;
 import de.anomic.kelondro.util.DateFormatter;
 import de.anomic.kelondro.util.FileUtils;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class BLOBArray implements BLOB {
 
diff --git a/source/de/anomic/kelondro/blob/BLOBHeapModifier.java b/source/de/anomic/kelondro/blob/BLOBHeapModifier.java
index 57a4105b8..bf83cbc23 100644
--- a/source/de/anomic/kelondro/blob/BLOBHeapModifier.java
+++ b/source/de/anomic/kelondro/blob/BLOBHeapModifier.java
@@ -34,7 +34,7 @@ import de.anomic.kelondro.io.CachedRandomAccess;
 import de.anomic.kelondro.order.ByteOrder;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.kelondro.util.MemoryControl;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class BLOBHeapModifier extends HeapReader implements BLOB {
  
diff --git a/source/de/anomic/kelondro/blob/HeapReader.java b/source/de/anomic/kelondro/blob/HeapReader.java
index d689f35ca..e91a09b30 100644
--- a/source/de/anomic/kelondro/blob/HeapReader.java
+++ b/source/de/anomic/kelondro/blob/HeapReader.java
@@ -41,7 +41,7 @@ import de.anomic.kelondro.order.CloneableIterator;
 import de.anomic.kelondro.order.RotateIterator;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.kelondro.util.MemoryControl;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class HeapReader {
 
diff --git a/source/de/anomic/kelondro/blob/HeapWriter.java b/source/de/anomic/kelondro/blob/HeapWriter.java
index d43b15bf0..3567b6d02 100644
--- a/source/de/anomic/kelondro/blob/HeapWriter.java
+++ b/source/de/anomic/kelondro/blob/HeapWriter.java
@@ -34,7 +34,7 @@ import de.anomic.kelondro.index.HandleMap;
 import de.anomic.kelondro.order.ByteOrder;
 import de.anomic.kelondro.order.Digest;
 import de.anomic.kelondro.util.FileUtils;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public final class HeapWriter  {
 
diff --git a/source/de/anomic/kelondro/index/Row.java b/source/de/anomic/kelondro/index/Row.java
index 4374c073c..0f23d866c 100644
--- a/source/de/anomic/kelondro/index/Row.java
+++ b/source/de/anomic/kelondro/index/Row.java
@@ -44,7 +44,7 @@ import de.anomic.kelondro.order.NaturalOrder;
 import de.anomic.kelondro.order.Order;
 import de.anomic.kelondro.util.ByteBuffer;
 import de.anomic.kelondro.util.kelondroException;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public final class Row {
    
diff --git a/source/de/anomic/kelondro/index/RowCollection.java b/source/de/anomic/kelondro/index/RowCollection.java
index f68199a5c..fcc556cc5 100644
--- a/source/de/anomic/kelondro/index/RowCollection.java
+++ b/source/de/anomic/kelondro/index/RowCollection.java
@@ -43,9 +43,9 @@ import de.anomic.kelondro.order.NaturalOrder;
 import de.anomic.kelondro.util.MemoryControl;
 import de.anomic.kelondro.util.NamePrefixThreadFactory;
 import de.anomic.kelondro.util.kelondroException;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.server.serverProcessor;
+import de.anomic.yacy.logging.Log;
 
 public class RowCollection implements Iterable<Row.Entry> {
 
diff --git a/source/de/anomic/kelondro/index/RowSet.java b/source/de/anomic/kelondro/index/RowSet.java
index 7eba1e91b..35f51ac53 100644
--- a/source/de/anomic/kelondro/index/RowSet.java
+++ b/source/de/anomic/kelondro/index/RowSet.java
@@ -32,7 +32,7 @@ import java.util.Random;
 import de.anomic.kelondro.order.Base64Order;
 import de.anomic.kelondro.order.CloneableIterator;
 import de.anomic.kelondro.order.NaturalOrder;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class RowSet extends RowCollection implements ObjectIndex, Iterable<Row.Entry> {
 
diff --git a/source/de/anomic/kelondro/order/Base64Order.java b/source/de/anomic/kelondro/order/Base64Order.java
index 8a127baca..4c2751e6b 100644
--- a/source/de/anomic/kelondro/order/Base64Order.java
+++ b/source/de/anomic/kelondro/order/Base64Order.java
@@ -30,7 +30,7 @@ package de.anomic.kelondro.order;
 import java.io.UnsupportedEncodingException;
 import java.util.Comparator;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class Base64Order extends AbstractOrder<byte[]> implements ByteOrder, Coding, Comparator<byte[]>, Cloneable {
 
diff --git a/source/de/anomic/kelondro/order/Digest.java b/source/de/anomic/kelondro/order/Digest.java
index bc9d8a8be..0ef791d75 100644
--- a/source/de/anomic/kelondro/order/Digest.java
+++ b/source/de/anomic/kelondro/order/Digest.java
@@ -44,7 +44,7 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.LinkedBlockingQueue;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 
 public class Digest {
diff --git a/source/de/anomic/kelondro/table/AbstractRecords.java b/source/de/anomic/kelondro/table/AbstractRecords.java
index 8ec80d14d..3d045a351 100644
--- a/source/de/anomic/kelondro/table/AbstractRecords.java
+++ b/source/de/anomic/kelondro/table/AbstractRecords.java
@@ -51,7 +51,7 @@ import de.anomic.kelondro.order.ByteOrder;
 import de.anomic.kelondro.order.NaturalOrder;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.kelondro.util.kelondroException;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public abstract class AbstractRecords implements RandomAccessRecords {
 
diff --git a/source/de/anomic/kelondro/table/EcoTable.java b/source/de/anomic/kelondro/table/EcoTable.java
index 136a8a3e3..d44218e4e 100644
--- a/source/de/anomic/kelondro/table/EcoTable.java
+++ b/source/de/anomic/kelondro/table/EcoTable.java
@@ -52,7 +52,7 @@ import de.anomic.kelondro.order.NaturalOrder;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.kelondro.util.MemoryControl;
 import de.anomic.kelondro.util.kelondroException;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 /*
  * The EcoIndex builds upon the EcoFS and tries to reduce the number of IO requests that the
diff --git a/source/de/anomic/kelondro/table/FlexWidthArray.java b/source/de/anomic/kelondro/table/FlexWidthArray.java
index 1f78eed87..7bf363ace 100644
--- a/source/de/anomic/kelondro/table/FlexWidthArray.java
+++ b/source/de/anomic/kelondro/table/FlexWidthArray.java
@@ -38,7 +38,7 @@ import de.anomic.kelondro.index.Row;
 import de.anomic.kelondro.order.NaturalOrder;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.kelondro.util.kelondroException;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class FlexWidthArray implements ObjectArray {
 
diff --git a/source/de/anomic/kelondro/table/SplitTable.java b/source/de/anomic/kelondro/table/SplitTable.java
index 8bb3078ee..d2e7a31c3 100644
--- a/source/de/anomic/kelondro/table/SplitTable.java
+++ b/source/de/anomic/kelondro/table/SplitTable.java
@@ -61,8 +61,8 @@ import de.anomic.kelondro.order.Order;
 import de.anomic.kelondro.order.StackIterator;
 import de.anomic.kelondro.util.DateFormatter;
 import de.anomic.kelondro.util.FileUtils;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.NamePrefixThreadFactory;
+import de.anomic.yacy.logging.Log;
 
 public class SplitTable implements ObjectIndex {
 
diff --git a/source/de/anomic/kelondro/table/Stack.java b/source/de/anomic/kelondro/table/Stack.java
index aa0b4a112..441f3c7a6 100644
--- a/source/de/anomic/kelondro/table/Stack.java
+++ b/source/de/anomic/kelondro/table/Stack.java
@@ -37,8 +37,8 @@ import java.util.StringTokenizer;
 import de.anomic.kelondro.index.Row;
 import de.anomic.kelondro.order.NaturalOrder;
 import de.anomic.kelondro.util.FileUtils;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.kelondroException;
+import de.anomic.yacy.logging.Log;
 
 public final class Stack extends FullRecords {
 
diff --git a/source/de/anomic/kelondro/table/Tree.java b/source/de/anomic/kelondro/table/Tree.java
index e0260e2fa..94293ed6f 100644
--- a/source/de/anomic/kelondro/table/Tree.java
+++ b/source/de/anomic/kelondro/table/Tree.java
@@ -52,7 +52,7 @@ import de.anomic.kelondro.order.CloneableIterator;
 import de.anomic.kelondro.order.NaturalOrder;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.kelondro.util.kelondroException;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class Tree extends CachedRecords implements ObjectIndex {
 	
diff --git a/source/de/anomic/kelondro/text/IODispatcher.java b/source/de/anomic/kelondro/text/IODispatcher.java
index ecc144071..c20dca314 100644
--- a/source/de/anomic/kelondro/text/IODispatcher.java
+++ b/source/de/anomic/kelondro/text/IODispatcher.java
@@ -31,8 +31,8 @@ import java.util.concurrent.Semaphore;
 
 import de.anomic.kelondro.blob.BLOBArray;
 import de.anomic.kelondro.index.Row;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.MemoryControl;
+import de.anomic.yacy.logging.Log;
 
 /**
  * this is a concurrent merger that can merge single files that are queued for merging.
diff --git a/source/de/anomic/kelondro/text/MetadataRepository.java b/source/de/anomic/kelondro/text/MetadataRepository.java
index 96601a15d..71e8e903f 100644
--- a/source/de/anomic/kelondro/text/MetadataRepository.java
+++ b/source/de/anomic/kelondro/text/MetadataRepository.java
@@ -52,8 +52,8 @@ import de.anomic.kelondro.table.SplitTable;
 import de.anomic.kelondro.text.metadataPrototype.URLMetadataRow;
 import de.anomic.kelondro.text.referencePrototype.WordReference;
 import de.anomic.kelondro.util.ScoreCluster;
-import de.anomic.kelondro.util.Log;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public final class MetadataRepository implements Iterable<byte[]> {
 
diff --git a/source/de/anomic/kelondro/text/ReferenceContainerArray.java b/source/de/anomic/kelondro/text/ReferenceContainerArray.java
index 255bbd717..fbfdc4bc7 100644
--- a/source/de/anomic/kelondro/text/ReferenceContainerArray.java
+++ b/source/de/anomic/kelondro/text/ReferenceContainerArray.java
@@ -36,7 +36,7 @@ import de.anomic.kelondro.index.Row;
 import de.anomic.kelondro.index.RowSet;
 import de.anomic.kelondro.order.ByteOrder;
 import de.anomic.kelondro.order.CloneableIterator;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public final class ReferenceContainerArray<ReferenceType extends Reference> {
 
diff --git a/source/de/anomic/kelondro/text/ReferenceContainerCache.java b/source/de/anomic/kelondro/text/ReferenceContainerCache.java
index f77e437d7..f5f23c1b1 100644
--- a/source/de/anomic/kelondro/text/ReferenceContainerCache.java
+++ b/source/de/anomic/kelondro/text/ReferenceContainerCache.java
@@ -42,9 +42,9 @@ import de.anomic.kelondro.order.Base64Order;
 import de.anomic.kelondro.order.ByteOrder;
 import de.anomic.kelondro.util.ByteArray;
 import de.anomic.kelondro.util.FileUtils;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.index.Row;
 import de.anomic.kelondro.index.RowSet;
+import de.anomic.yacy.logging.Log;
 
 public final class ReferenceContainerCache<ReferenceType extends Reference> extends AbstractIndex<ReferenceType> implements Index<ReferenceType>, IndexReader<ReferenceType>, Iterable<ReferenceContainer<ReferenceType>> {
 
diff --git a/source/de/anomic/kelondro/text/Segment.java b/source/de/anomic/kelondro/text/Segment.java
index acfd1ef46..c715ac78e 100644
--- a/source/de/anomic/kelondro/text/Segment.java
+++ b/source/de/anomic/kelondro/text/Segment.java
@@ -46,13 +46,13 @@ import de.anomic.kelondro.text.navigationPrototype.NavigationReferenceRow;
 import de.anomic.kelondro.text.referencePrototype.WordReference;
 import de.anomic.kelondro.text.referencePrototype.WordReferenceFactory;
 import de.anomic.kelondro.text.referencePrototype.WordReferenceRow;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaParserDocument;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.plasma.parser.Word;
 import de.anomic.plasma.parser.Condenser;
 import de.anomic.tools.iso639;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public final class Segment {
 
diff --git a/source/de/anomic/kelondro/util/FileUtils.java b/source/de/anomic/kelondro/util/FileUtils.java
index 9e4c76269..c8dcb4974 100644
--- a/source/de/anomic/kelondro/util/FileUtils.java
+++ b/source/de/anomic/kelondro/util/FileUtils.java
@@ -58,6 +58,7 @@ import java.util.zip.ZipOutputStream;
 
 import de.anomic.kelondro.index.Row;
 import de.anomic.kelondro.index.RowSet;
+import de.anomic.yacy.logging.Log;
 
 public final class FileUtils {
 
diff --git a/source/de/anomic/kelondro/util/Log.java b/source/de/anomic/kelondro/util/Log.java
deleted file mode 100644
index 24dfb2c7a..000000000
--- a/source/de/anomic/kelondro/util/Log.java
+++ /dev/null
@@ -1,217 +0,0 @@
-// serverLog.java 
-// -------------------------------------
-// (C) by Michael Peter Christen; mc@yacy.net
-// first published on http://www.anomic.de
-// Frankfurt, Germany, 2004
-// last major change: $LastChangedDate: 2009-01-30 14:48:11 +0000 (Fr, 30 Jan 2009) $ by $LastChangedBy: orbiter $
-// Revision: $LastChangedRevision: 5539 $
-//
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-package de.anomic.kelondro.util;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.logging.Level;
-import java.util.logging.LogManager;
-import java.util.logging.Logger;
-
-public final class Log {
-
-    // log-level categories
-    public static final int LOGLEVEL_ZERO    = Level.OFF.intValue(); // no output at all
-    public static final int LOGLEVEL_SEVERE  = Level.SEVERE.intValue(); // system-level error, internal cause, critical and not fixeable (i.e. inconsistency)
-    public static final int LOGLEVEL_WARNING = Level.WARNING.intValue(); // uncritical service failure, may require user activity (i.e. input required, wrong authorization)
-    public static final int LOGLEVEL_CONFIG  = Level.CONFIG.intValue(); // regular system status information (i.e. start-up messages)
-    public static final int LOGLEVEL_INFO    = Level.INFO.intValue(); // regular action information (i.e. any httpd request URL)
-    public static final int LOGLEVEL_FINE    = Level.FINE.intValue(); // in-function status debug output
-    public static final int LOGLEVEL_FINER    = Level.FINER.intValue(); // in-function status debug output
-    public static final int LOGLEVEL_FINEST    = Level.FINEST.intValue(); // in-function status debug output
-
-    // these categories are also present as character tokens
-    public static final char LOGTOKEN_ZERO    = 'Z';
-    public static final char LOGTOKEN_SEVERE  = 'E';
-    public static final char LOGTOKEN_WARNING = 'W';
-    public static final char LOGTOKEN_CONFIG  = 'S';
-    public static final char LOGTOKEN_INFO    = 'I';
-    public static final char LOGTOKEN_FINE    = 'D';
-    public static final char LOGTOKEN_FINER   = 'D';
-    public static final char LOGTOKEN_FINEST  = 'D';
-
-    private final Logger theLogger;
-
-    public Log(final String appName) {
-        this.theLogger = Logger.getLogger(appName);
-        //this.theLogger.setLevel(Level.FINEST); // set a default level
-    }
-
-    public void setLevel(final Level newLevel) {
-        this.theLogger.setLevel(newLevel);
-    }
-    
-    public void logSevere(final String message) {this.theLogger.severe(message);}
-    public void logSevere(final String message, final Throwable thrown) {this.theLogger.log(Level.SEVERE,message,thrown);}
-    public boolean isSevere() { return this.theLogger.isLoggable(Level.SEVERE); }
-
-    public void logWarning(final String message) {this.theLogger.warning(message);}
-    public void logWarning(final String message, final Throwable thrown) {this.theLogger.log(Level.WARNING,message,thrown);}
-    public boolean isWarning() { return this.theLogger.isLoggable(Level.WARNING); }
-    
-    public void logConfig(final String message) {this.theLogger.config(message);}
-    public void logConfig(final String message, final Throwable thrown) {this.theLogger.log(Level.CONFIG,message,thrown);}
-    public boolean isConfig() { return this.theLogger.isLoggable(Level.CONFIG); }
-
-    public void logInfo(final String message) {this.theLogger.info(message);}
-    public void logInfo(final String message, final Throwable thrown) {this.theLogger.log(Level.INFO,message,thrown);}
-    public boolean isInfo() { return this.theLogger.isLoggable(Level.INFO); }
-
-    public void logFine(final String message) {this.theLogger.fine(message);}
-    public void logFine(final String message, final Throwable thrown) {this.theLogger.log(Level.FINE,message,thrown);}
-    public boolean isFine() { return this.theLogger.isLoggable(Level.FINE); }
-
-    public void logFiner(final String message) {this.theLogger.finer(message);}
-    public void logFiner(final String message, final Throwable thrown) {this.theLogger.log(Level.FINER,message,thrown);}   
-    public boolean isFiner() { return this.theLogger.isLoggable(Level.FINER); }
-    
-    public void logFinest(final String message) {this.theLogger.finest(message);}
-    public void logFinest(final String message, final Throwable thrown) {this.theLogger.log(Level.FINEST,message,thrown);} 
-    public boolean isFinest() { return this.theLogger.isLoggable(Level.FINEST); }
-    
-    public boolean isLoggable(final Level level) {
-        return this.theLogger.isLoggable(level);
-    }
-    
-    
-    // static log messages: log everything
-    public static void logSevere(final String appName, final String message) {
-        Logger.getLogger(appName).severe(message);
-    }
-    public static void logSevere(final String appName, final String message, final Throwable thrown) {
-        Logger.getLogger(appName).log(Level.SEVERE,message,thrown);
-    }
-    public static boolean isSevere(final String appName) {
-        return Logger.getLogger(appName).isLoggable(Level.SEVERE);
-    }    
-    
-    public static void logWarning(final String appName, final String message) {
-        Logger.getLogger(appName).warning(message);
-    }
-    public static void logWarning(final String appName, final String message, final Throwable thrown) {
-        Logger.getLogger(appName).log(Level.WARNING,message,thrown);
-    }
-    public static boolean isWarning(final String appName) {
-        return Logger.getLogger(appName).isLoggable(Level.WARNING);
-    }      
-    
-    public static void logConfig(final String appName, final String message) {
-        Logger.getLogger(appName).config(message);
-    }
-    public static void logConfig(final String appName, final String message, final Throwable thrown) {
-        Logger.getLogger(appName).log(Level.CONFIG,message,thrown);
-    }    
-    public static boolean isConfig(final String appName) {
-        return Logger.getLogger(appName).isLoggable(Level.CONFIG);
-    }     
-    
-    public static void logInfo(final String appName, final String message) {
-        Logger.getLogger(appName).info(message);
-    }
-    public static void logInfo(final String appName, final String message, final Throwable thrown) {
-        Logger.getLogger(appName).log(Level.INFO,message,thrown);
-    }
-    public static boolean isInfo(final String appName) {
-        return Logger.getLogger(appName).isLoggable(Level.INFO);
-    }     
-    
-    public static void logFine(final String appName, final String message) {
-        Logger.getLogger(appName).fine(message);
-    }
-    public static void logFine(final String appName, final String message, final Throwable thrown) {
-        Logger.getLogger(appName).log(Level.FINE,message,thrown);
-    }
-    public static boolean isFine(final String appName) {
-        return Logger.getLogger(appName).isLoggable(Level.FINE);
-    } 
-    
-    public static void logFiner(final String appName, final String message) {
-        Logger.getLogger(appName).finer(message);
-    }
-    public static void logFiner(final String appName, final String message, final Throwable thrown) {
-        Logger.getLogger(appName).log(Level.FINER,message,thrown);
-    }
-    public static boolean isFiner(final String appName) {
-        return Logger.getLogger(appName).isLoggable(Level.FINER);
-    } 
-    
-    public static void logFinest(final String appName, final String message) {
-        Logger.getLogger(appName).finest(message);
-    }
-    public static void logFinest(final String appName, final String message, final Throwable thrown) {
-        Logger.getLogger(appName).log(Level.FINEST,message,thrown);
-    }    
-    public static boolean isFinest(final String appName) {
-        return Logger.getLogger(appName).isLoggable(Level.FINEST);
-    } 
-    
-    public static final void configureLogging(final File homePath, final File loggingConfigFile) throws SecurityException, FileNotFoundException, IOException {
-        FileInputStream fileIn = null;
-        try {
-            System.out.println("STARTUP: Trying to load logging configuration from file " + loggingConfigFile.toString());
-            fileIn = new FileInputStream(loggingConfigFile);
-
-            // loading the logger configuration from file
-            final LogManager logManager = LogManager.getLogManager();
-            logManager.readConfiguration(fileIn);
-
-            // creating the logging directory
-            final String logPattern = logManager.getProperty("java.util.logging.FileHandler.pattern");
-            int stripPos = logPattern.lastIndexOf('/');
-            if (stripPos < 0) stripPos = logPattern.lastIndexOf(File.pathSeparatorChar);
-            File log = new File(logPattern.substring(0, stripPos));
-            if (!log.isAbsolute()) log = new File(homePath, log.getPath());
-            if (!log.canRead()) log.mkdir();
-
-            // TODO: changing the pattern settings for the file handlers
-            
-            // generating the root logger
-            /*Logger logger =*/ Logger.getLogger("");
-
-//          System.setOut(new PrintStream(new LoggerOutputStream(Logger.getLogger("STDOUT"),Level.FINEST)));
-//          System.setErr(new PrintStream(new LoggerOutputStream(Logger.getLogger("STDERR"),Level.SEVERE)));
-        } finally {
-            if (fileIn != null) try {fileIn.close();}catch(final Exception e){}
-        }
-    }
-    
-    public static final String format(final String s, int n, final int fillChar) {
-        final int l = s.length();
-        if (l >= n) return s;
-        final StringBuilder sb = new StringBuilder(l + n);
-        for (final int i = l + n; i > n; n--) sb.insert(0, fillChar);
-        return sb.toString();
-    }
-    
-    public static final boolean allZero(final byte[] a) {
-        return allZero(a, 0, a.length);
-    }
-    
-    public static final boolean allZero(final byte[] a, final int astart, final int alength) {
-        for (int i = 0; i < alength; i++) if (a[astart + i] != 0) return false;
-        return true;
-    }
-
-}
diff --git a/source/de/anomic/kelondro/util/MemoryControl.java b/source/de/anomic/kelondro/util/MemoryControl.java
index ca4277b84..b2cef28fb 100644
--- a/source/de/anomic/kelondro/util/MemoryControl.java
+++ b/source/de/anomic/kelondro/util/MemoryControl.java
@@ -26,6 +26,7 @@
 package de.anomic.kelondro.util;
 
 import de.anomic.tools.Formatter;
+import de.anomic.yacy.logging.Log;
 
 /**
  * Use this to get information about memory usage or try to free some memory
diff --git a/source/de/anomic/language/identification/LanguageStatistics.java b/source/de/anomic/language/identification/LanguageStatistics.java
index b32f71bcd..ff6e14d64 100644
--- a/source/de/anomic/language/identification/LanguageStatistics.java
+++ b/source/de/anomic/language/identification/LanguageStatistics.java
@@ -33,7 +33,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 /**
  * This class can store statistical data of a language.
diff --git a/source/de/anomic/language/identification/LanguageStatisticsHolder.java b/source/de/anomic/language/identification/LanguageStatisticsHolder.java
index 319dd0150..1be45875b 100644
--- a/source/de/anomic/language/identification/LanguageStatisticsHolder.java
+++ b/source/de/anomic/language/identification/LanguageStatisticsHolder.java
@@ -28,7 +28,7 @@ import java.io.File;
 import java.io.FilenameFilter;
 import java.util.Vector;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 /**
  * This class loads and provides several language statistics to the system.
diff --git a/source/de/anomic/net/UPnP.java b/source/de/anomic/net/UPnP.java
index 40d921867..f2abdbd6f 100644
--- a/source/de/anomic/net/UPnP.java
+++ b/source/de/anomic/net/UPnP.java
@@ -36,9 +36,9 @@ import net.sbbi.upnp.DiscoveryEventHandler;
 import net.sbbi.upnp.devices.UPNPRootDevice;
 import net.sbbi.upnp.impls.InternetGatewayDevice;
 import net.sbbi.upnp.messages.UPNPResponseException;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.plasma.plasmaSwitchboardConstants;
+import de.anomic.yacy.logging.Log;
 
 public class UPnP {
 	
diff --git a/source/de/anomic/plasma/parser/AbstractParser.java b/source/de/anomic/plasma/parser/AbstractParser.java
index 620a5364e..3140ab047 100644
--- a/source/de/anomic/plasma/parser/AbstractParser.java
+++ b/source/de/anomic/plasma/parser/AbstractParser.java
@@ -33,11 +33,11 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaParser;
 import de.anomic.plasma.plasmaParserDocument;
 import de.anomic.server.serverThread;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 /**
  * New classes implementing the {@link de.anomic.plasma.parser.Parser} interface
diff --git a/source/de/anomic/plasma/parser/Parser.java b/source/de/anomic/plasma/parser/Parser.java
index c213ac620..7b8705c97 100644
--- a/source/de/anomic/plasma/parser/Parser.java
+++ b/source/de/anomic/plasma/parser/Parser.java
@@ -29,9 +29,9 @@ import java.io.File;
 import java.io.InputStream;
 import java.util.Hashtable;
 
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaParserDocument;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 /**
  * This interface defines a list of methods that needs to be implemented
diff --git a/source/de/anomic/plasma/parser/odt/odtParser.java b/source/de/anomic/plasma/parser/odt/odtParser.java
index 65e3e6798..3cd82547a 100644
--- a/source/de/anomic/plasma/parser/odt/odtParser.java
+++ b/source/de/anomic/plasma/parser/odt/odtParser.java
@@ -45,7 +45,6 @@ import com.catcode.odf.OpenDocumentTextInputStream;
 import de.anomic.crawler.HTTPLoader;
 import de.anomic.http.httpClient;
 import de.anomic.http.httpRequestHeader;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.plasma.plasmaParserDocument;
 import de.anomic.plasma.parser.AbstractParser;
@@ -53,6 +52,7 @@ import de.anomic.plasma.parser.Parser;
 import de.anomic.plasma.parser.ParserException;
 import de.anomic.server.serverCharBuffer;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public class odtParser extends AbstractParser implements Parser {
 
diff --git a/source/de/anomic/plasma/parser/sevenzip/SZParserExtractCallback.java b/source/de/anomic/plasma/parser/sevenzip/SZParserExtractCallback.java
index 9897f8687..442992e12 100644
--- a/source/de/anomic/plasma/parser/sevenzip/SZParserExtractCallback.java
+++ b/source/de/anomic/plasma/parser/sevenzip/SZParserExtractCallback.java
@@ -29,13 +29,13 @@ import java.io.OutputStream;
 import SevenZip.ArchiveExtractCallback;
 import SevenZip.Archive.IInArchive;
 import SevenZip.Archive.SevenZipEntry;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaParser;
 import de.anomic.plasma.plasmaParserDocument;
 import de.anomic.plasma.parser.AbstractParser;
 import de.anomic.plasma.parser.ParserException;
 import de.anomic.server.serverCachedFileOutputStream;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 // wrapper class to redirect output of standard ArchiveExtractCallback to serverLog
 // and parse the extracted content
diff --git a/source/de/anomic/plasma/plasmaHTCache.java b/source/de/anomic/plasma/plasmaHTCache.java
index 4e64ac7ca..8d9fc89cd 100644
--- a/source/de/anomic/plasma/plasmaHTCache.java
+++ b/source/de/anomic/plasma/plasmaHTCache.java
@@ -47,11 +47,11 @@ import de.anomic.kelondro.blob.BLOBCompressor;
 import de.anomic.kelondro.blob.BLOBHeap;
 import de.anomic.kelondro.blob.MapView;
 import de.anomic.kelondro.order.Base64Order;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.plasma.parser.Document;
 import de.anomic.yacy.yacySeedDB;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public final class plasmaHTCache {
     
diff --git a/source/de/anomic/plasma/plasmaParser.java b/source/de/anomic/plasma/plasmaParser.java
index 2698e4f17..499e7ad68 100644
--- a/source/de/anomic/plasma/plasmaParser.java
+++ b/source/de/anomic/plasma/plasmaParser.java
@@ -60,13 +60,13 @@ import de.anomic.htmlFilter.htmlFilterInputStream;
 import de.anomic.htmlFilter.htmlFilterWriter;
 import de.anomic.http.httpClient;
 import de.anomic.http.httpResponse;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.plasma.parser.Parser;
 import de.anomic.plasma.parser.ParserException;
 import de.anomic.plasma.parser.ParserInfo;
 import de.anomic.tools.ListDirs;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public final class plasmaParser {
     public static final String PARSER_MODE_PROXY         = "PROXY";
diff --git a/source/de/anomic/plasma/plasmaParserConfig.java b/source/de/anomic/plasma/plasmaParserConfig.java
index 282a556b6..9c971b5d3 100644
--- a/source/de/anomic/plasma/plasmaParserConfig.java
+++ b/source/de/anomic/plasma/plasmaParserConfig.java
@@ -33,9 +33,9 @@ import java.util.Hashtable;
 import java.util.Iterator;
 import java.util.Set;
 
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.parser.Parser;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public class plasmaParserConfig {
     /**
diff --git a/source/de/anomic/plasma/plasmaRankingDistribution.java b/source/de/anomic/plasma/plasmaRankingDistribution.java
index 30e6458b2..b96cb6d3e 100644
--- a/source/de/anomic/plasma/plasmaRankingDistribution.java
+++ b/source/de/anomic/plasma/plasmaRankingDistribution.java
@@ -30,12 +30,12 @@ import java.io.IOException;
 import java.util.Random;
 import java.util.StringTokenizer;
 
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.yacy.yacyClient;
 import de.anomic.yacy.yacySeed;
 import de.anomic.yacy.yacySeedDB;
 import de.anomic.yacy.yacyVersion;
+import de.anomic.yacy.logging.Log;
 
 public final class plasmaRankingDistribution {
 
diff --git a/source/de/anomic/plasma/plasmaSearchEvent.java b/source/de/anomic/plasma/plasmaSearchEvent.java
index 399f853b2..8701ebfd9 100644
--- a/source/de/anomic/plasma/plasmaSearchEvent.java
+++ b/source/de/anomic/plasma/plasmaSearchEvent.java
@@ -49,7 +49,6 @@ import de.anomic.kelondro.util.MemoryControl;
 import de.anomic.kelondro.util.SetTools;
 import de.anomic.kelondro.util.SortStack;
 import de.anomic.kelondro.util.SortStore;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.parser.Word;
 import de.anomic.plasma.parser.Condenser;
 import de.anomic.plasma.plasmaSearchRankingProcess.NavigatorEntry;
@@ -61,6 +60,7 @@ import de.anomic.yacy.yacySeed;
 import de.anomic.yacy.yacySeedDB;
 import de.anomic.yacy.yacyURL;
 import de.anomic.yacy.dht.FlatWordPartitionScheme;
+import de.anomic.yacy.logging.Log;
 
 public final class plasmaSearchEvent {
     
diff --git a/source/de/anomic/plasma/plasmaSearchImages.java b/source/de/anomic/plasma/plasmaSearchImages.java
index 1ce82afb8..2ee577ddc 100644
--- a/source/de/anomic/plasma/plasmaSearchImages.java
+++ b/source/de/anomic/plasma/plasmaSearchImages.java
@@ -31,9 +31,9 @@ import java.util.Iterator;
 import de.anomic.htmlFilter.htmlFilterContentScraper;
 import de.anomic.htmlFilter.htmlFilterImageEntry;
 import de.anomic.kelondro.util.DateFormatter;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.parser.ParserException;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public final class plasmaSearchImages {
 
diff --git a/source/de/anomic/plasma/plasmaSnippetCache.java b/source/de/anomic/plasma/plasmaSnippetCache.java
index 73bb1ffd8..8631c69e3 100644
--- a/source/de/anomic/plasma/plasmaSnippetCache.java
+++ b/source/de/anomic/plasma/plasmaSnippetCache.java
@@ -46,7 +46,6 @@ import de.anomic.kelondro.order.Base64Order;
 import de.anomic.kelondro.text.metadataPrototype.URLMetadataRow;
 import de.anomic.kelondro.util.ScoreCluster;
 import de.anomic.kelondro.util.SetTools;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.parser.Document;
 import de.anomic.plasma.parser.ParserException;
 import de.anomic.plasma.parser.Word;
@@ -54,6 +53,7 @@ import de.anomic.plasma.parser.Condenser;
 import de.anomic.search.Query;
 import de.anomic.yacy.yacySearch;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public class plasmaSnippetCache {
 
diff --git a/source/de/anomic/plasma/plasmaSwitchboard.java b/source/de/anomic/plasma/plasmaSwitchboard.java
index 6a777739b..42ce16b45 100644
--- a/source/de/anomic/plasma/plasmaSwitchboard.java
+++ b/source/de/anomic/plasma/plasmaSwitchboard.java
@@ -156,7 +156,6 @@ import de.anomic.kelondro.text.metadataPrototype.URLMetadataRow;
 import de.anomic.kelondro.order.Base64Order;
 import de.anomic.kelondro.util.DateFormatter;
 import de.anomic.kelondro.util.FileUtils;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.MemoryControl;
 import de.anomic.kelondro.util.SetTools;
 import de.anomic.net.UPnP;
@@ -194,6 +193,7 @@ import de.anomic.yacy.yacyRelease;
 import de.anomic.yacy.yacyVersion;
 import de.anomic.yacy.dht.Dispatcher;
 import de.anomic.yacy.dht.PeerSelection;
+import de.anomic.yacy.logging.Log;
 
 public final class plasmaSwitchboard extends serverAbstractSwitch<IndexingStack.QueueEntry> implements serverSwitch<IndexingStack.QueueEntry> {
     
diff --git a/source/de/anomic/plasma/plasmaWebStructure.java b/source/de/anomic/plasma/plasmaWebStructure.java
index 4af310904..b13a779b8 100644
--- a/source/de/anomic/plasma/plasmaWebStructure.java
+++ b/source/de/anomic/plasma/plasmaWebStructure.java
@@ -40,10 +40,10 @@ import java.util.TreeSet;
 import de.anomic.kelondro.order.Base64Order;
 import de.anomic.kelondro.order.MicroDate;
 import de.anomic.kelondro.util.DateFormatter;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.plasma.parser.Condenser;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public class plasmaWebStructure {
 
diff --git a/source/de/anomic/server/serverAbstractBlockingThread.java b/source/de/anomic/server/serverAbstractBlockingThread.java
index c7548aa14..7023656dd 100644
--- a/source/de/anomic/server/serverAbstractBlockingThread.java
+++ b/source/de/anomic/server/serverAbstractBlockingThread.java
@@ -25,7 +25,7 @@
 package de.anomic.server;
 
 import de.anomic.kelondro.util.MemoryControl;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public abstract class serverAbstractBlockingThread<J extends serverProcessorJob> extends serverAbstractThread implements serverBlockingThread<J> {
 
diff --git a/source/de/anomic/server/serverAbstractBusyThread.java b/source/de/anomic/server/serverAbstractBusyThread.java
index 37f14174e..7585ea3ff 100644
--- a/source/de/anomic/server/serverAbstractBusyThread.java
+++ b/source/de/anomic/server/serverAbstractBusyThread.java
@@ -27,7 +27,7 @@ package de.anomic.server;
 import java.net.SocketException;
 
 import de.anomic.kelondro.util.MemoryControl;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public abstract class serverAbstractBusyThread extends serverAbstractThread implements serverBusyThread {
 
diff --git a/source/de/anomic/server/serverAbstractSwitch.java b/source/de/anomic/server/serverAbstractSwitch.java
index 3eaafe69a..257a8ab11 100644
--- a/source/de/anomic/server/serverAbstractSwitch.java
+++ b/source/de/anomic/server/serverAbstractSwitch.java
@@ -31,8 +31,8 @@ import java.util.SortedMap;
 import java.util.TreeMap;
 import java.util.concurrent.LinkedBlockingQueue;
 
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
+import de.anomic.yacy.logging.Log;
 
 public abstract class serverAbstractSwitch<E> implements serverSwitch<E> {
     
diff --git a/source/de/anomic/server/serverAbstractThread.java b/source/de/anomic/server/serverAbstractThread.java
index e43887228..11a0d4c63 100644
--- a/source/de/anomic/server/serverAbstractThread.java
+++ b/source/de/anomic/server/serverAbstractThread.java
@@ -34,7 +34,7 @@ package de.anomic.server;
 
 import java.nio.channels.ClosedByInterruptException;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public abstract class serverAbstractThread extends Thread implements serverThread {
 
diff --git a/source/de/anomic/server/serverCore.java b/source/de/anomic/server/serverCore.java
index 5ee76cc70..ae8143dbb 100644
--- a/source/de/anomic/server/serverCore.java
+++ b/source/de/anomic/server/serverCore.java
@@ -58,9 +58,9 @@ import javax.net.ssl.SSLSocketFactory;
 
 import de.anomic.icap.icapd;
 import de.anomic.kelondro.util.ByteBuffer;
-import de.anomic.kelondro.util.Log;
 import de.anomic.tools.PKCS12Tool;
 import de.anomic.urlRedirector.urlRedirectord;
+import de.anomic.yacy.logging.Log;
 
 public final class serverCore extends serverAbstractBusyThread implements serverBusyThread {
 
diff --git a/source/de/anomic/server/serverInstantBlockingThread.java b/source/de/anomic/server/serverInstantBlockingThread.java
index 5658b4c5b..4e27ef4a2 100644
--- a/source/de/anomic/server/serverInstantBlockingThread.java
+++ b/source/de/anomic/server/serverInstantBlockingThread.java
@@ -28,7 +28,7 @@ import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.concurrent.ConcurrentHashMap;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class serverInstantBlockingThread<J extends serverProcessorJob> extends serverAbstractBlockingThread<J> implements serverBlockingThread<J> {
 
diff --git a/source/de/anomic/server/serverInstantBusyThread.java b/source/de/anomic/server/serverInstantBusyThread.java
index 26b708ce5..a955a4663 100644
--- a/source/de/anomic/server/serverInstantBusyThread.java
+++ b/source/de/anomic/server/serverInstantBusyThread.java
@@ -25,7 +25,7 @@ import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.util.TreeMap;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public final class serverInstantBusyThread extends serverAbstractBusyThread implements serverBusyThread {
     
diff --git a/source/de/anomic/server/serverProcessor.java b/source/de/anomic/server/serverProcessor.java
index 92d96494b..44f77e6b1 100644
--- a/source/de/anomic/server/serverProcessor.java
+++ b/source/de/anomic/server/serverProcessor.java
@@ -33,8 +33,8 @@ import java.util.concurrent.Executors;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
 
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.NamePrefixThreadFactory;
+import de.anomic.yacy.logging.Log;
 
 public class serverProcessor<J extends serverProcessorJob> {
 
diff --git a/source/de/anomic/server/serverSwitch.java b/source/de/anomic/server/serverSwitch.java
index 3e0392c7c..57fb67189 100644
--- a/source/de/anomic/server/serverSwitch.java
+++ b/source/de/anomic/server/serverSwitch.java
@@ -36,7 +36,7 @@ import java.util.Iterator;
 import java.util.Map;
 import java.util.SortedMap;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public interface serverSwitch<E> {
 
diff --git a/source/de/anomic/server/serverSwitchAbstractAction.java b/source/de/anomic/server/serverSwitchAbstractAction.java
index bb982d075..ea294c766 100644
--- a/source/de/anomic/server/serverSwitchAbstractAction.java
+++ b/source/de/anomic/server/serverSwitchAbstractAction.java
@@ -21,7 +21,7 @@
 
 package de.anomic.server;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public abstract class serverSwitchAbstractAction {
 
diff --git a/source/de/anomic/server/serverSwitchAction.java b/source/de/anomic/server/serverSwitchAction.java
index b7b3892d9..3be0fc891 100644
--- a/source/de/anomic/server/serverSwitchAction.java
+++ b/source/de/anomic/server/serverSwitchAction.java
@@ -21,7 +21,7 @@
 
 package de.anomic.server;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public interface serverSwitchAction {
 
diff --git a/source/de/anomic/server/serverSystem.java b/source/de/anomic/server/serverSystem.java
index 2576f5e65..967e7fd1e 100644
--- a/source/de/anomic/server/serverSystem.java
+++ b/source/de/anomic/server/serverSystem.java
@@ -33,9 +33,9 @@ import java.util.List;
 import java.util.Properties;
 import java.util.Vector;
 
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.tools.consoleInterface;
+import de.anomic.yacy.logging.Log;
 
 public final class serverSystem {
 
diff --git a/source/de/anomic/server/serverThread.java b/source/de/anomic/server/serverThread.java
index bf9b29d95..ff96a5948 100644
--- a/source/de/anomic/server/serverThread.java
+++ b/source/de/anomic/server/serverThread.java
@@ -24,7 +24,7 @@
 
 package de.anomic.server;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public interface serverThread {
     
diff --git a/source/de/anomic/tools/DidYouMean.java b/source/de/anomic/tools/DidYouMean.java
index 8bb7afffc..cab32cf41 100644
--- a/source/de/anomic/tools/DidYouMean.java
+++ b/source/de/anomic/tools/DidYouMean.java
@@ -7,8 +7,8 @@ import java.util.concurrent.LinkedBlockingQueue;
 
 import de.anomic.kelondro.text.IndexCell;
 import de.anomic.kelondro.text.referencePrototype.WordReference;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.parser.Word;
+import de.anomic.yacy.logging.Log;
 
 // People make mistakes when they type words.  
 // The most common mistakes are the four categories listed below:
diff --git a/source/de/anomic/tools/consoleInterface.java b/source/de/anomic/tools/consoleInterface.java
index 039a11d59..35d80d442 100755
--- a/source/de/anomic/tools/consoleInterface.java
+++ b/source/de/anomic/tools/consoleInterface.java
@@ -28,7 +28,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Semaphore;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class consoleInterface extends Thread
 {
diff --git a/source/de/anomic/tools/diskUsage.java b/source/de/anomic/tools/diskUsage.java
index 39411f5e0..ec179e0e8 100644
--- a/source/de/anomic/tools/diskUsage.java
+++ b/source/de/anomic/tools/diskUsage.java
@@ -35,7 +35,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class diskUsage {
     
diff --git a/source/de/anomic/tools/gzip.java b/source/de/anomic/tools/gzip.java
index 70de93166..4238d003a 100644
--- a/source/de/anomic/tools/gzip.java
+++ b/source/de/anomic/tools/gzip.java
@@ -34,7 +34,7 @@ import java.io.OutputStream;
 import java.util.zip.GZIPInputStream;
 import java.util.zip.GZIPOutputStream;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class gzip {
 
diff --git a/source/de/anomic/tools/mediawikiIndex.java b/source/de/anomic/tools/mediawikiIndex.java
index 4bdb17f9e..b4149e84b 100644
--- a/source/de/anomic/tools/mediawikiIndex.java
+++ b/source/de/anomic/tools/mediawikiIndex.java
@@ -59,11 +59,11 @@ import java.util.concurrent.TimeoutException;
 import de.anomic.data.wiki.wikiCode;
 import de.anomic.data.wiki.wikiParser;
 import de.anomic.kelondro.util.ByteBuffer;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaParser;
 import de.anomic.plasma.plasmaParserDocument;
 import de.anomic.plasma.parser.ParserException;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 /*
  * this class provides data structures to read a mediawiki dump file in xml format
diff --git a/source/de/anomic/tools/tarTools.java b/source/de/anomic/tools/tarTools.java
index 46cd610a8..d2b68ac6c 100644
--- a/source/de/anomic/tools/tarTools.java
+++ b/source/de/anomic/tools/tarTools.java
@@ -35,7 +35,7 @@ import java.util.zip.GZIPInputStream;
 import com.ice.tar.TarEntry;
 import com.ice.tar.TarInputStream;
 
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class tarTools {
 	
diff --git a/source/de/anomic/urlRedirector/urlRedirectord.java b/source/de/anomic/urlRedirector/urlRedirectord.java
index 00c167350..9c4facb6a 100644
--- a/source/de/anomic/urlRedirector/urlRedirectord.java
+++ b/source/de/anomic/urlRedirector/urlRedirectord.java
@@ -12,13 +12,13 @@ import de.anomic.crawler.CrawlProfile;
 import de.anomic.data.userDB;
 import de.anomic.http.httpClient;
 import de.anomic.http.httpResponseHeader;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaParser;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.server.serverCore;
 import de.anomic.server.serverHandler;
 import de.anomic.server.serverCore.Session;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public class urlRedirectord implements serverHandler, Cloneable {
     
diff --git a/source/de/anomic/xml/RSSReader.java b/source/de/anomic/xml/RSSReader.java
index 799ed555a..98bc93a90 100644
--- a/source/de/anomic/xml/RSSReader.java
+++ b/source/de/anomic/xml/RSSReader.java
@@ -40,7 +40,7 @@ import org.xml.sax.helpers.DefaultHandler;
 
 import de.anomic.content.RSSMessage;
 import de.anomic.kelondro.util.ByteBuffer;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class RSSReader extends DefaultHandler {
     
diff --git a/source/de/anomic/xml/opensearchdescriptionReader.java b/source/de/anomic/xml/opensearchdescriptionReader.java
index b23cf2471..16ec7cfa6 100644
--- a/source/de/anomic/xml/opensearchdescriptionReader.java
+++ b/source/de/anomic/xml/opensearchdescriptionReader.java
@@ -41,7 +41,7 @@ import org.xml.sax.SAXException;
 import org.xml.sax.helpers.DefaultHandler;
 
 import de.anomic.kelondro.util.ByteBuffer;
-import de.anomic.kelondro.util.Log;
+import de.anomic.yacy.logging.Log;
 
 public class opensearchdescriptionReader extends DefaultHandler {
     
diff --git a/source/de/anomic/yacy/dht/Dispatcher.java b/source/de/anomic/yacy/dht/Dispatcher.java
index e154d849f..db088144b 100755
--- a/source/de/anomic/yacy/dht/Dispatcher.java
+++ b/source/de/anomic/yacy/dht/Dispatcher.java
@@ -39,10 +39,10 @@ import de.anomic.kelondro.text.MetadataRepository;
 import de.anomic.kelondro.text.Segment;
 import de.anomic.kelondro.text.referencePrototype.WordReference;
 import de.anomic.kelondro.text.referencePrototype.WordReferenceRow;
-import de.anomic.kelondro.util.Log;
 import de.anomic.server.serverProcessor;
 import de.anomic.yacy.yacySeed;
 import de.anomic.yacy.yacySeedDB;
+import de.anomic.yacy.logging.Log;
 
 public class Dispatcher {
 
diff --git a/source/de/anomic/yacy/dht/PeerSelection.java b/source/de/anomic/yacy/dht/PeerSelection.java
index 6f680f55b..76b0780bc 100755
--- a/source/de/anomic/yacy/dht/PeerSelection.java
+++ b/source/de/anomic/yacy/dht/PeerSelection.java
@@ -30,7 +30,6 @@ import java.util.HashSet;
 import java.util.Iterator;
 
 import de.anomic.kelondro.util.DateFormatter;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.kelondroException;
 import de.anomic.kelondro.order.Base64Order;
 import de.anomic.kelondro.order.Digest;
@@ -40,6 +39,7 @@ import de.anomic.yacy.yacySeed;
 import de.anomic.yacy.yacySeedDB;
 import de.anomic.yacy.yacyVersion;
 import de.anomic.yacy.dht.PartitionScheme;
+import de.anomic.yacy.logging.Log;
 
 
 /*
diff --git a/source/de/anomic/yacy/dht/Transmission.java b/source/de/anomic/yacy/dht/Transmission.java
index 50d252b6a..866ae42fd 100644
--- a/source/de/anomic/yacy/dht/Transmission.java
+++ b/source/de/anomic/yacy/dht/Transmission.java
@@ -38,11 +38,11 @@ import de.anomic.kelondro.text.MetadataRepository;
 import de.anomic.kelondro.text.Segment;
 import de.anomic.kelondro.text.metadataPrototype.URLMetadataRow;
 import de.anomic.kelondro.text.referencePrototype.WordReference;
-import de.anomic.kelondro.util.Log;
 import de.anomic.server.serverProcessorJob;
 import de.anomic.yacy.yacyClient;
 import de.anomic.yacy.yacySeed;
 import de.anomic.yacy.yacySeedDB;
+import de.anomic.yacy.logging.Log;
 
 public class Transmission {
 
diff --git a/source/de/anomic/yacy/logging/Log.java b/source/de/anomic/yacy/logging/Log.java
new file mode 100644
index 000000000..da8b9ff75
--- /dev/null
+++ b/source/de/anomic/yacy/logging/Log.java
@@ -0,0 +1,395 @@
+// Log.java 
+// -------------------------------------
+// (C) by Michael Peter Christen; mc@yacy.net
+// first published on http://www.anomic.de
+// Frankfurt, Germany, 2004
+// last major change: $LastChangedDate: 2009-01-30 14:48:11 +0000 (Fr, 30 Jan 2009) $ by $LastChangedBy: orbiter $
+// Revision: $LastChangedRevision: 5539 $
+//
+// This program is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 2 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+package de.anomic.yacy.logging;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.logging.Level;
+import java.util.logging.LogManager;
+import java.util.logging.Logger;
+
+public final class Log {
+
+    // log-level categories
+    public static final int LOGLEVEL_ZERO    = Level.OFF.intValue(); // no output at all
+    public static final int LOGLEVEL_SEVERE  = Level.SEVERE.intValue(); // system-level error, internal cause, critical and not fixeable (i.e. inconsistency)
+    public static final int LOGLEVEL_WARNING = Level.WARNING.intValue(); // uncritical service failure, may require user activity (i.e. input required, wrong authorization)
+    public static final int LOGLEVEL_CONFIG  = Level.CONFIG.intValue(); // regular system status information (i.e. start-up messages)
+    public static final int LOGLEVEL_INFO    = Level.INFO.intValue(); // regular action information (i.e. any httpd request URL)
+    public static final int LOGLEVEL_FINE    = Level.FINE.intValue(); // in-function status debug output
+    public static final int LOGLEVEL_FINER    = Level.FINER.intValue(); // in-function status debug output
+    public static final int LOGLEVEL_FINEST    = Level.FINEST.intValue(); // in-function status debug output
+
+    // these categories are also present as character tokens
+    public static final char LOGTOKEN_ZERO    = 'Z';
+    public static final char LOGTOKEN_SEVERE  = 'E';
+    public static final char LOGTOKEN_WARNING = 'W';
+    public static final char LOGTOKEN_CONFIG  = 'S';
+    public static final char LOGTOKEN_INFO    = 'I';
+    public static final char LOGTOKEN_FINE    = 'D';
+    public static final char LOGTOKEN_FINER   = 'D';
+    public static final char LOGTOKEN_FINEST  = 'D';
+
+    private final Logger theLogger;
+
+    public Log(final String appName) {
+        this.theLogger = Logger.getLogger(appName);
+        //this.theLogger.setLevel(Level.FINEST); // set a default level
+    }
+
+    public void setLevel(final Level newLevel) {
+        this.theLogger.setLevel(newLevel);
+    }
+    
+    public void logSevere(final String message) {
+        enQueueLog(this.theLogger, Level.SEVERE, message);
+    }
+    
+    public void logSevere(final String message, final Throwable thrown) {
+        enQueueLog(this.theLogger, Level.SEVERE, message, thrown);
+    }
+    
+    public boolean isSevere() {
+        return this.theLogger.isLoggable(Level.SEVERE);
+    }
+
+    public void logWarning(final String message) {
+        enQueueLog(this.theLogger, Level.WARNING, message);
+    }
+    
+    public void logWarning(final String message, final Throwable thrown) {
+        enQueueLog(this.theLogger, Level.WARNING, message, thrown);
+    }
+    
+    public boolean isWarning() {
+        return this.theLogger.isLoggable(Level.WARNING);
+    }
+    
+    public void logConfig(final String message) {
+        enQueueLog(this.theLogger, Level.CONFIG, message);
+    }
+    
+    public void logConfig(final String message, final Throwable thrown) {
+        enQueueLog(this.theLogger, Level.CONFIG, message, thrown);
+    }
+    
+    public boolean isConfig() {
+        return this.theLogger.isLoggable(Level.CONFIG);
+    }
+
+    public void logInfo(final String message) {
+        enQueueLog(this.theLogger, Level.INFO, message);
+    }
+    
+    public void logInfo(final String message, final Throwable thrown) {
+        enQueueLog(this.theLogger, Level.INFO, message, thrown);
+    }
+    
+    public boolean isInfo() {
+        return this.theLogger.isLoggable(Level.INFO);
+    }
+
+    public void logFine(final String message) {
+        enQueueLog(this.theLogger, Level.FINE, message);
+    }
+    
+    public void logFine(final String message, final Throwable thrown) {
+        enQueueLog(this.theLogger, Level.FINE, message, thrown);
+    }
+    
+    public boolean isFine() {
+        return this.theLogger.isLoggable(Level.FINE);
+    }
+
+    public void logFiner(final String message) {
+        enQueueLog(this.theLogger, Level.FINER, message);
+    }
+    
+    public void logFiner(final String message, final Throwable thrown) {
+        enQueueLog(this.theLogger, Level.FINER, message, thrown);
+    }
+    
+    public boolean isFiner() { 
+       return this.theLogger.isLoggable(Level.FINER);
+    }
+    
+    public void logFinest(final String message) {
+        enQueueLog(this.theLogger, Level.FINEST, message);
+    }
+    
+    public void logFinest(final String message, final Throwable thrown) {
+        enQueueLog(this.theLogger, Level.FINEST, message, thrown);
+    }
+    
+    public boolean isFinest() {
+        return this.theLogger.isLoggable(Level.FINEST);
+    }
+    
+    public boolean isLoggable(final Level level) {
+        return this.theLogger.isLoggable(level);
+    }
+    
+    
+    // static log messages
+    public static void logSevere(final String appName, final String message) {
+        enQueueLog(appName, Level.SEVERE, message);
+    }
+    public static void logSevere(final String appName, final String message, final Throwable thrown) {
+        enQueueLog(appName, Level.SEVERE, message, thrown);
+    }
+    
+    public static void logWarning(final String appName, final String message) {
+        enQueueLog(appName, Level.WARNING, message);
+    }
+    public static void logWarning(final String appName, final String message, final Throwable thrown) {
+        enQueueLog(appName, Level.WARNING, message, thrown);
+    }
+    
+    public static void logConfig(final String appName, final String message) {
+        enQueueLog(appName, Level.CONFIG, message);
+    }
+    public static void logConfig(final String appName, final String message, final Throwable thrown) {
+        enQueueLog(appName, Level.CONFIG, message, thrown);
+    }    
+    
+    public static void logInfo(final String appName, final String message) {
+        enQueueLog(appName, Level.INFO, message);
+    }
+    public static void logInfo(final String appName, final String message, final Throwable thrown) {
+        enQueueLog(appName, Level.INFO, message, thrown);
+    }
+    
+    public static void logFine(final String appName, final String message) {
+        enQueueLog(appName, Level.FINE, message);
+    }
+    public static void logFine(final String appName, final String message, final Throwable thrown) {
+        enQueueLog(appName, Level.FINE, message, thrown);
+    }
+    public static boolean isFine(final String appName) {
+        return Logger.getLogger(appName).isLoggable(Level.FINE);
+    } 
+    
+    public static void logFiner(final String appName, final String message) {
+        enQueueLog(appName, Level.FINER, message);
+    }
+    public static void logFiner(final String appName, final String message, final Throwable thrown) {
+        enQueueLog(appName, Level.FINER, message, thrown);
+    }
+    
+    public static void logFinest(final String appName, final String message) {
+        enQueueLog(appName, Level.FINEST, message);
+    }
+    public static void logFinest(final String appName, final String message, final Throwable thrown) {
+        enQueueLog(appName, Level.FINEST, message, thrown);
+    }    
+    public static boolean isFinest(final String appName) {
+        return Logger.getLogger(appName).isLoggable(Level.FINEST);
+    }
+    
+    private static void enQueueLog(Logger logger, Level level, String message, final Throwable thrown) {
+        if (logRunnerThread == null || !logRunnerThread.isAlive()) {
+            logger.log(level, message, thrown);
+        } else {
+            try {
+                logQueue.put(new logEntry(logger, level, message, thrown));
+            } catch (InterruptedException e) {
+                logger.log(level, message, thrown);
+            }
+        }
+    }
+    
+    private static void enQueueLog(Logger logger, Level level, String message) {
+        if (logRunnerThread == null || !logRunnerThread.isAlive()) {
+            logger.log(level, message);
+        } else {
+            try {
+                logQueue.put(new logEntry(logger, level, message));
+            } catch (InterruptedException e) {
+                logger.log(level, message);
+            }
+        }
+    }
+    
+    private static void enQueueLog(String loggername, Level level, String message, final Throwable thrown) {
+        if (logRunnerThread == null || !logRunnerThread.isAlive()) {
+            Logger.getLogger(loggername).log(level, message, thrown);
+        } else {
+            try {
+                logQueue.put(new logEntry(loggername, level, message, thrown));
+            } catch (InterruptedException e) {
+                Logger.getLogger(loggername).log(level, message, thrown);
+            }
+        }
+    }
+    
+    private static void enQueueLog(String loggername, Level level, String message) {
+        if (logRunnerThread == null || !logRunnerThread.isAlive()) {
+            Logger.getLogger(loggername).log(level, message);
+        } else {
+            try {
+                logQueue.put(new logEntry(loggername, level, message));
+            } catch (InterruptedException e) {
+                Logger.getLogger(loggername).log(level, message);
+            }
+        }
+    }
+    
+    protected static class logEntry {
+        public final Logger logger;
+        public final String loggername;
+        public final Level level;
+        public final String message;
+        public final Throwable thrown;
+        public logEntry(Logger logger, Level level, String message, final Throwable thrown) {
+            this.logger = logger;
+            this.loggername = null;
+            this.level = level;
+            this.message = message;
+            this.thrown = thrown;
+        }
+        public logEntry(Logger logger, Level level, String message) {
+            this.logger = logger;
+            this.loggername = null;
+            this.level = level;
+            this.message = message;
+            this.thrown = null;
+        }
+        public logEntry(String loggername, Level level, String message, final Throwable thrown) {
+            this.logger = null;
+            this.loggername = loggername;
+            this.level = level;
+            this.message = message;
+            this.thrown = thrown;
+        }
+        public logEntry(String loggername, Level level, String message) {
+            this.logger = null;
+            this.loggername = loggername;
+            this.level = level;
+            this.message = message;
+            this.thrown = null;
+        }
+        public logEntry() {
+            this.logger = null;
+            this.loggername = null;
+            this.level = null;
+            this.message = null;
+            this.thrown = null;
+        }
+    }
+    
+    private static logEntry poison = new logEntry();
+    private static BlockingQueue<logEntry> logQueue = new LinkedBlockingQueue<logEntry>();
+    private static logRunner logRunnerThread = null;
+    
+    protected static class logRunner extends Thread {
+        
+        public void run() {
+            logEntry entry;
+            try {
+                while ((entry = logQueue.take()) != poison) {
+                    if (entry.logger == null) {
+                        assert entry.loggername != null;
+                        if (entry.thrown == null) {
+                            Logger.getLogger(entry.loggername).log(entry.level, entry.message);
+                        } else {
+                            Logger.getLogger(entry.loggername).log(entry.level, entry.message, entry.thrown);
+                        }
+                    } else {
+                        assert entry.loggername == null;
+                        if (entry.thrown == null) {
+                            entry.logger.log(entry.level, entry.message);
+                        } else {
+                            entry.logger.log(entry.level, entry.message, entry.thrown);
+                        }
+                    }
+                }
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            
+        }
+    }
+    
+    public static final void configureLogging(final File homePath, final File loggingConfigFile) throws SecurityException, FileNotFoundException, IOException {
+        FileInputStream fileIn = null;
+        try {
+            System.out.println("STARTUP: Trying to load logging configuration from file " + loggingConfigFile.toString());
+            fileIn = new FileInputStream(loggingConfigFile);
+
+            // loading the logger configuration from file
+            final LogManager logManager = LogManager.getLogManager();
+            logManager.readConfiguration(fileIn);
+
+            // creating the logging directory
+            final String logPattern = logManager.getProperty("java.util.logging.FileHandler.pattern");
+            int stripPos = logPattern.lastIndexOf('/');
+            if (stripPos < 0) stripPos = logPattern.lastIndexOf(File.pathSeparatorChar);
+            File log = new File(logPattern.substring(0, stripPos));
+            if (!log.isAbsolute()) log = new File(homePath, log.getPath());
+            if (!log.canRead()) log.mkdir();
+
+            // TODO: changing the pattern settings for the file handlers
+            
+            // generating the root logger
+            /*Logger logger =*/ Logger.getLogger("");
+
+//          System.setOut(new PrintStream(new LoggerOutputStream(Logger.getLogger("STDOUT"), Level.FINEST)));
+//          System.setErr(new PrintStream(new LoggerOutputStream(Logger.getLogger("STDERR"), Level.SEVERE)));
+            logRunnerThread = new logRunner();
+            logRunnerThread.start();
+        } finally {
+            if (fileIn != null) try {fileIn.close();}catch(final Exception e){}
+        }
+    }
+    
+    public static void shutdown() {
+        if (logRunnerThread == null || !logRunnerThread.isAlive()) return;
+        try {
+            logQueue.put(poison);
+            logRunnerThread.join(10000);
+        } catch (InterruptedException e) {
+        }
+    }
+    
+    public static final String format(final String s, int n, final int fillChar) {
+        final int l = s.length();
+        if (l >= n) return s;
+        final StringBuilder sb = new StringBuilder(l + n);
+        for (final int i = l + n; i > n; n--) sb.insert(0, fillChar);
+        return sb.toString();
+    }
+    
+    public static final boolean allZero(final byte[] a) {
+        return allZero(a, 0, a.length);
+    }
+    
+    public static final boolean allZero(final byte[] a, final int astart, final int alength) {
+        for (int i = 0; i < alength; i++) if (a[astart + i] != 0) return false;
+        return true;
+    }
+
+}
diff --git a/source/de/anomic/yacy/logging/SimpleLogFormatter.java b/source/de/anomic/yacy/logging/SimpleLogFormatter.java
index f6601e9ba..611949c34 100644
--- a/source/de/anomic/yacy/logging/SimpleLogFormatter.java
+++ b/source/de/anomic/yacy/logging/SimpleLogFormatter.java
@@ -33,7 +33,6 @@ import java.util.Date;
 import java.util.logging.LogRecord;
 import java.util.logging.SimpleFormatter;
 
-import de.anomic.kelondro.util.Log;
 
 public class SimpleLogFormatter extends SimpleFormatter {
 
diff --git a/source/de/anomic/yacy/yacyCore.java b/source/de/anomic/yacy/yacyCore.java
index 4944707cf..25a612fa3 100644
--- a/source/de/anomic/yacy/yacyCore.java
+++ b/source/de/anomic/yacy/yacyCore.java
@@ -53,12 +53,12 @@ import java.util.Map;
 
 import de.anomic.content.RSSMessage;
 import de.anomic.kelondro.util.DateFormatter;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.server.serverCore;
 import de.anomic.server.serverSemaphore;
 import de.anomic.xml.RSSFeed;
 import de.anomic.yacy.dht.PeerSelection;
+import de.anomic.yacy.logging.Log;
 
 public class yacyCore {
 
diff --git a/source/de/anomic/yacy/yacyPeerActions.java b/source/de/anomic/yacy/yacyPeerActions.java
index 7dd0bf70e..e514aa8da 100644
--- a/source/de/anomic/yacy/yacyPeerActions.java
+++ b/source/de/anomic/yacy/yacyPeerActions.java
@@ -29,9 +29,9 @@ import java.util.HashMap;
 
 import de.anomic.content.RSSMessage;
 import de.anomic.kelondro.util.DateFormatter;
-import de.anomic.kelondro.util.Log;
 import de.anomic.server.serverCodings;
 import de.anomic.xml.RSSFeed;
+import de.anomic.yacy.logging.Log;
 
 public class yacyPeerActions {
    
diff --git a/source/de/anomic/yacy/yacyRelease.java b/source/de/anomic/yacy/yacyRelease.java
index ba6177bd6..57e4db2a7 100644
--- a/source/de/anomic/yacy/yacyRelease.java
+++ b/source/de/anomic/yacy/yacyRelease.java
@@ -51,7 +51,6 @@ import de.anomic.http.httpResponse;
 import de.anomic.http.httpResponseHeader;
 import de.anomic.http.httpRequestHeader;
 import de.anomic.kelondro.order.Base64Order;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.server.serverCharBuffer;
@@ -60,6 +59,7 @@ import de.anomic.server.serverSystem;
 import de.anomic.tools.CryptoLib;
 import de.anomic.tools.SignatureOutputStream;
 import de.anomic.tools.tarTools;
+import de.anomic.yacy.logging.Log;
 
 public final class yacyRelease extends yacyVersion {
 
diff --git a/source/de/anomic/yacy/yacySearch.java b/source/de/anomic/yacy/yacySearch.java
index 235f5f449..fa5c6b525 100644
--- a/source/de/anomic/yacy/yacySearch.java
+++ b/source/de/anomic/yacy/yacySearch.java
@@ -36,11 +36,11 @@ import de.anomic.data.Blacklist;
 import de.anomic.kelondro.order.Bitfield;
 import de.anomic.kelondro.text.Segment;
 import de.anomic.kelondro.util.ScoreCluster;
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaSearchRankingProcess;
 import de.anomic.plasma.plasmaSearchRankingProfile;
 import de.anomic.search.Query;
 import de.anomic.yacy.dht.PeerSelection;
+import de.anomic.yacy.logging.Log;
 
 public class yacySearch extends Thread {
 
diff --git a/source/de/anomic/yacy/yacySeedDB.java b/source/de/anomic/yacy/yacySeedDB.java
index 63eeceebd..b66e890e7 100644
--- a/source/de/anomic/yacy/yacySeedDB.java
+++ b/source/de/anomic/yacy/yacySeedDB.java
@@ -50,7 +50,6 @@ import de.anomic.kelondro.blob.BLOBHeap;
 import de.anomic.kelondro.blob.MapDataMining;
 import de.anomic.kelondro.order.Base64Order;
 import de.anomic.kelondro.util.kelondroException;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.plasma.plasmaHTCache;
 import de.anomic.server.serverCore;
@@ -58,6 +57,7 @@ import de.anomic.server.serverDomains;
 import de.anomic.server.serverSwitch;
 import de.anomic.yacy.dht.PartitionScheme;
 import de.anomic.yacy.dht.VerticalWordPartitionScheme;
+import de.anomic.yacy.logging.Log;
 
 public final class yacySeedDB implements httpdAlternativeDomainNames {
   
diff --git a/source/de/anomic/yacy/yacyVersion.java b/source/de/anomic/yacy/yacyVersion.java
index fbaf7a5d8..9ccbc9be6 100644
--- a/source/de/anomic/yacy/yacyVersion.java
+++ b/source/de/anomic/yacy/yacyVersion.java
@@ -5,8 +5,8 @@ import java.util.Comparator;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaSwitchboard;
+import de.anomic.yacy.logging.Log;
 
 public class yacyVersion implements Comparator<yacyVersion>, Comparable<yacyVersion> {
 
diff --git a/source/de/anomic/ymage/ymageOSM.java b/source/de/anomic/ymage/ymageOSM.java
index 2fbb2d2cc..4dc526b91 100644
--- a/source/de/anomic/ymage/ymageOSM.java
+++ b/source/de/anomic/ymage/ymageOSM.java
@@ -35,11 +35,11 @@ import java.net.MalformedURLException;
 
 import javax.imageio.ImageIO;
 
-import de.anomic.kelondro.util.Log;
 import de.anomic.plasma.plasmaHTCache;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.plasma.parser.Document;
 import de.anomic.yacy.yacyURL;
+import de.anomic.yacy.logging.Log;
 
 public class ymageOSM {
     
diff --git a/source/migration.java b/source/migration.java
index 0dc9011db..6608ff692 100644
--- a/source/migration.java
+++ b/source/migration.java
@@ -26,10 +26,10 @@ import de.anomic.data.listManager;
 import de.anomic.http.httpd;
 import de.anomic.kelondro.order.Base64Order;
 import de.anomic.kelondro.order.Digest;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.plasma.plasmaSwitchboardConstants;
+import de.anomic.yacy.logging.Log;
 
 public class migration {
     //SVN constants
diff --git a/source/yacy.java b/source/yacy.java
index 57d4536f9..c454d3d2a 100644
--- a/source/yacy.java
+++ b/source/yacy.java
@@ -65,7 +65,6 @@ import de.anomic.kelondro.text.referencePrototype.WordReference;
 import de.anomic.kelondro.util.DateFormatter;
 import de.anomic.kelondro.util.MemoryControl;
 import de.anomic.kelondro.util.ScoreCluster;
-import de.anomic.kelondro.util.Log;
 import de.anomic.kelondro.util.FileUtils;
 import de.anomic.plasma.plasmaSwitchboard;
 import de.anomic.plasma.plasmaSwitchboardConstants;
@@ -81,6 +80,7 @@ import de.anomic.yacy.Tray;
 import de.anomic.yacy.yacyURL;
 import de.anomic.yacy.yacyRelease;
 import de.anomic.yacy.yacyVersion;
+import de.anomic.yacy.logging.Log;
 
 /**
 * This is the main class of YaCy. Several threads are started from here: