diff --git a/include/ecrt.h b/include/ecrt.h
index 5a43de8b20dc31c5c7b7bd008dca650395f075bd..e69b014079fc415acbcdbded3fd3fb486b6ec5b6 100644
--- a/include/ecrt.h
+++ b/include/ecrt.h
@@ -88,6 +88,9 @@ void ecrt_release_master(ec_master_t *master);
  *  Master methods
  *****************************************************************************/
 
+void ecrt_master_callbacks(ec_master_t *master, int (*request_cb)(void *),
+                           void (*release_cb)(void *), void *cb_data);
+
 ec_domain_t *ecrt_master_create_domain(ec_master_t *master);
 
 int ecrt_master_activate(ec_master_t *master);
diff --git a/master/master.c b/master/master.c
index bc6c9844f3ebabde9e33f002edb28de1ad604849..56db490d93bed56d01007b2a0b7440c586a83e53 100644
--- a/master/master.c
+++ b/master/master.c
@@ -208,6 +208,10 @@ void ec_master_reset(ec_master_t *master /**< EtherCAT master */)
     master->stats.t_last = 0;
 
     master->mode = EC_MASTER_MODE_IDLE;
+
+    master->request_cb = NULL;
+    master->release_cb = NULL;
+    master->cb_data = NULL;
 }
 
 /*****************************************************************************/
@@ -1409,6 +1413,24 @@ ec_slave_t *ecrt_master_get_slave(const ec_master_t *master, /**< Master */
 
 /*****************************************************************************/
 
+/**
+   Sets the locking callbacks.
+   \ingroup RealtimeInterface
+*/
+
+void ecrt_master_callbacks(ec_master_t *master, /**< EtherCAT master */
+                           int (*request_cb)(void *), /**< request lock CB */
+                           void (*release_cb)(void *), /**< release lock CB */
+                           void *cb_data /**< data parameter */
+                           )
+{
+    master->request_cb = request_cb;
+    master->release_cb = release_cb;
+    master->cb_data = cb_data;
+}
+
+/*****************************************************************************/
+
 /**
    Sets the debug level of the master.
    The following levels are valid:
diff --git a/master/master.h b/master/master.h
index 788a74594ad12d6d0982d70cf22788d4fa1bc371..e036d3b5b00dc086fa68871eace95b4daed7f60a 100644
--- a/master/master.h
+++ b/master/master.h
@@ -98,6 +98,9 @@ struct ec_master
     unsigned int reserved; /**< true, if the master is reserved for RT */
     struct timer_list freerun_timer; /**< timer object for free run mode */
     ec_master_mode_t mode; /**< master mode */
+    int (*request_cb)(void *); /**< lock request callback */
+    void (*release_cb)(void *); /**< lock release callback */
+    void *cb_data; /**< data parameter of locking callbacks */
 };
 
 /*****************************************************************************/