Index: roard/driver.c
===================================================================
--- roard/driver.c	(revision 924)
+++ roard/driver.c	(revision 930)
@@ -70,5 +70,5 @@
     memset(*inst, 0, sizeof(struct roar_vio_calls));
 
-    if ( (i = g_driver[i].vio_init(*inst, device, info)) == -1 ) {
+    if ( (i = g_driver[i].vio_init(*inst, device, info, -1)) == -1 ) {
      free(*inst);
      return -1;
Index: roard/driver_esd.c
===================================================================
--- roard/driver_esd.c	(revision 912)
+++ roard/driver_esd.c	(revision 930)
@@ -60,5 +60,9 @@
 }
 
-int driver_esd_open_vio(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info) {
+int driver_esd_open_vio(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info, int fh) {
+
+ if ( fh != -1 )
+  return -1;
+
  inst->read  = driver_esd_read;
  inst->write = driver_esd_write;
Index: roard/driver_oss.c
===================================================================
--- roard/driver_oss.c	(revision 924)
+++ roard/driver_oss.c	(revision 930)
@@ -28,7 +28,6 @@
 #define er() close(fh); return -1
 
-int driver_oss_open(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info) {
+int driver_oss_open(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info, int fh) {
  int tmp;
- int fh;
 
 #ifdef ROAR_DEFAULT_OSS_DEV
@@ -44,7 +43,9 @@
  roar_vio_init_calls(inst);
 
- if ( (fh = open(device, O_WRONLY, 0644)) == -1 ) {
-  ROAR_ERR("driver_oss_open(*): Can not open OSS device: %s: %s", device, strerror(errno));
-  return -1;
+ if (  fh == -1 ) {
+  if ( (fh = open(device, O_WRONLY, 0644)) == -1 ) {
+   ROAR_ERR("driver_oss_open(*): Can not open OSS device: %s: %s", device, strerror(errno));
+   return -1;
+  }
  }
 
Index: roard/include/driver.h
===================================================================
--- roard/include/driver.h	(revision 929)
+++ roard/include/driver.h	(revision 930)
@@ -81,5 +81,5 @@
  int (*read )(DRIVER_USERDATA_T   inst, char * buf, int len);
  int (*flush)(DRIVER_USERDATA_T   inst);
- int (*vio_init)(struct roar_vio_calls * calls, char * device, struct roar_audio_info * info);
+ int (*vio_init)(struct roar_vio_calls * calls, char * device, struct roar_audio_info * info, int fh);
 };
 
Index: roard/include/driver_esd.h
===================================================================
--- roard/include/driver_esd.h	(revision 912)
+++ roard/include/driver_esd.h	(revision 930)
@@ -27,5 +27,5 @@
 
 int driver_esd_open_sysio(DRIVER_USERDATA_T * inst,   char * device, struct roar_audio_info * info);
-int driver_esd_open_vio(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info);
+int driver_esd_open_vio(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info, int fh);
 int driver_esd_close(DRIVER_USERDATA_T   inst);
 int driver_esd_pause(DRIVER_USERDATA_T   inst, int newstate);
Index: roard/include/driver_oss.h
===================================================================
--- roard/include/driver_oss.h	(revision 917)
+++ roard/include/driver_oss.h	(revision 930)
@@ -26,5 +26,5 @@
 #define _DRIVER_OSS_H_
 
-int driver_oss_open(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info);
+int driver_oss_open(struct roar_vio_calls * inst, char * device, struct roar_audio_info * info, int fh);
 int driver_oss_close(DRIVER_USERDATA_T   inst);
 
Index: roard/include/streams.h
===================================================================
--- roard/include/streams.h	(revision 766)
+++ roard/include/streams.h	(revision 930)
@@ -55,4 +55,5 @@
  struct roar_vio_calls vio;
  int primary;
+ int driver_id;
 } * g_streams[ROAR_STREAMS_MAX];
 
Index: roard/streams.c
===================================================================
--- roard/streams.c	(revision 881)
+++ roard/streams.c	(revision 930)
@@ -95,4 +95,5 @@
 
    roar_vio_init_calls(&(s->vio));
+   s->driver_id = -1;
 
    g_streams[i] = s;
@@ -689,4 +690,7 @@
   return 0;
 
+ if ( s->dir == ROAR_DIR_OUTPUT && g_standby )
+  return 0;
+
  ROAR_DBG("streams_send_mon(id=%i): fh = %i", id, fh);
 
