diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -43,6 +43,7 @@
   m <- M.newMosquitto True serverName (Just ())
   M.setTls m caCert userCert userKey
   M.setTlsInsecure m True
+  M.setReconnectDelay m True 2 30
 
   M.onMessage m print
   M.onLog m $ const putStrLn
diff --git a/c-mosquitto.cabal b/c-mosquitto.cabal
--- a/c-mosquitto.cabal
+++ b/c-mosquitto.cabal
@@ -1,5 +1,5 @@
 name:                c-mosquitto
-version:             0.1.1.0
+version:             0.1.2.0
 synopsis:            Simpe mosquito MQTT binding able to work with the Amazons IoT
 -- description:
 homepage:            https://github.com/tolysz/c-mosquitto#readme
diff --git a/src/Network/Mosquitto.c b/src/Network/Mosquitto.c
--- a/src/Network/Mosquitto.c
+++ b/src/Network/Mosquitto.c
@@ -81,8 +81,20 @@
 }
 
 
-int inline_c_Network_Mosquitto_12_98b22e49ca780ebc944cedb809c5a5097eea6100(struct mosquitto * pMosq_inline_c_0, char * hostname_inline_c_1, int port_inline_c_2, int keepAlive_inline_c_3) {
+int inline_c_Network_Mosquitto_12_5df2159b027edc29e63231d331ce11cb9a71baa9(struct mosquitto * pMosq_inline_c_0, int reconnectDelay_inline_c_1, int reconnectDelayMax_inline_c_2, bool exponential_inline_c_3) {
 return (
+             mosquitto_reconnect_delay_set
+               ( pMosq_inline_c_0
+               , reconnectDelay_inline_c_1
+               , reconnectDelayMax_inline_c_2
+               , exponential_inline_c_3
+               )
+        );
+}
+
+
+int inline_c_Network_Mosquitto_13_98b22e49ca780ebc944cedb809c5a5097eea6100(struct mosquitto * pMosq_inline_c_0, char * hostname_inline_c_1, int port_inline_c_2, int keepAlive_inline_c_3) {
+return (
                mosquitto_connect( pMosq_inline_c_0
                                 , hostname_inline_c_1
                                 , port_inline_c_2
@@ -92,7 +104,7 @@
 }
 
 
-void inline_c_Network_Mosquitto_13_9b2300d6db40d43ebb6d72e3b5a020f27089aa9f(struct mosquitto * pMosq_inline_c_0, void (* on_subscribe_inline_c_1)(struct mosquitto *, void *, int , int , const int *)) {
+void inline_c_Network_Mosquitto_14_9b2300d6db40d43ebb6d72e3b5a020f27089aa9f(struct mosquitto * pMosq_inline_c_0, void (* on_subscribe_inline_c_1)(struct mosquitto *, void *, int , int , const int *)) {
 
         mosquitto_subscribe_callback_set
             ( pMosq_inline_c_0
@@ -102,7 +114,7 @@
 }
 
 
-void inline_c_Network_Mosquitto_14_c37f43d389a2b1e4a300492e3a711a4a76e04f57(struct mosquitto * pMosq_inline_c_0, void (* on_connect_inline_c_1)(struct mosquitto *, void *, int )) {
+void inline_c_Network_Mosquitto_15_c37f43d389a2b1e4a300492e3a711a4a76e04f57(struct mosquitto * pMosq_inline_c_0, void (* on_connect_inline_c_1)(struct mosquitto *, void *, int )) {
 
         mosquitto_connect_callback_set
             ( pMosq_inline_c_0
@@ -112,7 +124,7 @@
 }
 
 
-void inline_c_Network_Mosquitto_15_73f1686f2c07e9747998ec5d1a023376b6401ac8(struct mosquitto * pMosq_inline_c_0, void (* on_disconnect_inline_c_1)(struct mosquitto *, void *, int )) {
+void inline_c_Network_Mosquitto_16_73f1686f2c07e9747998ec5d1a023376b6401ac8(struct mosquitto * pMosq_inline_c_0, void (* on_disconnect_inline_c_1)(struct mosquitto *, void *, int )) {
 
         mosquitto_disconnect_callback_set
             ( pMosq_inline_c_0
@@ -122,7 +134,7 @@
 }
 
 
-void inline_c_Network_Mosquitto_16_374d617a6dd1e6b1b85395b1c3a2043f8a86cd2b(struct mosquitto * pMosq_inline_c_0, void (* on_log_inline_c_1)(struct mosquitto *, void *, int , const char *)) {
+void inline_c_Network_Mosquitto_17_374d617a6dd1e6b1b85395b1c3a2043f8a86cd2b(struct mosquitto * pMosq_inline_c_0, void (* on_log_inline_c_1)(struct mosquitto *, void *, int , const char *)) {
 
         mosquitto_log_callback_set
             ( pMosq_inline_c_0
@@ -132,7 +144,7 @@
 }
 
 
-void inline_c_Network_Mosquitto_17_2dd27966a8764a1bdd083baf0f4690e8e2ef1475(struct mosquitto * pMosq_inline_c_0, void (* on_message_inline_c_1)(struct mosquitto *, void *, const struct mosquitto_message *)) {
+void inline_c_Network_Mosquitto_18_2dd27966a8764a1bdd083baf0f4690e8e2ef1475(struct mosquitto * pMosq_inline_c_0, void (* on_message_inline_c_1)(struct mosquitto *, void *, const struct mosquitto_message *)) {
 
         mosquitto_message_callback_set
             ( pMosq_inline_c_0
@@ -142,22 +154,43 @@
 }
 
 
-void inline_c_Network_Mosquitto_18_4b8c8d8774deee8ab1d79ed9d536914d1ca65d06(struct mosquitto * pMosq_inline_c_0) {
+void inline_c_Network_Mosquitto_19_4b8c8d8774deee8ab1d79ed9d536914d1ca65d06(struct mosquitto * pMosq_inline_c_0) {
 
              mosquitto_loop_forever(pMosq_inline_c_0, -1, 1)
         ;
 }
 
 
-void inline_c_Network_Mosquitto_19_969dca874ea20234f06362014c8097eab6c27f8f(struct mosquitto * pMosq_inline_c_0, bool isInsecure_inline_c_1) {
+void inline_c_Network_Mosquitto_20_969dca874ea20234f06362014c8097eab6c27f8f(struct mosquitto * pMosq_inline_c_0, bool isInsecure_inline_c_1) {
 
              mosquitto_tls_insecure_set(pMosq_inline_c_0, isInsecure_inline_c_1)
         ;
 }
 
 
-void inline_c_Network_Mosquitto_20_61ffbebe13cb650a9058a8b715732b7a82987f92(struct mosquitto * pMosq_inline_c_0, char * topic_inline_c_1, long payload_inline_c_2, char * payload_inline_c_3, int qos_inline_c_4, bool retain_inline_c_5) {
+int inline_c_Network_Mosquitto_21_26af9a8807a3b025f22ffd1ecf26e974a708200b(struct mosquitto * pMosq_inline_c_0, char * topic_inline_c_1, long payload_inline_c_2, char * payload_inline_c_3, int qos_inline_c_4, bool retain_inline_c_5) {
+return (
+             mosquitto_will_set
+               ( pMosq_inline_c_0
+               , topic_inline_c_1
+               , payload_inline_c_2
+               , payload_inline_c_3
+               , qos_inline_c_4
+               , retain_inline_c_5
+               )
+        );
+}
 
+
+int inline_c_Network_Mosquitto_22_695260a2b677f2d71d3523f2e5330bb74a20055c(struct mosquitto * pMosq_inline_c_0) {
+return (
+             mosquitto_will_clear(pMosq_inline_c_0)
+        );
+}
+
+
+void inline_c_Network_Mosquitto_23_61ffbebe13cb650a9058a8b715732b7a82987f92(struct mosquitto * pMosq_inline_c_0, char * topic_inline_c_1, long payload_inline_c_2, char * payload_inline_c_3, int qos_inline_c_4, bool retain_inline_c_5) {
+
              mosquitto_publish
                ( pMosq_inline_c_0
                , 0
@@ -171,7 +204,7 @@
 }
 
 
-void inline_c_Network_Mosquitto_21_491fe5e8a7e8888c30139bd3dcd275298b39e3a8(struct mosquitto * pMosq_inline_c_0, char * topic_inline_c_1, int qos_inline_c_2) {
+void inline_c_Network_Mosquitto_24_491fe5e8a7e8888c30139bd3dcd275298b39e3a8(struct mosquitto * pMosq_inline_c_0, char * topic_inline_c_1, int qos_inline_c_2) {
 
              mosquitto_subscribe
                ( pMosq_inline_c_0
diff --git a/src/Network/Mosquitto.hs b/src/Network/Mosquitto.hs
--- a/src/Network/Mosquitto.hs
+++ b/src/Network/Mosquitto.hs
@@ -101,6 +101,23 @@
                                 )
        }|]
 
+setReconnectDelay 
+  :: Mosquitto a -- ^ mosquitto instance
+  -> Bool        -- ^ exponential backoff
+  -> Int         -- ^ initial backoff 
+  -> Int         -- ^ maximum backoff
+  -> IO Int
+setReconnectDelay mosq  exponential (fromIntegral -> reconnectDelay) (fromIntegral -> reconnectDelayMax) =
+  fmap fromIntegral <$> withPtr mosq $ \pMosq ->
+       [C.exp|int{
+             mosquitto_reconnect_delay_set
+               ( $(struct mosquitto *pMosq)
+               , $(int reconnectDelay)
+               , $(int reconnectDelayMax)
+               , $(bool exponential)
+               )
+        }|]
+
 connect :: Mosquitto a -> String -> Int -> Int -> IO Int
 connect mosq (C8.pack -> hostname) (fromIntegral -> port) (fromIntegral -> keepAlive) =
   fmap fromIntegral <$> withPtr mosq $ \pMosq ->
@@ -183,6 +200,26 @@
              mosquitto_tls_insecure_set($(struct mosquitto *pMosq), $(bool isInsecure))
         }|]
 
+setWill :: Mosquitto a -> Bool -> Int -> String -> S.ByteString -> IO Int
+setWill mosq retain (fromIntegral -> qos) (C8.pack -> topic) payload =
+  fmap fromIntegral <$> withPtr mosq $ \pMosq ->
+       [C.exp|int{
+             mosquitto_will_set
+               ( $(struct mosquitto *pMosq)
+               , $bs-ptr:topic
+               , $bs-len:payload
+               , $bs-ptr:payload
+               , $(int qos)
+               , $(bool retain)
+               )
+        }|]
+
+clearWill :: Mosquitto a -> IO Int
+clearWill mosq = fmap fromIntegral <$> withPtr mosq $ \pMosq ->
+       [C.exp|int{
+             mosquitto_will_clear($(struct mosquitto *pMosq))
+        }|]
+
 publish :: Mosquitto a -> Bool -> Int -> String -> S.ByteString -> IO ()
 publish mosq retain (fromIntegral -> qos) (C8.pack -> topic) payload =
   withPtr mosq $ \pMosq ->
@@ -209,3 +246,4 @@
                , $(int qos)
                )
         }|]
+
