diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index c90c47efe23c6689f60d5916ceaa49884801ecbb..85df30e65c6781e130ecc3e8227a112ed7c511aa 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,23 @@
+2004-01-07  Michael Koch  <konqueror@gmx.de>
+
+	* gnu/java/nio/DatagramChannelImpl.java
+	(blocking): Removed.
+	(DatagramChannelImpl): Call configureBlocking().
+	(implConfigureBlocking): Dont initialize blocking.
+	* gnu/java/nio/ServerSocketChannelImpl.java
+	(blocking): Removed.
+	(ServerSocketChannelImpl): Call configureBlocking().
+	(implConfigureBlocking): Dont initialize blocking.
+	* gnu/java/nio/SocketChannelImpl.java
+	(blocking): Removed.
+	(SocketChannelImpl): Call configureBlocking().
+	(implConfigureBlocking): Dont initialize blocking.
+	(connect): Use isBlocking().
+	* java/nio/channels/spi/AbstractSelectableChannel.java
+	(configureBlocking): Use blockingLock() instead of LOCK.
+	Set blocking after successfully called implConfigureBlocking().
+	(register): Use blockingLock() instead of LOCK.
+
 2004-01-07  Michael Koch  <konqueror@gmx.de>
 
 	* java/net/ServerSocket.java (isBound): Fixed documentation.
diff --git a/libjava/gnu/java/nio/DatagramChannelImpl.java b/libjava/gnu/java/nio/DatagramChannelImpl.java
index af43256cc28a1672a2ca1775a2b90182f9583cff..3531803900aa999c5540c59f7ea002ec5b90e482 100644
--- a/libjava/gnu/java/nio/DatagramChannelImpl.java
+++ b/libjava/gnu/java/nio/DatagramChannelImpl.java
@@ -56,13 +56,13 @@ import java.nio.channels.spi.SelectorProvider;
 public final class DatagramChannelImpl extends DatagramChannel
 {
   private NIODatagramSocket socket;
-  private boolean blocking = true;
   
   protected DatagramChannelImpl (SelectorProvider provider)
     throws IOException
   {
     super (provider);
     socket = new NIODatagramSocket (new PlainDatagramSocketImpl(), this);
+    configureBlocking(true);
   }
 
   public int getNativeFD()
@@ -85,7 +85,6 @@ public final class DatagramChannelImpl extends DatagramChannel
     throws IOException
   {
     socket.setSoTimeout (blocking ? 0 : NIOConstants.DEFAULT_TIMEOUT);
-    this.blocking = blocking;
   }
 
   public DatagramChannel connect (SocketAddress remote)
diff --git a/libjava/gnu/java/nio/ServerSocketChannelImpl.java b/libjava/gnu/java/nio/ServerSocketChannelImpl.java
index 97943c0ff8e044e227ff50e8265ab42b67e9b706..fd975d20a7ad540bfa07b41989395cf134cc83f8 100644
--- a/libjava/gnu/java/nio/ServerSocketChannelImpl.java
+++ b/libjava/gnu/java/nio/ServerSocketChannelImpl.java
@@ -55,7 +55,6 @@ import java.nio.channels.spi.SelectorProvider;
 public final class ServerSocketChannelImpl extends ServerSocketChannel
 {
   private NIOServerSocket serverSocket;
-  private boolean blocking = true;
   private boolean connected;
 
   protected ServerSocketChannelImpl (SelectorProvider provider)
@@ -63,6 +62,7 @@ public final class ServerSocketChannelImpl extends ServerSocketChannel
   {
     super (provider);
     serverSocket = new NIOServerSocket (this);
+    configureBlocking(true);
   }
 
   public int getNativeFD()
@@ -93,7 +93,6 @@ public final class ServerSocketChannelImpl extends ServerSocketChannel
   protected void implConfigureBlocking (boolean blocking) throws IOException
   {
     serverSocket.setSoTimeout (blocking ? 0 : NIOConstants.DEFAULT_TIMEOUT);
-    this.blocking = blocking;
   }
 
   public SocketChannel accept () throws IOException
diff --git a/libjava/gnu/java/nio/SocketChannelImpl.java b/libjava/gnu/java/nio/SocketChannelImpl.java
index ced8ef2476a10aacf3e997bf6438b199d3610f76..efb5fec481b7dd88b79b2338e4763501373f594d 100644
--- a/libjava/gnu/java/nio/SocketChannelImpl.java
+++ b/libjava/gnu/java/nio/SocketChannelImpl.java
@@ -65,7 +65,6 @@ public final class SocketChannelImpl extends SocketChannel
 {
   private PlainSocketImpl impl;
   private NIOSocket socket;
-  private boolean blocking = true;
   private boolean connectionPending;
 
   SocketChannelImpl (SelectorProvider provider)
@@ -74,6 +73,7 @@ public final class SocketChannelImpl extends SocketChannel
     super (provider);
     impl = new PlainSocketImpl();
     socket = new NIOSocket (impl, this);
+    configureBlocking(true);
   }
   
   SocketChannelImpl (SelectorProvider provider,
@@ -117,7 +117,6 @@ public final class SocketChannelImpl extends SocketChannel
   protected void implConfigureBlocking (boolean blocking) throws IOException
   {
     socket.setSoTimeout (blocking ? 0 : NIOConstants.DEFAULT_TIMEOUT);
-    this.blocking = blocking;
   }   
 
   public boolean connect (SocketAddress remote) throws IOException
@@ -137,7 +136,7 @@ public final class SocketChannelImpl extends SocketChannel
     if (((InetSocketAddress) remote).isUnresolved())
       throw new UnresolvedAddressException();
     
-    if (blocking)
+    if (isBlocking())
       {
         // Do blocking connect.
         socket.connect (remote);
diff --git a/libjava/java/nio/channels/spi/AbstractSelectableChannel.java b/libjava/java/nio/channels/spi/AbstractSelectableChannel.java
index b027b034ede6db216065550c4a93b500f492b798..17d6a2eaea1f90361d2d8130111434b8a4468e45 100644
--- a/libjava/java/nio/channels/spi/AbstractSelectableChannel.java
+++ b/libjava/java/nio/channels/spi/AbstractSelectableChannel.java
@@ -75,13 +75,13 @@ public abstract class AbstractSelectableChannel extends SelectableChannel
   /**
    * Adjusts this channel's blocking mode.
    */
-  public final SelectableChannel configureBlocking (boolean block)
+  public final SelectableChannel configureBlocking (boolean blocking)
     throws IOException
   {
-    synchronized (LOCK)
+    synchronized (blockingLock())
       {
-        blocking = true;
-        implConfigureBlocking (block);
+        implConfigureBlocking(blocking);
+        this.blocking = blocking;
       }
     
     return this;
@@ -187,7 +187,7 @@ public abstract class AbstractSelectableChannel extends SelectableChannel
     SelectionKey key = null;
     AbstractSelector selector = (AbstractSelector) selin;
 
-    synchronized (LOCK)
+    synchronized (blockingLock())
       {
         key = locate (selector);