diff --git a/impl.utils/pom.xml b/impl.utils/pom.xml
index 5a15662..0f95d02 100644
--- a/impl.utils/pom.xml
+++ b/impl.utils/pom.xml
@@ -80,12 +80,6 @@
             <version>4.12</version>
             <scope>test</scope>
         </dependency>
-        <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-api</artifactId>
-            <version>1.7.7</version>
-            <type>jar</type>
-        </dependency>
     </dependencies>
 
 </project>
diff --git a/impl.utils/src/main/java/org/apache/commons/rdf/impl/utils/DelayedNotificator.java b/impl.utils/src/main/java/org/apache/commons/rdf/impl/utils/DelayedNotificator.java
index 8fc8e92..8b3bc87 100644
--- a/impl.utils/src/main/java/org/apache/commons/rdf/impl/utils/DelayedNotificator.java
+++ b/impl.utils/src/main/java/org/apache/commons/rdf/impl/utils/DelayedNotificator.java
@@ -20,11 +20,12 @@
 
 import java.lang.ref.WeakReference;
 import java.util.*;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import org.apache.commons.rdf.event.GraphEvent;
 import org.apache.commons.rdf.event.GraphListener;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+
 
 /**
  *
@@ -32,7 +33,7 @@
  */
 class DelayedNotificator {
 
-    private static final Logger log = LoggerFactory.getLogger(DelayedNotificator.class);
+    private static final Logger log = Logger.getLogger(DelayedNotificator.class.getName());
     private static Timer timer = new Timer("Event delivery timer",true);
 
     static class ListenerHolder {
@@ -62,12 +63,12 @@
                             }
                             GraphListener listener = listenerRef.get();
                             if (listener == null) {
-                                log.debug("Ignoring garbage collected listener");
+                                log.fine("Ignoring garbage collected listener");
                             } else {
                                 try {
                                     listener.graphChanged(eventsLocal);
                                 } catch (Exception e) {
-                                    log.warn("Exception delivering ImmutableGraph event", e);
+                                    log.log(Level.WARNING, "Exception delivering ImmutableGraph event", e);
                                 }
                             }
                         }
diff --git a/impl.utils/src/main/java/org/apache/commons/rdf/impl/utils/graphmatching/GraphMatcher.java b/impl.utils/src/main/java/org/apache/commons/rdf/impl/utils/graphmatching/GraphMatcher.java
index 70f5437..b7e2500 100644
--- a/impl.utils/src/main/java/org/apache/commons/rdf/impl/utils/graphmatching/GraphMatcher.java
+++ b/impl.utils/src/main/java/org/apache/commons/rdf/impl/utils/graphmatching/GraphMatcher.java
@@ -24,6 +24,8 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 import org.apache.commons.rdf.BlankNode;
 import org.apache.commons.rdf.BlankNodeOrIri;
 import org.apache.commons.rdf.Graph;
@@ -31,8 +33,6 @@
 import org.apache.commons.rdf.Triple;
 import org.apache.commons.rdf.impl.utils.TripleImpl;
 import org.apache.commons.rdf.impl.utils.simple.SimpleMGraph;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * @author reto
@@ -41,7 +41,7 @@
 public class GraphMatcher {
 
 
-    private final static Logger log = LoggerFactory.getLogger(GraphMatcher.class);
+    private final static Logger log = Logger.getLogger(GraphMatcher.class.getName());
 
     /**
      * get a mapping from g1 to g2 or null if the graphs are not isomorphic. The
@@ -100,10 +100,9 @@
 
     private static Map<BlankNode, BlankNode> trialAndErrorMatching(Graph g1, Graph g2,
             Map<Set<BlankNode>, Set<BlankNode>> matchingGroups) {
-        if (log.isDebugEnabled()) {
+        if (log.isLoggable(Level.FINE)) {
             Set<BlankNode> bn1  = Utils.getBNodes(g1);
-            log.debug("doing trial and error matching for {} bnodes, " +
-                    "in graphs of size: {}.", bn1.size(), g1.size());
+            log.log(Level.FINE,"doing trial and error matching for {0}"+" bnodes, "+"in graphs of size: {1}.", new Object[]{bn1.size(), g1.size()});
         }
         Iterator<Map<BlankNode, BlankNode>> mappingIter
                 = GroupMappingIterator.create(matchingGroups);
