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 2ae7870..fd8fab4 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
@@ -15,6 +15,7 @@
 package org.eclipse.statet.rj.servi.pool;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -169,7 +170,7 @@
 	}
 	
 	@Test
-	public void closed() throws Exception {
+	public void RServi_closed() throws Exception {
 		final PoolConfig poolConfig= new PoolConfig();
 		this.server.setPoolConfig(poolConfig);
 		this.server.start();
@@ -394,6 +395,51 @@
 		}
 	}
 	
+	@Test
+	public void handleCrashedEngine() throws Exception {
+		final PoolConfig poolConfig= new PoolConfig();
+		poolConfig.setMaxTotalCount(1);
+		poolConfig.setMaxUsageCount(1);
+		this.server.setPoolConfig(poolConfig);
+		this.server.start();
+		
+		final RServi servi1= getServi("test1");
+		final ProgressMonitor m= new NullProgressMonitor();
+		assertNodeOperative(servi1, m);
+		
+		final PoolNodeObject node1= assertSinglePoolNode();
+		
+		final var clientState= new AtomicInteger();
+		final var clientWorker= CompletableFuture.supplyAsync(() -> {
+			clientState.set(1);
+			try {
+				servi1.evalVoid("while (true) { Sys.sleep(1) }", m);
+				return null;
+			}
+			catch (final StatusException e) {
+				return e;
+			}
+			finally {
+				clientState.set(2);
+			}
+		});
+		while (clientState.get() == 0) {
+			Thread.sleep(100);
+		}
+		
+		final Accessor nodeHandler= new Accessor(node1.getNodeHandler(), NodeHandler.class);
+		final Process process= nonNullAssert((Process)nodeHandler.getFieldObj("process"));
+		process.destroy();
+		
+		assertTrue((clientWorker.get(1, TimeUnit.SECONDS) instanceof StatusException));
+		if (!servi1.isClosed()) {
+			closeServi(servi1);
+		}
+		assertNotEquals(PoolNodeState.ALLOCATED, node1.getState());
+		skipChecking(node1);
+		assertEquals(PoolNodeState.DISPOSED, node1.getState());
+	}
+	
 	
 	@Test
 	public void PoolNode_getState() throws Exception {
@@ -411,6 +457,7 @@
 		assertEquals(PoolNodeState.ALLOCATED, node1.getState());
 		
 		closeServi(servi1);
+		assertNotEquals(PoolNodeState.ALLOCATED, node1.getState());
 		skipChecking(node1);
 		assertEquals(PoolNodeState.IDLING, node1.getState());
 		
@@ -485,7 +532,6 @@
 		this.server.start();
 		
 		final RServi servi1= getServi("test1");
-		
 		final ProgressMonitor m= new NullProgressMonitor();
 		assertNodeOperative(servi1, m);
 		
@@ -518,7 +564,7 @@
 	}
 	
 	@Test
-	public void PoolNode_evictCrashed() throws Exception {
+	public void PoolNode_evictCrashedEngine() throws Exception {
 		final PoolConfig poolConfig= new PoolConfig();
 		poolConfig.setMinIdleCount(0);
 		this.server.setPoolConfig(poolConfig);
