diff --git a/.gitattributes b/.gitattributes
index 5cd107bd044ac7057049d619d49e0a79b89cc9b1..f0ca4a51eb1447df05d089458d26253c5f89eaa8 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -3966,18 +3966,7 @@ RTCP/InputProc/CMakeLists.txt -text
 RTCP/InputProc/src/BufferSettings.cc -text
 RTCP/InputProc/src/BufferSettings.h -text
 RTCP/InputProc/src/CMakeLists.txt -text
-RTCP/InputProc/src/Generator.cc -text
-RTCP/InputProc/src/Generator.h -text
-RTCP/InputProc/src/MPITransferStations.h -text
-RTCP/InputProc/src/MPITransferStations.tcc -text
 RTCP/InputProc/src/OMPThread.h -text
-RTCP/InputProc/src/PacketReader.cc -text
-RTCP/InputProc/src/PacketReader.h -text
-RTCP/InputProc/src/PacketWriter.h -text
-RTCP/InputProc/src/PacketWriter.tcc -text
-RTCP/InputProc/src/PacketsToBuffer.cc -text
-RTCP/InputProc/src/PacketsToBuffer.h -text
-RTCP/InputProc/src/RSP.h -text
 RTCP/InputProc/src/RSPBoards.cc -text
 RTCP/InputProc/src/RSPBoards.h -text
 RTCP/InputProc/src/Ranges.cc -text
@@ -3988,10 +3977,21 @@ RTCP/InputProc/src/SampleBufferReader.tcc -text
 RTCP/InputProc/src/SampleType.h -text
 RTCP/InputProc/src/SharedMemory.cc -text
 RTCP/InputProc/src/SharedMemory.h -text
+RTCP/InputProc/src/Station/Generator.cc -text
+RTCP/InputProc/src/Station/Generator.h -text
+RTCP/InputProc/src/Station/PacketReader.cc -text
+RTCP/InputProc/src/Station/PacketReader.h -text
+RTCP/InputProc/src/Station/PacketWriter.h -text
+RTCP/InputProc/src/Station/PacketWriter.tcc -text
+RTCP/InputProc/src/Station/PacketsToBuffer.cc -text
+RTCP/InputProc/src/Station/PacketsToBuffer.h -text
+RTCP/InputProc/src/Station/RSP.h -text
+RTCP/InputProc/src/Station/filterRSP.cc -text
 RTCP/InputProc/src/StationID.cc -text
 RTCP/InputProc/src/StationID.h -text
+RTCP/InputProc/src/Transpose/MPITransferStations.h -text
+RTCP/InputProc/src/Transpose/MPITransferStations.tcc -text
 RTCP/InputProc/src/WallClockTime.h -text
-RTCP/InputProc/src/filterRSP.cc -text
 RTCP/InputProc/src/newInputSection.cc -text
 RTCP/InputProc/src/obsolete/MPI_RMA.h -text
 RTCP/InputProc/src/obsolete/Poll.h -text
diff --git a/RTCP/InputProc/src/CMakeLists.txt b/RTCP/InputProc/src/CMakeLists.txt
index a4655caea717ec7ac97ef8a88d27a5ba0e04fc37..c76d0268319df35b0a953a4c648a1f543d0c236f 100644
--- a/RTCP/InputProc/src/CMakeLists.txt
+++ b/RTCP/InputProc/src/CMakeLists.txt
@@ -1,16 +1,20 @@
 include(LofarPackageVersion)
 
+# Add current source directory to -I path. This is needed because InputProc uses
+# angle brackets for internal header files, instead of quotes.
+include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
 lofar_add_library(inputproc
   Package__Version.cc
   BufferSettings.cc
-  Generator.cc
-  PacketReader.cc
-  PacketsToBuffer.cc
   Ranges.cc
   SharedMemory.cc
   StationID.cc
   RSPBoards.cc
+  Station/Generator.cc
+  Station/PacketReader.cc
+  Station/PacketsToBuffer.cc
   )
 
 lofar_add_bin_program(newInputSection newInputSection.cc)
-lofar_add_bin_program(filterRSP filterRSP.cc)
+lofar_add_bin_program(filterRSP Station/filterRSP.cc)
diff --git a/RTCP/InputProc/src/SampleBuffer.h b/RTCP/InputProc/src/SampleBuffer.h
index 035907b37cfe610d1f4092e2bd39e9dfa375d365..3b2df27c26147388e56a0ac1f89128fcbdddb960 100644
--- a/RTCP/InputProc/src/SampleBuffer.h
+++ b/RTCP/InputProc/src/SampleBuffer.h
@@ -16,8 +16,22 @@ namespace LOFAR {
 namespace RTCP {
 
 
+/*
+ * Maintains a sample buffer in shared memory, which can be created
+ * or attached to.
+ *
+ * The sample buffer contains the following information:
+ *
+ *   1. A copy of `settings', against which attaches are verified.
+ *   2. A beamlets matrix [subband][sample]
+ *   3. A flags vector [board]
+ *
+ * The IPC key used for the shared memory is settings.dataKey.
+ */
 template<typename T> class SampleBuffer {
 public:
+  // Create (create=true) or attach to (create=false) a sample buffer
+  // in shared memory.
   SampleBuffer( const struct BufferSettings &settings, bool create );
 
 private:
@@ -42,14 +56,14 @@ public:
   const size_t nrFlagRanges; // width of each flag range
 
   MultiDimArray<T,2>  beamlets; // [subband][sample]
-  std::vector<Ranges> flags;    // [rspboard]
+  std::vector<Ranges> flags;    // [board]
 };
 
 
 template<typename T> SampleBuffer<T>::SampleBuffer( const struct BufferSettings &_settings, bool create )
 :
   logPrefix(str(boost::format("[station %s %s board] [SampleBuffer] ") % _settings.station.stationName % _settings.station.antennaField)),
-  data(_settings.dataKey, dataSize(_settings), create ? SharedMemoryArena::CREATE_EXCL : SharedMemoryArena::READ),
+  data(_settings.dataKey, dataSize(_settings), create ? SharedMemoryArena::CREATE : SharedMemoryArena::READ),
   allocator(data),
   settings(initSettings(_settings, create)),
 
diff --git a/RTCP/InputProc/src/Generator.cc b/RTCP/InputProc/src/Station/Generator.cc
similarity index 99%
rename from RTCP/InputProc/src/Generator.cc
rename to RTCP/InputProc/src/Station/Generator.cc
index 609d8b2ee7efd946fdcacb90ab7805f96b1ca3bf..de1babd5956fbb15110d98672fc50b0bbda0430a 100644
--- a/RTCP/InputProc/src/Generator.cc
+++ b/RTCP/InputProc/src/Station/Generator.cc
@@ -1,5 +1,5 @@
 #include <lofar_config.h>
-#include "Generator.h"
+#include "Station/Generator.h"
 
 #include <Common/LofarLogger.h>
 #include <Stream/Stream.h>
diff --git a/RTCP/InputProc/src/Generator.h b/RTCP/InputProc/src/Station/Generator.h
similarity index 96%
rename from RTCP/InputProc/src/Generator.h
rename to RTCP/InputProc/src/Station/Generator.h
index 2ae2bf1afadabd586c3104287bf770cab7202dff..c13e04f85e5f61652f19ebbe0e59e467751aed2b 100644
--- a/RTCP/InputProc/src/Generator.h
+++ b/RTCP/InputProc/src/Station/Generator.h
@@ -1,7 +1,7 @@
 #ifndef __GENERATOR__
 #define __GENERATOR__
 
-#include "RSP.h"
+#include "Station/RSP.h"
 #include "RSPBoards.h"
 #include "BufferSettings.h"
 #include <string>
diff --git a/RTCP/InputProc/src/PacketReader.cc b/RTCP/InputProc/src/Station/PacketReader.cc
similarity index 98%
rename from RTCP/InputProc/src/PacketReader.cc
rename to RTCP/InputProc/src/Station/PacketReader.cc
index 757cfa59422d11e44462666eb297a13d65bc8793..703e1546f9fef56c8e3557b4e4791bcd6663f369 100644
--- a/RTCP/InputProc/src/PacketReader.cc
+++ b/RTCP/InputProc/src/Station/PacketReader.cc
@@ -1,5 +1,6 @@
 #include <lofar_config.h>
-#include "PacketReader.h"
+#include "Station/PacketReader.h"
+
 #include <Common/LofarLogger.h>
 #include <Stream/SocketStream.h>
 #include <Interface/RSPTimeStamp.h>
diff --git a/RTCP/InputProc/src/PacketReader.h b/RTCP/InputProc/src/Station/PacketReader.h
similarity index 98%
rename from RTCP/InputProc/src/PacketReader.h
rename to RTCP/InputProc/src/Station/PacketReader.h
index b50eed0c3f387be95e5f4f76059db67bbc37f93f..95b049abdb616746fef44855a1e41106c75e33b0 100644
--- a/RTCP/InputProc/src/PacketReader.h
+++ b/RTCP/InputProc/src/Station/PacketReader.h
@@ -4,7 +4,7 @@
 #include <Common/Exception.h>
 #include <Stream/Stream.h>
 #include <Interface/SmartPtr.h>
-#include "RSP.h"
+#include "Station/RSP.h"
 #include "BufferSettings.h"
 #include <string>
 
diff --git a/RTCP/InputProc/src/PacketWriter.h b/RTCP/InputProc/src/Station/PacketWriter.h
similarity index 96%
rename from RTCP/InputProc/src/PacketWriter.h
rename to RTCP/InputProc/src/Station/PacketWriter.h
index 901f655b8a9f0f4b819395b4f59aa5f00651e914..ab4afb3596ea3f8cbb6635a0132efaa80a796798 100644
--- a/RTCP/InputProc/src/PacketWriter.h
+++ b/RTCP/InputProc/src/Station/PacketWriter.h
@@ -1,7 +1,7 @@
 #ifndef __PACKETWRITER__
 #define __PACKETWRITER__
 
-#include "RSP.h"
+#include "Station/RSP.h"
 #include "SampleBuffer.h"
 #include "BufferSettings.h"
 #include "Ranges.h"
diff --git a/RTCP/InputProc/src/PacketWriter.tcc b/RTCP/InputProc/src/Station/PacketWriter.tcc
similarity index 99%
rename from RTCP/InputProc/src/PacketWriter.tcc
rename to RTCP/InputProc/src/Station/PacketWriter.tcc
index 137bfab98f40094cd9aec1c6f51ecd86c0aaea6a..2a2d1e505b2f2a26275e76bd657bf9988ca4b15b 100644
--- a/RTCP/InputProc/src/PacketWriter.tcc
+++ b/RTCP/InputProc/src/Station/PacketWriter.tcc
@@ -2,10 +2,10 @@
 #include <Common/LofarConstants.h>
 #include <Interface/RSPTimeStamp.h>
 #include <Interface/SmartPtr.h>
-#include "RSP.h"
 #include "SampleBuffer.h"
 #include "BufferSettings.h"
 #include "Ranges.h"
+#include "Station/RSP.h"
 #include <boost/format.hpp>
 #include <string>
 #include <ios>
diff --git a/RTCP/InputProc/src/PacketsToBuffer.cc b/RTCP/InputProc/src/Station/PacketsToBuffer.cc
similarity index 96%
rename from RTCP/InputProc/src/PacketsToBuffer.cc
rename to RTCP/InputProc/src/Station/PacketsToBuffer.cc
index e8dfc8f1daea142cca46dc8812865bc73cff2c1f..54a5c1e753fc2bb7c3efdcb5ac31a23bc93db1b3 100644
--- a/RTCP/InputProc/src/PacketsToBuffer.cc
+++ b/RTCP/InputProc/src/Station/PacketsToBuffer.cc
@@ -1,14 +1,15 @@
 #include <lofar_config.h>
-#include "PacketsToBuffer.h"
+#include "Station/PacketsToBuffer.h"
+
 #include <Common/LofarLogger.h>
 #include <Interface/SmartPtr.h>
 #include <Interface/Stream.h>
 #include <Stream/Stream.h>
-#include "RSP.h"
 #include "SampleBuffer.h"
 #include "BufferSettings.h"
-#include "PacketReader.h"
-#include "PacketWriter.h"
+#include "Station/RSP.h"
+#include "Station/PacketReader.h"
+#include "Station/PacketWriter.h"
 #include <boost/format.hpp>
 #include <string>
 #include <ios>
diff --git a/RTCP/InputProc/src/PacketsToBuffer.h b/RTCP/InputProc/src/Station/PacketsToBuffer.h
similarity index 97%
rename from RTCP/InputProc/src/PacketsToBuffer.h
rename to RTCP/InputProc/src/Station/PacketsToBuffer.h
index cc01803422359ba4e537246afd8787050ab892ed..9d566e65e1b4d48cd3b73c8ab98f58ac979bf00d 100644
--- a/RTCP/InputProc/src/PacketsToBuffer.h
+++ b/RTCP/InputProc/src/Station/PacketsToBuffer.h
@@ -4,11 +4,11 @@
 #include <Interface/SmartPtr.h>
 #include <Interface/Stream.h>
 #include <Stream/Stream.h>
-#include "RSP.h"
+#include "Station/RSP.h"
 #include "RSPBoards.h"
 #include "SampleBuffer.h"
 #include "BufferSettings.h"
-#include "PacketReader.h"
+#include "Station/PacketReader.h"
 #include <string>
 #include <ios>
 
diff --git a/RTCP/InputProc/src/RSP.h b/RTCP/InputProc/src/Station/RSP.h
similarity index 100%
rename from RTCP/InputProc/src/RSP.h
rename to RTCP/InputProc/src/Station/RSP.h
diff --git a/RTCP/InputProc/src/filterRSP.cc b/RTCP/InputProc/src/Station/filterRSP.cc
similarity index 100%
rename from RTCP/InputProc/src/filterRSP.cc
rename to RTCP/InputProc/src/Station/filterRSP.cc
diff --git a/RTCP/InputProc/src/MPITransferStations.h b/RTCP/InputProc/src/Transpose/MPITransferStations.h
similarity index 100%
rename from RTCP/InputProc/src/MPITransferStations.h
rename to RTCP/InputProc/src/Transpose/MPITransferStations.h
diff --git a/RTCP/InputProc/src/MPITransferStations.tcc b/RTCP/InputProc/src/Transpose/MPITransferStations.tcc
similarity index 100%
rename from RTCP/InputProc/src/MPITransferStations.tcc
rename to RTCP/InputProc/src/Transpose/MPITransferStations.tcc
diff --git a/RTCP/InputProc/src/newInputSection.cc b/RTCP/InputProc/src/newInputSection.cc
index 4766bcf027277ef6daa5cda1758bf7eb5b0e1ad9..82e09b8f1c2adb990187f0b2f1ca6b7c9f556a7c 100644
--- a/RTCP/InputProc/src/newInputSection.cc
+++ b/RTCP/InputProc/src/newInputSection.cc
@@ -14,8 +14,8 @@
 #include "SampleType.h"
 #include "SampleBuffer.h"
 #include "SampleBufferReader.h"
-#include "Generator.h"
-#include "PacketsToBuffer.h"
+#include "Station/Generator.h"
+#include "Station/PacketsToBuffer.h"
 #include "mpi.h"
 
 #include <vector>
@@ -31,7 +31,7 @@
 using namespace LOFAR;
 using namespace RTCP;
 
-#include "MPITransferStations.h"
+#include "Transpose/MPITransferStations.h"
 
 
 int main( int argc, char **argv )
diff --git a/RTCP/InputProc/test/tGenerator.cc b/RTCP/InputProc/test/tGenerator.cc
index d02db0befbf76aabd023be3eb9259a03dabee9ed..4605245df8f7f44a341f42c08eaee7873a91496b 100644
--- a/RTCP/InputProc/test/tGenerator.cc
+++ b/RTCP/InputProc/test/tGenerator.cc
@@ -1,9 +1,9 @@
 #include <lofar_config.h>
-#include "Generator.h"
-#include "PacketReader.h"
-#include "OMPThread.h"
 #include <Common/LofarLogger.h>
 #include <Interface/Stream.h>
+#include "OMPThread.h"
+#include "Station/Generator.h"
+#include "Station/PacketReader.h"
 #include <vector>
 #include <string>
 #include <unistd.h>
diff --git a/RTCP/InputProc/test/tPacketReader.cc b/RTCP/InputProc/test/tPacketReader.cc
index 4f4152eba2735d0dfdecede3419b97b74b7ba463..07adae4aeb179873fe4c10cc6703cdec0aa6cedd 100644
--- a/RTCP/InputProc/test/tPacketReader.cc
+++ b/RTCP/InputProc/test/tPacketReader.cc
@@ -1,5 +1,5 @@
 #include <lofar_config.h>
-#include <PacketReader.h>
+#include <Station/PacketReader.h>
 #include <Common/LofarLogger.h>
 #include <Stream/FileStream.h>
 
diff --git a/RTCP/InputProc/test/tRSP.cc b/RTCP/InputProc/test/tRSP.cc
index 1f729eace5e7554e603d00a2a3dda6324d6769f2..efe77ef2fd6bd7577ca34ebe10101f2d9b801559 100644
--- a/RTCP/InputProc/test/tRSP.cc
+++ b/RTCP/InputProc/test/tRSP.cc
@@ -21,7 +21,7 @@
 //# Always #include <lofar_config.h> first!
 #include <lofar_config.h>
 
-#include <RSP.h>
+#include <Station/RSP.h>
 #include <Interface/RSPTimeStamp.h>
 #include <Common/LofarLogger.h>
 #include <Common/DataConvert.h>