diff --git a/include/pcm_ioplug.h b/include/pcm_ioplug.h
old mode 100644
new mode 100755
index e529e6a..83c47c4
--- a/include/pcm_ioplug.h
+++ b/include/pcm_ioplug.h
@@ -31,6 +31,8 @@
 #ifndef __ALSA_PCM_IOPLUG_H
 #define __ALSA_PCM_IOPLUG_H
 
+#define PATCH_IOPLUG_STATUS
+
 /**
  * \defgroup PCM_IOPlug External I/O plugin SDK
  * \ingroup Plugin_SDK
@@ -119,6 +121,10 @@ struct snd_pcm_ioplug {
 	unsigned int rate;		/**< rate; filled after hw_params is called */
 	snd_pcm_uframes_t period_size;	/**< period size; filled after hw_params is called */
 	snd_pcm_uframes_t buffer_size;	/**< buffer size; filled after hw_params is called */
+#ifdef PATCH_IOPLUG_STATUS
+	struct timespec status_tstamp;	/**< filled after status is called */
+	snd_pcm_sframes_t status_delay; /**< filled after status is called */
+#endif
 };
 
 /** Callback table of ioplug */
@@ -206,6 +212,9 @@ struct snd_pcm_ioplug_callback {
 	 * set the channel map; optional; since v1.0.2
 	 */
 	int (*set_chmap)(snd_pcm_ioplug_t *io, const snd_pcm_chmap_t *map);
+#ifdef PATCH_IOPLUG_STATUS
+	int (*status)(snd_pcm_ioplug_t *io);
+#endif
 };
 
 
diff --git a/src/pcm/pcm_ioplug.c b/src/pcm/pcm_ioplug.c
old mode 100644
new mode 100755
index 43550c0..3b23ac6
--- a/src/pcm/pcm_ioplug.c
+++ b/src/pcm/pcm_ioplug.c
@@ -88,6 +88,9 @@ static int snd_pcm_ioplug_channel_info(snd_pcm_t *pcm, snd_pcm_channel_info_t *i
 static int snd_pcm_ioplug_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
 {
 	ioplug_priv_t *io = pcm->private_data;
+#ifdef PATCH_IOPLUG_STATUS
+	snd_pcm_ioplug_t *data = io->data;
+#endif
 
 	memset(status, 0, sizeof(*status));
 	snd_pcm_ioplug_hw_ptr_update(pcm);
@@ -95,6 +98,14 @@ static int snd_pcm_ioplug_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
 	status->trigger_tstamp = io->trigger_tstamp;
 	status->avail = snd_pcm_mmap_avail(pcm);
 	status->avail_max = io->avail_max;
+#ifdef PATCH_IOPLUG_STATUS
+	if (data->callback->status) {
+		if (data->callback->status(data) == 0) {
+			status->tstamp = data->status_tstamp;
+			status->delay = data->status_delay;
+		}
+	}
+#endif
 	return 0;
 }