diff --git a/drivers/hdc1000/hdc1000.c b/drivers/hdc1000/hdc1000.c
index 1ab96924f22384bde36c69065b1e3da874fe6f3e..8c26ff93724423974ac6201f486d673b9889d846 100644
--- a/drivers/hdc1000/hdc1000.c
+++ b/drivers/hdc1000/hdc1000.c
@@ -67,9 +67,13 @@ int hdc1000_test(hdc1000_t *dev)
     char reg[2];
     uint16_t tmp;
 
+    i2c_acquire(dev->i2c);
     if (i2c_read_regs(dev->i2c, dev->addr, HDC1000_MANUFACTURER_ID, reg, 2) != 2) {
+        i2c_release(dev->i2c);
         return -1;
     }
+    i2c_release(dev->i2c);
+
     tmp = ((uint16_t)reg[0] << 8) | reg[1];
     if (tmp != HDC1000_MID_VALUE) {
         return -1;
@@ -87,10 +91,13 @@ int hdc1000_init(hdc1000_t *dev, i2c_t i2c, uint8_t address)
     dev->addr = address;
     dev->initialized = false;
 
+    i2c_acquire(dev->i2c);
     /* initialize the I2C bus */
     if (i2c_init_master(i2c, I2C_SPEED) < 0) {
+        i2c_release(dev->i2c);
         return -1;
     }
+    i2c_release(dev->i2c);
 
     if (hdc1000_test(dev)) {
         return -2;
@@ -101,11 +108,14 @@ int hdc1000_init(hdc1000_t *dev, i2c_t i2c, uint8_t address)
     reg[0] = (uint8_t)(tmp >> 8);
     reg[1] = (uint8_t)tmp;
 
+    i2c_acquire(dev->i2c);
     if (i2c_write_regs(dev->i2c, dev->addr, HDC1000_CONFG, reg, 2) != 2) {
+        i2c_release(dev->i2c);
         return -3;
     }
     dev->initialized = true;
 
+    i2c_release(dev->i2c);
     return 0;
 }
 
@@ -117,9 +127,13 @@ int hdc1000_reset(hdc1000_t *dev)
     reg[1] = (uint8_t)tmp;
     dev->initialized = false;
 
+    i2c_acquire(dev->i2c);
     if (i2c_write_regs(dev->i2c, dev->addr, HDC1000_CONFG, reg, 2) != 2) {
+        i2c_release(dev->i2c);
         return -1;
     }
+
+    i2c_release(dev->i2c);
     return 0;
 }
 
@@ -128,13 +142,18 @@ int hdc1000_startmeasure(hdc1000_t *dev)
     if (dev->initialized == false) {
         return -1;
     }
+
+    i2c_acquire(dev->i2c);
     /* Trigger the measurements by executing a write access
      * to the address 0x00 (HDC1000_TEMPERATURE).
      * Conversion Time is 6.50ms by 14 bit resolution.
      */
     if (i2c_write_bytes(dev->i2c, dev->addr, HDC1000_TEMPERATURE, 1) != 1) {
+        i2c_release(dev->i2c);
         return -1;
     }
+
+    i2c_release(dev->i2c);
     return 0;
 }
 
@@ -145,13 +164,17 @@ int hdc1000_read(hdc1000_t *dev, uint16_t *rawtemp, uint16_t *rawhum)
     if (dev->initialized == false) {
         return -1;
     }
+
+    i2c_acquire(dev->i2c);
     if (i2c_read_bytes(dev->i2c, dev->addr, buf, 4) != 4) {
+        i2c_release(dev->i2c);
         return -1;
     }
     /* Register bytes are sent MSB first. */
     *rawtemp = ((uint16_t)buf[0] << 8) | buf[1];
     *rawhum = ((uint16_t)buf[2] << 8) | buf[3];
   
+    i2c_release(dev->i2c);
     return 0;
 }
 
diff --git a/drivers/include/hdc1000.h b/drivers/include/hdc1000.h
index d971a1a1b166ecb0ff431f1650fa13b322325f7e..005ec41f697e1d48159b30df513780485892970c 100644
--- a/drivers/include/hdc1000.h
+++ b/drivers/include/hdc1000.h
@@ -18,7 +18,10 @@
  *              be started by a write access to the address 0x00
  *              (HDC1000_TEMPERATURE). After completing the measurement
  *              the sensor will return to sleep mode. Typical
- *              Conversion Time by 14 bit resolution is 6.50ms.
+ *              Conversion Time by 14 bit resolution is 6.50ms
+ *              for humidity and 6.35ms for temperature.
+ *              HDC1000_CONVERSION_TIME is twice as large to prevent
+ *              the problems with timer resolution.
  *
  * @{
  *
@@ -41,11 +44,11 @@ extern "C"
 #endif
 
 #ifndef HDC1000_I2C_ADDRESS
-#define HDC1000_I2C_ADDRESS           0x41
+#define HDC1000_I2C_ADDRESS           0x43 /**< Default Device Address */
 #endif
 
 #ifndef HDC1000_CONVERSION_TIME
-#define HDC1000_CONVERSION_TIME       6500
+#define HDC1000_CONVERSION_TIME       26000 /**< Default Conversion Time */
 #endif
 
 /**
@@ -109,6 +112,8 @@ int hdc1000_startmeasure(hdc1000_t *dev);
  * @brief Read sensor's data.
  *
  * @param[in]  dev          device descriptor of sensor
+ * @param[out] rawtemp      raw temperature value
+ * @param[out] rawhum       raw humidity value
  *
  * @return                  0 on success
  * @return                  -1 on error
diff --git a/tests/driver_hdc1000/main.c b/tests/driver_hdc1000/main.c
index d00d0c9265904d3d058ac5c094844f7cbb441b49..d07722cf893dc9f0507e61211fe39b621e1eb231 100644
--- a/tests/driver_hdc1000/main.c
+++ b/tests/driver_hdc1000/main.c
@@ -56,6 +56,7 @@ int main(void)
             return -1;
         }
         vtimer_usleep(HDC1000_CONVERSION_TIME);
+
         hdc1000_read(&dev, &rawtemp, &rawhum);
         printf("Raw data T: %5i   RH: %5i\n", rawtemp, rawhum);
 
@@ -63,6 +64,7 @@ int main(void)
         printf("Data T: %d   RH: %d\n", temp, hum);
 
         vtimer_usleep(SLEEP);
+
     }
 
     return 0;