diff --git a/sys/net/include/rpl.h b/sys/net/include/rpl.h
index d81b19bfd02a0bc53481c9e9527aeb2c047ba4c5..6789d4f2428f1473c62c9168d72054107ce1bb6b 100644
--- a/sys/net/include/rpl.h
+++ b/sys/net/include/rpl.h
@@ -92,14 +92,15 @@ uint8_t rpl_init(int if_id, ipv6_addr_t *address);
 void rpl_init_root(rpl_options_t *rpl_opts);
 
 /**
- * @brief Sends a DIO-message to a given destination
+ * @brief Sends a DIO-message to a given destination in a given dodag
  *
- * This function sends a DIO message to a given destination.
+ * This function sends a DIO message to a given destination in a given dodag.
  *
+ * @param[in] dodag             Dodag of the DIO-message.
  * @param[in] destination       IPv6-address of the destination of the DIO. Should be a direct neighbor.
  *
  */
-void rpl_send_DIO(ipv6_addr_t *destination);
+void rpl_send_DIO(rpl_dodag_t *dodag, ipv6_addr_t *destination);
 
 /**
  * @brief Sends a DAO-message to a given destination
diff --git a/sys/net/routing/rpl/rpl_control_messages.c b/sys/net/routing/rpl/rpl_control_messages.c
index fc7c93eef49b4f7939674a42f7e8384ede2ce6de..fee742270001dc31f9dcaf41af77600438559cae 100644
--- a/sys/net/routing/rpl/rpl_control_messages.c
+++ b/sys/net/routing/rpl/rpl_control_messages.c
@@ -257,7 +257,7 @@ uint8_t rpl_is_root(void)
     return i_am_root;
 }
 
-void rpl_send_DIO(ipv6_addr_t *destination)
+void rpl_send_DIO(rpl_dodag_t *mydodag, ipv6_addr_t *destination)
 {
 #if ENABLE_DEBUG
 
@@ -266,11 +266,8 @@ void rpl_send_DIO(ipv6_addr_t *destination)
     }
 
 #endif
-    rpl_dodag_t *mydodag;
     icmp_send_buf = get_rpl_send_icmpv6_buf(ipv6_ext_hdr_len);
 
-    mydodag = rpl_get_my_dodag();
-
     if (mydodag == NULL) {
         DEBUGF("Error - trying to send DIO without being part of a dodag.\n");
         return;
@@ -943,7 +940,7 @@ void rpl_recv_DIS(void)
         }
     }
 
-    rpl_send_DIO(&ipv6_buf->srcaddr);
+    rpl_send_DIO(my_dodag, &ipv6_buf->srcaddr);
 
 }
 
diff --git a/sys/net/routing/rpl/rpl_dodag.c b/sys/net/routing/rpl/rpl_dodag.c
index bc97ff447187874ca231e68839ba375217bf967d..52a017992d0a8d4abcdf04605d4b70a282b5a551 100644
--- a/sys/net/routing/rpl/rpl_dodag.c
+++ b/sys/net/routing/rpl/rpl_dodag.c
@@ -37,11 +37,10 @@ static rpl_parent_t parents[RPL_MAX_PARENTS];
 
 void rpl_trickle_send_dio(void *args)
 {
-    (void) args;
     ipv6_addr_t mcast;
 
     ipv6_addr_set_all_rpl_nodes_addr(&mcast);
-    rpl_send_DIO(&mcast);
+    rpl_send_DIO((rpl_dodag_t *) args, &mcast);
 }
 
 void rpl_instances_init(void)
@@ -107,6 +106,7 @@ rpl_dodag_t *rpl_new_dodag(rpl_instance_t *inst, ipv6_addr_t *dodagid)
             dodag->ack_received = true;
             dodag->dao_counter = 0;
             dodag->trickle.callback.func = &rpl_trickle_send_dio;
+            dodag->trickle.callback.args = dodag;
             memcpy(&dodag->dodag_id, dodagid, sizeof(*dodagid));
             return dodag;
         }