diff --git a/source/adios2/toolkit/transport/Transport.cpp b/source/adios2/toolkit/transport/Transport.cpp
index f45d726724b80991bc5c36d079f822202cd8892d..575b9a868a72d16a6a02148e901e53ccda79212c 100644
--- a/source/adios2/toolkit/transport/Transport.cpp
+++ b/source/adios2/toolkit/transport/Transport.cpp
@@ -24,6 +24,17 @@ Transport::Transport(const std::string type, const std::string library,
     MPI_Comm_size(m_MPIComm, &m_SizeMPI);
 }
 
+void Transport::IWrite(const char *buffer, size_t size, Status &status,
+                       size_t start)
+{
+    throw std::invalid_argument("ERROR: this class doesn't implement IWrite\n");
+}
+
+void Transport::IRead(char *buffer, size_t size, Status &status, size_t start)
+{
+    throw std::invalid_argument("ERROR: this class doesn't implement IRead\n");
+}
+
 void Transport::InitProfiler(const Mode openMode, const TimeUnit timeUnit)
 {
     m_Profiler.IsActive = true;
diff --git a/source/adios2/toolkit/transport/Transport.h b/source/adios2/toolkit/transport/Transport.h
index 1d695364d7be543e635410c126af91367be02220..7c1a0f5233db8cfa2f65c38a643c7ac395ad821e 100644
--- a/source/adios2/toolkit/transport/Transport.h
+++ b/source/adios2/toolkit/transport/Transport.h
@@ -38,6 +38,14 @@ public:
     int m_SizeMPI = 1;     ///< from MPI_Comm_Size
     profiling::IOChrono m_Profiler; ///< profiles Open, Write/Read, Close
 
+    struct Status
+    {
+        size_t Bytes;
+        bool Running;
+        bool Successful;
+        // TODO add more thing...time?
+    };
+
     /**
      * Base constructor that all derived classes pass
      * @param type from derived class
@@ -76,6 +84,9 @@ public:
     virtual void Write(const char *buffer, size_t size,
                        size_t start = MaxSizeT) = 0;
 
+    virtual void IWrite(const char *buffer, size_t size, Status &status,
+                        size_t start = MaxSizeT);
+
     /**
      * Reads from transport "size" bytes from a certain position. Note that size
      * and position and non-const due to the nature of underlying transport
@@ -88,6 +99,9 @@ public:
      */
     virtual void Read(char *buffer, size_t size, size_t start = MaxSizeT) = 0;
 
+    virtual void IRead(char *buffer, size_t size, Status &status,
+                       size_t start = MaxSizeT);
+
     /**
      * Returns the size of current data in transport
      * @return size as size_t
diff --git a/source/adios2/toolkit/transport/wan/WANZmq.cpp b/source/adios2/toolkit/transport/wan/WANZmq.cpp
index 690adf2b301ae53805e66c1421304f9e8368da2d..18ce82bb8b21ba8aeec40866d4faaca704493a6a 100644
--- a/source/adios2/toolkit/transport/wan/WANZmq.cpp
+++ b/source/adios2/toolkit/transport/wan/WANZmq.cpp
@@ -124,12 +124,19 @@ void WANZmq::Write(const char *buffer, size_t size, size_t start)
     }
 }
 
+void WANZmq::IWrite(const char *buffer, size_t size, Status &status,
+                    size_t start = MaxSizeT)
+{
+}
+
 void WANZmq::Read(char *buffer, size_t size, size_t start)
 {
     zmq_recv(m_Socket, buffer, size, 0);
     int status = zmq_send(m_Socket, "OK", 4, 0);
 }
 
+void WANZmq::IRead(char *buffer, size_t size, Status &status, size_t start) {}
+
 void WANZmq::Flush() {}
 
 void WANZmq::Close()
diff --git a/source/adios2/toolkit/transport/wan/WANZmq.h b/source/adios2/toolkit/transport/wan/WANZmq.h
index 397c82252dc5a9c3b2c7d0cc6155aa57494b7a45..ca7b993aca6f71b4f13815da249eafccaaaffb86 100644
--- a/source/adios2/toolkit/transport/wan/WANZmq.h
+++ b/source/adios2/toolkit/transport/wan/WANZmq.h
@@ -40,8 +40,14 @@ public:
 
     void Write(const char *buffer, size_t size, size_t start = MaxSizeT) final;
 
+    void IWrite(const char *buffer, size_t size, Status &status,
+                size_t start = MaxSizeT) final;
+
     void Read(char *buffer, size_t size, size_t start = MaxSizeT) final;
 
+    void IRead(char *buffer, size_t size, Status &status,
+               size_t start = MaxSizeT) final;
+
     void Flush() final;
 
     void Close() final;