diff --git a/servi/org.eclipse.statet.rj.servi-tests/src/org/eclipse/statet/rj/servi/pool/JMPoolTest.java b/servi/org.eclipse.statet.rj.servi-tests/src/org/eclipse/statet/rj/servi/pool/JMPoolTest.java
index c7cf739..b615bef 100644
--- a/servi/org.eclipse.statet.rj.servi-tests/src/org/eclipse/statet/rj/servi/pool/JMPoolTest.java
+++ b/servi/org.eclipse.statet.rj.servi-tests/src/org/eclipse/statet/rj/servi/pool/JMPoolTest.java
@@ -290,6 +290,24 @@
 		closeServi(servi2);
 	}
 	
+	
+	@Test
+	public void Bug570660() throws Exception {
+		final ProgressMonitor m= new NullProgressMonitor();
+		
+		final PoolConfig poolConfig= new PoolConfig();
+		poolConfig.setMaxTotalCount(2);
+		poolConfig.setMinIdleCount(2);
+		this.server.setPoolConfig(poolConfig);
+		this.server.start();
+		
+		final RServi servi1= getServi("test1");
+		assertNodeOperative(servi1);
+		
+		closeServi(servi1);
+	}
+	
+	
 	private void assertIdleCount(final int expected) throws InterruptedException {
 		final long t= System.nanoTime();
 		while (true) {
diff --git a/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2.java b/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2.java
index cec2485..3b33f4d 100644
--- a/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2.java
+++ b/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2.java
@@ -69,6 +69,8 @@
 	}
 	
 	
+	private final String id;
+	
 	private final APool2NodeFactory factory;
 	
 	private volatile byte state;
@@ -76,18 +78,32 @@
 	private final Object stateLock= new Object();
 	
 	
-	public APool2(final APool2NodeFactory factory, final PoolConfig config) {
+	public APool2(final String id, final APool2NodeFactory factory, final PoolConfig config) {
 		super(factory, createAConfig(config));
+		this.id= id;
 		
 		factory.setPool(this);
 		this.factory= factory;
 	}
 	
 	
+	public String getId() {
+		return this.id;
+	}
+	
+	
 	public void setConfig(final PoolConfig config) {
 		setConfig(createAConfig(config));
 	}
 	
+	@Override
+	public int getMaxIdle() {
+		if (this.state != 0) {
+			return 0;
+		}
+		return super.getMaxIdle();
+	}
+	
 	
 	public APool2NodeHandler borrowObject(final String client) throws Exception {
 		if (this.state != 0) {
@@ -103,15 +119,12 @@
 		}
 	}
 	
-	@Override
-	public int getMinIdle() {
-		if (this.state != 0) {
-			return 0;
-		}
-		return super.getMinIdle();
-	}
 	
 	
+	public boolean isOpen() {
+		return (this.state == 0);
+	}
+	
 	@Override
 	public void close() {
 		throw new UnsupportedOperationException();
@@ -124,6 +137,9 @@
 			}
 			this.state= CLOSING;
 		}
+		final long evictNanos= APool2NodeHandler.evictNanos(evictionTimeout);
+		final boolean evictDirect= (evictionTimeout == 0);
+		
 		try {
 			Thread.sleep(10);
 		}
@@ -131,9 +147,6 @@
 		
 		clear();
 		
-		final long evictNanos= APool2NodeHandler.evictNanos(evictionTimeout);
-		final boolean evictDirect= (evictionTimeout == 0);
-		
 		final ImList<APool2NodeHandler> objects= this.factory.getAllObjects();
 		for (final APool2NodeHandler poolObj : objects) {
 			poolObj.doEvict(evictNanos, evictDirect);
diff --git a/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2NodeFactory.java b/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2NodeFactory.java
index ede7ab1..b8ac23b 100644
--- a/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2NodeFactory.java
+++ b/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/APool2NodeFactory.java
@@ -17,6 +17,8 @@
 import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
 import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullLateInit;
 
+import static org.eclipse.statet.rj.servi.RServiUtils.RJ_SERVI_ID;
+
 import java.rmi.server.RMIClientSocketFactory;
 import java.rmi.server.RMIServerSocketFactory;
 import java.rmi.server.RemoteServer;
@@ -39,7 +41,6 @@
 import org.eclipse.statet.jcommons.runtime.CommonsRuntime;
 import org.eclipse.statet.jcommons.status.ErrorStatus;
 
-import org.eclipse.statet.rj.servi.RServiUtils;
 import org.eclipse.statet.rj.servi.node.RServiNode;
 
 
@@ -109,6 +110,10 @@
 		
 		boolean ok= false;
 		try {
+			if (!this.pool.isOpen()) {
+				throw new IllegalStateException("Pool not open");
+			}
+			
 			for (final PoolListener listener : this.poolListeners.toList()) {
 				try {
 					listener.initializing(poolObj);
@@ -150,7 +155,7 @@
 		}
 		finally {
 			if (!ok) {
-				this.nodes.remove(poolObj);
+				destroyObject(poolObj.getPooledObject());
 			}
 		}
 	}
@@ -261,9 +266,9 @@
 	
 	
 	private void onErrorInListener(final PoolListener listener, final Exception e) {
-		CommonsRuntime.log(new ErrorStatus(RServiUtils.RJ_SERVI_ID,
-				String.format("An error occurred in pool listener (%1$s).",
-						listener.getClass().getSimpleName() ),
+		CommonsRuntime.log(new ErrorStatus(RJ_SERVI_ID,
+				String.format("An error occurred in pool listener (%1$s) of '%2$s'.",
+						listener.getClass().getSimpleName(), this.pool.getId() ),
 				e ));
 	}
 	
diff --git a/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/PoolManager.java b/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/PoolManager.java
index 492e78d..af0579c 100644
--- a/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/PoolManager.java
+++ b/servi/org.eclipse.statet.rj.servi/srcServiPool/org/eclipse/statet/internal/rj/servi/PoolManager.java
@@ -112,7 +112,7 @@
 	@Override
 	public synchronized void setConfig(final PoolConfig config) {
 		final var pool= this.pool;
-		if (pool != null) {
+		if (pool != null && pool.isOpen()) {
 			final var poolFactory= nonNullAssert(this.poolFactory);
 			pool.setConfig(config);
 			poolFactory.setMaxUsageCount(config.getMaxUsageCount());
@@ -139,7 +139,7 @@
 				this.nodeFactories.get(0), this.poolListeners, this.executor );
 		poolFactory.setMaxUsageCount(this.poolConfig.getMaxUsageCount());
 		this.poolFactory= poolFactory;
-		final var pool= new APool2(poolFactory, this.poolConfig) {
+		final var pool= new APool2(this.id, poolFactory, this.poolConfig) {
 			@Override
 			protected void closeFinally() {
 				super.closeFinally();
