diff --git a/common/source/java/ch/systemsx/cisd/common/io/QueuePersister.java b/common/source/java/ch/systemsx/cisd/common/io/QueuePersister.java
index cd062995a599d4455cf4c6b707e248c07aa4c7a4..3f68b7b9b0a6603a37892a1f6ae1d5e1a462af42 100644
--- a/common/source/java/ch/systemsx/cisd/common/io/QueuePersister.java
+++ b/common/source/java/ch/systemsx/cisd/common/io/QueuePersister.java
@@ -440,10 +440,13 @@ public class QueuePersister<E> implements IQueuePersister<E>
         {
             try
             {
-                if (randomAccessFile.getFD().valid() == false
-                        || false == randomAccessFile.getChannel().isOpen())
+                if (randomAccessFile.getFD().valid() == false)
+
+                {
+                    this.randomAccessFile = new RandomAccessFile(queueFile, "rw");
+                } else if (false == randomAccessFile.getChannel().isOpen())
                 {
-                    throw new IllegalStateException("Cannot persist: file is closed.");
+                    this.randomAccessFile = new RandomAccessFile(queueFile, "rw");
                 }
             } catch (IOException ex)
             {
diff --git a/common/sourceTest/java/ch/systemsx/cisd/common/io/PersistentExtendedBlockingQueueDecoratorTest.java b/common/sourceTest/java/ch/systemsx/cisd/common/io/PersistentExtendedBlockingQueueDecoratorTest.java
index d41180ef5cbf820b14ad9f91670e576ecc7ddd03..5fa669e84f5fba5d8bee38c927d973549907618a 100644
--- a/common/sourceTest/java/ch/systemsx/cisd/common/io/PersistentExtendedBlockingQueueDecoratorTest.java
+++ b/common/sourceTest/java/ch/systemsx/cisd/common/io/PersistentExtendedBlockingQueueDecoratorTest.java
@@ -112,6 +112,21 @@ public class PersistentExtendedBlockingQueueDecoratorTest
         assertEquals(items, asList(createQueue()));
     }
 
+    @Test
+    public void testAddClose()
+    {
+        final List<String> items = Arrays.asList("one", "two");
+        PersistentExtendedBlockingQueueDecorator<String> persistentQueue = createQueue();
+        for (String item : items)
+        {
+            persistentQueue.add(item);
+        }
+        persistentQueue.close();
+        persistentQueue.add("three");
+
+        assertEquals(items.size() + 1, asList(createQueue()).size());
+    }
+
     @Test
     public void testAddLongItem()
     {