diff --git a/unittest/pipeunittest/pipeunittest.cpp b/unittest/pipeunittest/pipeunittest.cpp
index 594e9430..2f12a41d 100644
--- a/unittest/pipeunittest/pipeunittest.cpp
+++ b/unittest/pipeunittest/pipeunittest.cpp
@@ -36,6 +36,7 @@ private slots:
     void createPipeWithInsecureMemory();
     void createPipeWithSecureMemory();
     void readWrite();
+    void signalTests();
 private:
     QCA::Initializer* m_init;
 };
@@ -103,23 +104,71 @@ void PipeUnitTest::readWrite()
     pipe1.readEnd().enable();
 
     pipe1.writeEnd().write( testData1 );
-    // QTest::qWait(1);
-    QCoreApplication::processEvents();
-    QCoreApplication::processEvents();
+    QTest::qWait(1); // process events
     QByteArray out1 = pipe1.readEnd().read(); // read all...
     QCOMPARE( testData1, out1 );
 
     pipe1.writeEnd().write( testData1 ); // put it back in
-    QCoreApplication::processEvents();
-    QCoreApplication::processEvents();
+    QTest::qWait(1); // process events
     QCOMPARE( pipe1.readEnd().bytesAvailable(), testData1.size() );
-    pipe1.writeEnd().write( testData2 );
-    QCoreApplication::processEvents();
-    QCoreApplication::processEvents();
-    QCOMPARE( pipe1.readEnd().bytesAvailable(), testData1.size() + testData2.size() );
-    
 
+    pipe1.writeEnd().write( testData2 ); // add some more data
+    QTest::qWait(1); // process events
+    QCOMPARE( pipe1.readEnd().bytesAvailable(), testData1.size() + testData2.size() );
+    QByteArray thisRead = pipe1.readEnd().read(1);
+    QCOMPARE( thisRead, QByteArray("D") );
+    thisRead = pipe1.readEnd().read(3);
+    QCOMPARE( thisRead, QByteArray("own") );
+    thisRead = pipe1.readEnd().read();
+    QCOMPARE( thisRead, QByteArray(" thepipe!") );
 }
+
+void PipeUnitTest::signalTests()
+{
+    QCA::QPipe* pipe = new QCA::QPipe;
+    pipe->create();
+    
+    QVERIFY( pipe->writeEnd().isValid() );
+    pipe->writeEnd().enable();
+    QVERIFY( pipe->readEnd().isValid() );
+    pipe->readEnd().enable();
+
+    QSignalSpy readyReadSpy( &(pipe->readEnd()), SIGNAL( readyRead() ) );
+    QVERIFY( readyReadSpy.isValid() );
+    QSignalSpy bytesWrittenSpy( &(pipe->writeEnd()), SIGNAL( bytesWritten(int) ) );
+    QVERIFY( bytesWrittenSpy.isValid() );
+    QSignalSpy closedWriteSpy( &(pipe->writeEnd()), SIGNAL( closed() ) );
+    QVERIFY( closedWriteSpy.isValid() );
+    QSignalSpy closedReadSpy( &(pipe->readEnd()), SIGNAL( closed() ) );
+    QVERIFY( closedReadSpy.isValid() );
+
+    QCOMPARE( readyReadSpy.count(), 0 );
+    QCOMPARE( bytesWrittenSpy.count(), 0 );
+    QCOMPARE( closedWriteSpy.count(), 0 );
+    QCOMPARE( closedReadSpy.count(), 0 );
+
+    QByteArray data("Far better, it is, to dare mighty things");
+    pipe->writeEnd().write( data );
+    QTest::qWait(1);
+    QCOMPARE( readyReadSpy.count(), 1 );
+    QCOMPARE( bytesWrittenSpy.count(), 1 );    
+    // this pulls out the first argument to the first signal as an integer
+    QCOMPARE( bytesWrittenSpy.takeFirst().at(0).toInt(), data.size() );
+    QCOMPARE( pipe->readEnd().bytesAvailable(), data.size() );
+
+    QCOMPARE( closedWriteSpy.count(), 0 );
+    QCOMPARE( closedReadSpy.count(), 0 );
+ 
+    pipe->readEnd().close();
+    QTest::qWait(1);
+    QCOMPARE( closedWriteSpy.count(), 0 );
+    QCOMPARE( closedReadSpy.count(), 1 );
+    pipe->writeEnd().close();
+    QTest::qWait(1);
+    QCOMPARE( closedWriteSpy.count(), 1 );
+    QCOMPARE( closedReadSpy.count(), 1 );
+}
+
 QTEST_MAIN(PipeUnitTest)
 
 #include "pipeunittest.moc"