diff --git a/ccm.c b/ccm.c
index dfd9ef7..c9362e5 100644
--- a/ccm.c
+++ b/ccm.c
@@ -31,11 +31,11 @@
 #define MASK_L(_L) ((1 << 8 * _L) - 1)
 
 #define SET_COUNTER(A,L,cnt,C) {					\
-    int i;								\
+    unsigned int i_;                                                    \
     memset((A) + DTLS_CCM_BLOCKSIZE - (L), 0, (L));			\
     (C) = (cnt) & MASK_L(L);						\
-    for (i = DTLS_CCM_BLOCKSIZE - 1; (C) && (i > (L)); --i, (C) >>= 8)	\
-      (A)[i] |= (C) & 0xFF;						\
+    for (i_ = DTLS_CCM_BLOCKSIZE - 1; (C) && (i_ > (L)); --i_, (C) >>= 8) \
+      (A)[i_] |= (C) & 0xFF;						\
   }
 
 static inline void 
@@ -45,7 +45,7 @@
        size_t lm,      /* l(m) message length */
        unsigned char nonce[DTLS_CCM_BLOCKSIZE],
        unsigned char *result) {
-  int i;
+  unsigned int i;
 
   result[0] = CCM_FLAGS(la, M, L);
 
diff --git a/crypto.c b/crypto.c
index 0b2e5f7..7394d40 100644
--- a/crypto.c
+++ b/crypto.c
@@ -63,11 +63,11 @@
 }
 
 #ifndef WITH_CONTIKI
-void crypto_init()
+void crypto_init(void)
 {
 }
 
-static dtls_handshake_parameters_t *dtls_handshake_malloc() {
+static dtls_handshake_parameters_t *dtls_handshake_malloc(void) {
   return malloc(sizeof(dtls_handshake_parameters_t));
 }
 
@@ -75,7 +75,7 @@
   free(handshake);
 }
 
-static dtls_security_parameters_t *dtls_security_malloc() {
+static dtls_security_parameters_t *dtls_security_malloc(void) {
   return malloc(sizeof(dtls_security_parameters_t));
 }
 
@@ -88,12 +88,12 @@
 MEMB(handshake_storage, dtls_handshake_parameters_t, DTLS_HANDSHAKE_MAX);
 MEMB(security_storage, dtls_security_parameters_t, DTLS_SECURITY_MAX);
 
-void crypto_init() {
+void crypto_init(void) {
   memb_init(&handshake_storage);
   memb_init(&security_storage);
 }
 
-static dtls_handshake_parameters_t *dtls_handshake_malloc() {
+static dtls_handshake_parameters_t *dtls_handshake_malloc(void) {
   return memb_alloc(&handshake_storage);
 }
 
@@ -101,7 +101,7 @@
   memb_free(&handshake_storage, handshake);
 }
 
-static dtls_security_parameters_t *dtls_security_malloc() {
+static dtls_security_parameters_t *dtls_security_malloc(void) {
   return memb_alloc(&security_storage);
 }
 
@@ -110,7 +110,7 @@
 }
 #endif /* WITH_CONTIKI */
 
-dtls_handshake_parameters_t *dtls_handshake_new()
+dtls_handshake_parameters_t *dtls_handshake_new(void)
 {
   dtls_handshake_parameters_t *handshake;
 
@@ -142,7 +142,7 @@
   dtls_handshake_dealloc(handshake);
 }
 
-dtls_security_parameters_t *dtls_security_new()
+dtls_security_parameters_t *dtls_security_new(void)
 {
   dtls_security_parameters_t *security;
 
@@ -182,6 +182,7 @@
   unsigned char tmp[DTLS_HMAC_DIGEST_SIZE];
   size_t dlen;			/* digest length */
   size_t len = 0;			/* result length */
+  (void)h;
 
   hmac_a = dtls_hmac_new(key, keylen);
   if (!hmac_a)
@@ -275,6 +276,7 @@
 		 unsigned char *nounce,
 		 const unsigned char *aad, size_t la) {
   long int len;
+  (void)src;
 
   assert(ccm_ctx);
 
@@ -292,6 +294,7 @@
 		 unsigned char *nounce,
 		 const unsigned char *aad, size_t la) {
   long int len;
+  (void)src;
 
   assert(ccm_ctx);
 
diff --git a/dtls.c b/dtls.c
index 86e2b71..d0a8c33 100644
--- a/dtls.c
+++ b/dtls.c
@@ -168,7 +168,7 @@
 static dtls_context_t the_dtls_context;
 
 static inline dtls_context_t *
-malloc_context() {
+malloc_context(void) {
   return &the_dtls_context;
 }
 
@@ -179,7 +179,7 @@
 #else /* WITH_CONTIKI */
 
 static inline dtls_context_t *
-malloc_context() {
+malloc_context(void) {
   return (dtls_context_t *)malloc(sizeof(dtls_context_t));
 }
 
@@ -190,7 +190,7 @@
 #endif
 
 void
-dtls_init() {
+dtls_init(void) {
   dtls_clock_init();
   crypto_init();
   netq_init();
@@ -312,7 +312,8 @@
 		   uint8 *msg, size_t msglen,
 		   uint8 *cookie, int *clen) {
   unsigned char buf[DTLS_HMAC_MAX];
-  size_t len, e;
+  size_t e;
+  int len;
 
   /* create cookie with HMAC-SHA256 over:
    * - SECRET
@@ -487,6 +488,7 @@
 #ifdef DTLS_ECC
   return cipher == TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8;
 #else
+  (void)cipher;
   return 0;
 #endif /* DTLS_ECC */
 }
@@ -518,6 +520,8 @@
   return ctx && ctx->h && ((!is_client && ctx->h->get_ecdsa_key) || 
 			   (is_client && ctx->h->verify_ecdsa_key));
 #else
+  (void)ctx;
+  (void)is_client;
   return 0;
 #endif /* DTLS_ECC */
 }
@@ -529,6 +533,7 @@
 #ifdef DTLS_ECC
   return ctx && ctx->h && ctx->h->get_ecdsa_key && ctx->h->verify_ecdsa_key;
 #else
+  (void)ctx;
   return 0;
 #endif /* DTLS_ECC */
 }
@@ -569,6 +574,7 @@
 hs_attempt_with_existing_peer(uint8_t *msg, size_t msglen,
     dtls_peer_t *peer)
 {
+  (void)msglen;
     if ((peer) && (peer->state == DTLS_STATE_CONNECTED)) {
       if (msg[0] == DTLS_CT_HANDSHAKE) {
         uint16_t msg_epoch = dtls_uint16_to_int(DTLS_RECORD_HEADER(msg)->epoch);
@@ -659,6 +665,7 @@
   int pre_master_len = 0;
   dtls_security_parameters_t *security = dtls_security_params_next(peer);
   uint8 master_secret[DTLS_MASTER_SECRET_LENGTH];
+  (void)role; /* The macro dtls_kb_size() does not use role. */
 
   if (!security) {
     return dtls_alert_fatal_create(DTLS_ALERT_INTERNAL_ERROR);
@@ -711,8 +718,26 @@
     break;
   }
 #endif /* DTLS_ECC */
+  case TLS_NULL_WITH_NULL_NULL:
+    assert(!"calculate_key_block: tried to use NULL cipher\n");
+    return dtls_alert_fatal_create(DTLS_ALERT_INSUFFICIENT_SECURITY);
+
+    /* The following cases cover the enum symbols that are not
+     * included in this build. These must be kept just above the
+     * default case as they do nothing but fall through.
+     */
+#ifndef DTLS_PSK
+  case TLS_PSK_WITH_AES_128_CCM_8:
+    /* fall through to default */
+#endif /* !DTLS_PSK */
+
+#ifndef DTLS_ECC
+  case TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8:
+    /* fall through to default */
+#endif /* !DTLS_ECC */
+
   default:
-    dtls_crit("calculate_key_block: unknown cipher\n");
+    dtls_crit("calculate_key_block: unknown cipher %x04 \n", handshake->cipher);
     return dtls_alert_fatal_create(DTLS_ALERT_INTERNAL_ERROR);
   }
 
@@ -954,7 +979,8 @@
 dtls_update_parameters(dtls_context_t *ctx, 
 		       dtls_peer_t *peer,
 		       uint8 *data, size_t data_length) {
-  int i, j;
+  int i;
+  unsigned int j;
   int ok;
   dtls_handshake_parameters_t *config = peer->handshake_params;
   dtls_security_parameters_t *security = dtls_security_params(peer);
@@ -1059,7 +1085,7 @@
 check_client_keyexchange(dtls_context_t *ctx, 
 			 dtls_handshake_parameters_t *handshake,
 			 uint8 *data, size_t length) {
-
+  (void)ctx;
 #ifdef DTLS_ECC
   if (is_tls_ecdhe_ecdsa_with_aes_128_ccm_8(handshake->cipher)) {
 
@@ -1160,6 +1186,7 @@
   size_t digest_length, label_size;
   const unsigned char *label;
   unsigned char buf[DTLS_HMAC_MAX];
+  (void)ctx;
 
   if (data_length < DTLS_HS_LENGTH + DTLS_FIN_LENGTH)
     return dtls_alert_fatal_create(DTLS_ALERT_HANDSHAKE_FAILURE);
@@ -1532,7 +1559,7 @@
   /* Guess number of bytes application data actually sent:
    * dtls_prepare_record() tells us in len the number of bytes to
    * send, res will contain the bytes actually sent. */
-  return res <= 0 ? res : overall_len - (len - res);
+  return res <= 0 ? res : (int)(overall_len - (len - (unsigned int)res));
 }
 
 static inline int
@@ -1874,7 +1901,7 @@
     p += sizeof(uint8);
   }
 
-  assert(p - buf <= sizeof(buf));
+  assert((buf <= p) && ((unsigned int)(p - buf) <= sizeof(buf)));
 
   /* TODO use the same record sequence number as in the ClientHello,
      see 4.2.1. Denial-of-Service Countermeasures */
@@ -2060,7 +2087,7 @@
   memcpy(p, psk_hint, len);
   p += len;
 
-  assert(p - buf <= sizeof(buf));
+  assert((buf <= p) && ((unsigned int)(p - buf) <= sizeof(buf)));
 
   return dtls_send_handshake_msg(ctx, peer, DTLS_HT_SERVER_KEY_EXCHANGE,
 				 buf, p - buf);
@@ -2278,12 +2305,31 @@
     break;
   }
 #endif /* DTLS_ECC */
+
+  case TLS_NULL_WITH_NULL_NULL:
+    assert(!"NULL cipher requested");
+    return dtls_alert_fatal_create(DTLS_ALERT_INSUFFICIENT_SECURITY);
+
+    /* The following cases cover the enum symbols that are not
+     * included in this build. These must be kept just above the
+     * default case as they do nothing but fall through.
+     */
+#ifndef DTLS_PSK
+  case TLS_PSK_WITH_AES_128_CCM_8:
+    /* fall through to default */
+#endif /* !DTLS_PSK */
+
+#ifndef DTLS_ECC
+  case TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8:
+    /* fall through to default */
+#endif /* !DTLS_ECC */
+
   default:
-    dtls_crit("cipher not supported\n");
+    dtls_crit("cipher %x04 not supported\n", handshake->cipher);
     return dtls_alert_fatal_create(DTLS_ALERT_INTERNAL_ERROR);
   }
 
-  assert(p - buf <= sizeof(buf));
+  assert((buf <= p) && ((unsigned int)(p - buf) <= sizeof(buf)));
 
   return dtls_send_handshake_msg(ctx, peer, DTLS_HT_CLIENT_KEY_EXCHANGE,
 				 buf, p - buf);
@@ -2351,7 +2397,7 @@
 
   p += DTLS_FIN_LENGTH;
 
-  assert(p - buf <= sizeof(buf));
+  assert((buf <= p) && ((unsigned int)(p - buf) <= sizeof(buf)));
 
   return dtls_send_handshake_msg(ctx, peer, DTLS_HT_FINISHED,
 				 buf, p - buf);
@@ -2499,7 +2545,7 @@
     p += sizeof(uint8);
   }
 
-  assert(p - buf <= sizeof(buf));
+  assert((buf <= p) && ((unsigned int)(p - buf) <= sizeof(buf)));
 
   if (cookie_length != 0)
     clear_hs_hash(peer);
@@ -2738,6 +2784,7 @@
 {
   dtls_handshake_parameters_t *config = peer->handshake_params;
   uint16_t len;
+  (void)ctx;
 
   update_hs_hash(peer, data, data_length);
 
@@ -2779,6 +2826,7 @@
   int auth_alg;
   int sig_alg;
   int hash_alg;
+  (void)ctx;
 
   update_hs_hash(peer, data, data_length);
 
@@ -3522,6 +3570,7 @@
 {
   int err;
   dtls_handshake_parameters_t *handshake = peer->handshake_params;
+  (void)record_header;
 
   /* A CCS message is handled after a KeyExchange message was
    * received from the client. When security parameters have been
@@ -3559,6 +3608,7 @@
 handle_alert(dtls_context_t *ctx, dtls_peer_t *peer, 
 	     uint8 *record_header, uint8 *data, size_t data_length) {
   int free_peer = 0;		/* indicates whether to free peer */
+  (void)record_header;
 
   if (data_length < 2)
     return dtls_alert_fatal_create(DTLS_ALERT_DECODE_ERROR);
@@ -3727,7 +3777,7 @@
           state = DTLS_STATE_WAIT_CLIENTHELLO;
           role = DTLS_SERVER;       
         } else {
-	  int err =  dtls_alert_fatal_create(DTLS_ALERT_DECRYPT_ERROR);
+	  err =  dtls_alert_fatal_create(DTLS_ALERT_DECRYPT_ERROR);
           dtls_info("decrypt_verify() failed\n");
 	  if (peer->state < DTLS_STATE_CONNECTED) {
 	    dtls_alert_send_from_err(ctx, peer, &peer->session, err);
diff --git a/dtls_debug.c b/dtls_debug.c
index f4626db..7b3ae10 100644
--- a/dtls_debug.c
+++ b/dtls_debug.c
@@ -213,7 +213,7 @@
   va_list ap;
   FILE *log_fd;
 
-  if (maxlog < level)
+  if (maxlog < (int)level)
     return;
 
   log_fd = level <= DTLS_LOG_CRIT ? stderr : stdout;
@@ -295,7 +295,7 @@
   FILE *log_fd;
   int n = 0;
 
-  if (maxlog < level)
+  if (maxlog < (int)level)
     return;
 
   log_fd = level <= DTLS_LOG_CRIT ? stderr : stdout;
diff --git a/dtls_debug.h b/dtls_debug.h
index 8cff829..d46b6da 100644
--- a/dtls_debug.h
+++ b/dtls_debug.h
@@ -33,7 +33,7 @@
 #ifdef CONTIKI_TARGET_MBXXX
 extern char __Stack_Init, _estack;
 
-static inline void check_stack() {
+static inline void check_stack(void) {
   const char *p = &__Stack_Init;
   while (p < &_estack && *p == 0x38) {
     p++;
@@ -42,13 +42,13 @@
   PRINTF("Stack: %d bytes used (%d free)\n", &_estack - p, p - &__Stack_Init);
 }
 #else /* CONTIKI_TARGET_MBXXX */
-static inline void check_stack() {
+static inline void check_stack(void) {
 }
 #endif /* CONTIKI_TARGET_MBXXX */
 #else /* WITH_CONTKI */
 #define PRINTF(...)
 
-static inline void check_stack() {
+static inline void check_stack(void) {
 }
 #endif
 
@@ -60,14 +60,14 @@
 #ifndef WITH_CONTIKI
 /* Contiki does not have the required PACKAGE_ variables configured */
 /** Returns a zero-terminated string with the name of this library. */
-const char *dtls_package_name();
+const char *dtls_package_name(void);
 
 /** Returns a zero-terminated string with the library version. */
-const char *dtls_package_version();
+const char *dtls_package_version(void);
 #endif /* WITH_CONTIKI */
 
 /** Returns the current log level. */
-log_t dtls_get_log_level();
+log_t dtls_get_log_level(void);
 
 /** Sets the log level to the specified value. */
 void dtls_set_log_level(log_t level);
diff --git a/hmac.c b/hmac.c
index a7d5216..e16eca5 100644
--- a/hmac.c
+++ b/hmac.c
@@ -33,7 +33,7 @@
 #include <stdlib.h>
 
 static inline dtls_hmac_context_t *
-dtls_hmac_context_new() {
+dtls_hmac_context_new(void) {
   return (dtls_hmac_context_t *)malloc(sizeof(dtls_hmac_context_t));
 }
 
@@ -47,7 +47,7 @@
 MEMB(hmac_context_storage, dtls_hmac_context_t, DTLS_HASH_MAX);
 
 static inline dtls_hmac_context_t *
-dtls_hmac_context_new() {
+dtls_hmac_context_new(void) {
   return (dtls_hmac_context_t *)memb_alloc(&hmac_context_storage);
 }
 
@@ -57,7 +57,7 @@
 }
 
 void
-dtls_hmac_storage_init() {
+dtls_hmac_storage_init(void) {
   memb_init(&hmac_context_storage);
 }
 #endif /* WITH_CONTIKI */
diff --git a/netq.h b/netq.h
index a5b71d3..c8821ac 100644
--- a/netq.h
+++ b/netq.h
@@ -64,10 +64,10 @@
 } netq_t;
 
 #ifndef WITH_CONTIKI
-static inline void netq_init()
+static inline void netq_init(void)
 { }
 #else
-void netq_init();
+void netq_init(void);
 #endif
 
 /** 
diff --git a/peer.c b/peer.c
index 40ff605..7a02444 100644
--- a/peer.c
+++ b/peer.c
@@ -20,12 +20,12 @@
 #include "dtls_debug.h"
 
 #ifndef WITH_CONTIKI
-void peer_init()
+void peer_init(void)
 {
 }
 
 static inline dtls_peer_t *
-dtls_malloc_peer() {
+dtls_malloc_peer(void) {
   return (dtls_peer_t *)malloc(sizeof(dtls_peer_t));
 }
 
@@ -42,12 +42,12 @@
 MEMB(peer_storage, dtls_peer_t, DTLS_PEER_MAX);
 
 void
-peer_init() {
+peer_init(void) {
   memb_init(&peer_storage);
 }
 
 static inline dtls_peer_t *
-dtls_malloc_peer() {
+dtls_malloc_peer(void) {
   return memb_alloc(&peer_storage);
 }
 
