diff --git a/libs/esl/src/esl_event.c b/libs/esl/src/esl_event.c
index ead853ea46..1271e46e4f 100644
--- a/libs/esl/src/esl_event.c
+++ b/libs/esl/src/esl_event.c
@@ -285,7 +285,7 @@ ESL_DECLARE(char *)esl_event_get_body(esl_event_t *event)
 ESL_DECLARE(esl_status_t) esl_event_del_header_val(esl_event_t *event, const char *header_name, const char *val)
 {
 	esl_event_header_t *hp, *lp = NULL, *tp;
-	esl_status_t status = ESL_FALSE;
+	esl_status_t status = (esl_status_t) ESL_FALSE;
 	int x = 0;
 	esl_ssize_t hlen = -1;
 	unsigned long hash = 0;
@@ -875,12 +875,12 @@ ESL_DECLARE(esl_status_t) esl_event_create_json(esl_event_t **event, const char
 
 
 	if (!(cj = cJSON_Parse(json))) {
-		return ESL_FALSE;
+		return (esl_status_t) ESL_FALSE;
 	}
 
 	if (esl_event_create(&new_event, ESL_EVENT_CLONE) != ESL_SUCCESS) {
 		cJSON_Delete(cj);
-		return ESL_FALSE;
+		return (esl_status_t) ESL_FALSE;
 	}
 
 	for (cjp = cj->child; cjp; cjp = cjp->next) {
diff --git a/src/include/switch_utils.h b/src/include/switch_utils.h
index 343a2ce62e..cce5abfa2d 100644
--- a/src/include/switch_utils.h
+++ b/src/include/switch_utils.h
@@ -834,6 +834,9 @@ SWITCH_DECLARE(const char *) switch_inet_ntop(int af, void const *src, char *dst
 SWITCH_DECLARE(char *) switch_uuid_str(char *buf, switch_size_t len);
 SWITCH_DECLARE(char *) switch_format_number(const char *num);
 
+SWITCH_DECLARE(unsigned int) switch_atoui(const char *nptr);
+SWITCH_DECLARE(unsigned long) switch_atoul(const char *nptr);
+
 SWITCH_END_EXTERN_C
 #endif
 /* For Emacs:
diff --git a/src/mod/applications/mod_conference/mod_conference.c b/src/mod/applications/mod_conference/mod_conference.c
index bd07c68ce6..003ad6b116 100644
--- a/src/mod/applications/mod_conference/mod_conference.c
+++ b/src/mod/applications/mod_conference/mod_conference.c
@@ -6375,7 +6375,7 @@ SWITCH_STANDARD_APP(conference_function)
 				uint32_t max_members_val;
 				errno = 0;		/* sanity first */
 				max_members_val = strtol(max_members_str, NULL, 0);	/* base 0 lets 0x... for hex 0... for octal and base 10 otherwise through */
-				if (errno == ERANGE || errno == EINVAL || max_members_val < 0 || max_members_val == 1) {
+				if (errno == ERANGE || errno == EINVAL || (int32_t) max_members_val < 0 || max_members_val == 1) {
 					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR,
 									  "conference_max_members variable %s is invalid, not setting a limit\n", max_members_str);
 				} else {
@@ -7106,7 +7106,7 @@ static conference_obj_t *conference_new(char *name, conf_xml_cfg_t cfg, switch_c
 			} else if (!strcasecmp(var, "max-members") && !zstr(val)) {
 				errno = 0;		/* sanity first */
 				max_members = strtol(val, NULL, 0);	/* base 0 lets 0x... for hex 0... for octal and base 10 otherwise through */
-				if (errno == ERANGE || errno == EINVAL || max_members < 0 || max_members == 1) {
+				if (errno == ERANGE || errno == EINVAL || (int32_t) max_members < 0 || max_members == 1) {
 					/* a negative wont work well, and its foolish to have a conference limited to 1 person unless the outbound 
 					 * stuff is added, see comments above
 					 */
diff --git a/src/mod/applications/mod_db/mod_db.c b/src/mod/applications/mod_db/mod_db.c
index dccc6c9a2f..d94de1b900 100644
--- a/src/mod/applications/mod_db/mod_db.c
+++ b/src/mod/applications/mod_db/mod_db.c
@@ -597,7 +597,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_db_load)
 	switch_api_interface_t *commands_api_interface;
 	switch_limit_interface_t *limit_interface;
 
-	memset(&globals, 0, sizeof(&globals));
+	memset(&globals, 0, sizeof(globals));
 	strncpy(globals.hostname, switch_core_get_switchname(), sizeof(globals.hostname));
 	globals.pool = pool;
 
diff --git a/src/mod/applications/mod_dptools/mod_dptools.c b/src/mod/applications/mod_dptools/mod_dptools.c
index 9d804bdfc4..20620c10a8 100755
--- a/src/mod/applications/mod_dptools/mod_dptools.c
+++ b/src/mod/applications/mod_dptools/mod_dptools.c
@@ -340,18 +340,13 @@ static void bind_to_session(switch_core_session_t *session,
 		uint32_t digit_timeout = 1500;
 		uint32_t input_timeout = 0;
 		const char *var;
-		uint32_t tmp;
 
 		if ((var = switch_channel_get_variable(channel, "bind_digit_digit_timeout"))) {
-			tmp = (uint32_t) atol(var);
-			if (tmp < 0) tmp = 0;
-			digit_timeout = tmp;
+			digit_timeout = switch_atoul(var);
 		}
 		
 		if ((var = switch_channel_get_variable(channel, "bind_digit_input_timeout"))) {
-			tmp = (uint32_t) atol(var);
-			if (tmp < 0) tmp = 0;
-			input_timeout = tmp;
+			input_timeout = switch_atoul(var);
 		}
 		
 		switch_ivr_dmachine_create(&dmachine, "DPTOOLS", NULL, digit_timeout, input_timeout, NULL, digit_nomatch_action_callback, session);
@@ -2217,10 +2212,7 @@ SWITCH_STANDARD_APP(read_function)
 	}
 
 	if (argc > 6) {
-		digit_timeout = atoi(argv[6]);
-		if (digit_timeout < 0) {
-			digit_timeout = 0;
-		}
+		digit_timeout = switch_atoui(argv[6]);
 	}
 
 	if (min_digits <= 1) {
@@ -2303,10 +2295,7 @@ SWITCH_STANDARD_APP(play_and_get_digits_function)
 	}
 
 	if (argc > 9) {
-		digit_timeout = atoi(argv[9]);
-		if (digit_timeout < 0) {
-			digit_timeout = 0;
-		}
+		digit_timeout = switch_atoui(argv[9]);
 	}
 
 	if (argc > 10) {
@@ -2589,25 +2578,16 @@ SWITCH_STANDARD_APP(record_function)
 			l++;
 		}
 		if (l) {
-			limit = atoi(l);
-			if (limit < 0) {
-				limit = 0;
-			}
+			limit = switch_atoui(l);
 		}
 	}
 
 	if (argv[2]) {
-		fh.thresh = atoi(argv[2]);
-		if (fh.thresh < 0) {
-			fh.thresh = 0;
-		}
+		fh.thresh = switch_atoui(argv[2]);
 	}
 
 	if (argv[3]) {
-		fh.silence_hits = atoi(argv[3]);
-		if (fh.silence_hits < 0) {
-			fh.silence_hits = 0;
-		}
+		fh.silence_hits = switch_atoui(argv[3]);
 	}
 
 	if ((tmp = switch_channel_get_variable(channel, "record_rate"))) {
@@ -3481,9 +3461,7 @@ SWITCH_STANDARD_APP(wait_for_silence_function)
 		listen_hits = atoi(argv[2]);
 
 		if (argv[3]) {
-			if ((timeout_ms = atoi(argv[3])) < 0) {
-				timeout_ms = 0;
-			}
+			timeout_ms = switch_atoui(argv[3]);
 		}
 
 		if (thresh > 0 && silence_hits > 0 && listen_hits > 0) {
diff --git a/src/mod/applications/mod_hash/mod_hash.c b/src/mod/applications/mod_hash/mod_hash.c
index ced478bb1c..c4a899a74b 100644
--- a/src/mod/applications/mod_hash/mod_hash.c
+++ b/src/mod/applications/mod_hash/mod_hash.c
@@ -974,7 +974,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_hash_load)
 	switch_limit_interface_t *limit_interface;
 	switch_status_t status;
 
-	memset(&globals, 0, sizeof(&globals));
+	memset(&globals, 0, sizeof(globals));
 	globals.pool = pool;
 
 	status = switch_event_reserve_subclass(LIMIT_EVENT_USAGE);
diff --git a/src/mod/loggers/mod_logfile/mod_logfile.c b/src/mod/loggers/mod_logfile/mod_logfile.c
index b768d6bff0..db78909134 100644
--- a/src/mod/loggers/mod_logfile/mod_logfile.c
+++ b/src/mod/loggers/mod_logfile/mod_logfile.c
@@ -332,13 +332,10 @@ static switch_status_t load_profile(switch_xml_t xml)
 			if (!strcmp(var, "logfile")) {
 				new_profile->logfile = strdup(val);
 			} else if (!strcmp(var, "rollover")) {
-				new_profile->roll_size = atoi(val);
-				if (new_profile->roll_size < 0) {
-					new_profile->roll_size = 0;
-				}
+				new_profile->roll_size = switch_atoui(val);
 			} else if (!strcmp(var, "maximum-rotate")) {
-				new_profile->max_rot = atoi(val);
-				if (new_profile->max_rot < 0) {
+				new_profile->max_rot = switch_atoui(val);
+				if (new_profile->max_rot == 0) {
 					new_profile->max_rot = MAX_ROT;
 				}
 			} else if (!strcmp(var, "uuid") && switch_true(val)) {
diff --git a/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c b/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c
index 06d474e0bf..684a048806 100644
--- a/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c
+++ b/src/mod/xml_int/mod_xml_cdr/mod_xml_cdr.c
@@ -514,7 +514,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_xml_cdr_load)
 					switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Can't set a negative timeout!\n");
 				}
 			} else if (!strcasecmp(var, "delay") && !zstr(val)) {
-				globals.delay = (uint32_t) atoi(val);
+				globals.delay = switch_atoui(val);
 			} else if (!strcasecmp(var, "log-b-leg")) {
 				globals.log_b = switch_true(val);
 			} else if (!strcasecmp(var, "prefix-a-leg")) {
@@ -530,7 +530,7 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_xml_cdr_load)
 					globals.encode = switch_true(val) ? ENCODING_DEFAULT : ENCODING_NONE;
 				}
 			} else if (!strcasecmp(var, "retries") && !zstr(val)) {
-				globals.retries = (uint32_t) atoi(val);
+				globals.retries = switch_atoui(val);
 			} else if (!strcasecmp(var, "rotate") && !zstr(val)) {
 				globals.rotate = switch_true(val);
 			} else if (!strcasecmp(var, "log-dir")) {
@@ -596,12 +596,8 @@ SWITCH_MODULE_LOAD_FUNCTION(mod_xml_cdr_load)
 		}
 		
 	}
-	if (globals.retries < 0) {
-		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Retries is negative, setting to 0\n");
-		globals.retries = 0;
-	}
 
-	if (globals.retries && globals.delay <= 0) {
+	if (globals.retries && globals.delay == 0) {
 		switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Retries set but delay 0 setting to 5 seconds\n");
 		globals.delay = 5;
 	}
diff --git a/src/switch.c b/src/switch.c
index dc49647380..b903fae5f0 100644
--- a/src/switch.c
+++ b/src/switch.c
@@ -85,7 +85,7 @@ static void handle_SIGILL(int sig)
 #ifndef WIN32
 static void handle_SIGUSR2(int sig)
 {
-	if (sig);
+	if (sig) {};
 
 	system_ready = 1;
 
@@ -97,7 +97,7 @@ static void handle_SIGCHLD(int sig)
 	int status = 0;
 	int pid = 0;
 
-	if (sig);
+	if (sig) {};
 
 	pid = wait(&status);
 	
diff --git a/src/switch_apr.c b/src/switch_apr.c
index 7d98ec69ef..329bbeee37 100644
--- a/src/switch_apr.c
+++ b/src/switch_apr.c
@@ -667,7 +667,7 @@ SWITCH_DECLARE(switch_status_t) switch_thread_create(switch_thread_t ** new_thre
 
 SWITCH_DECLARE(switch_status_t) switch_socket_addr_get(switch_sockaddr_t ** sa, switch_bool_t remote, switch_socket_t *sock)
 {
-	return apr_socket_addr_get(sa, remote, sock);
+	return apr_socket_addr_get(sa, (apr_interface_e) remote, sock);
 }
 
 SWITCH_DECLARE(switch_status_t) switch_socket_create(switch_socket_t ** new_sock, int family, int type, int protocol, switch_memory_pool_t *pool)
@@ -769,7 +769,7 @@ SWITCH_DECLARE(switch_status_t) switch_sockaddr_create(switch_sockaddr_t **sa, s
 	new_sa = apr_pcalloc(pool, sizeof(apr_sockaddr_t));
 	switch_assert(new_sa);
 	new_sa->pool = pool;
-	memset(new_sa, 0, sizeof(new_sa));
+	memset(new_sa, 0, sizeof(*new_sa));
 
     new_sa->family = family;
     new_sa->sa.sin.sin_family = family;
@@ -909,7 +909,7 @@ SWITCH_DECLARE(switch_status_t) switch_socket_create_pollfd(switch_pollfd_t **po
 	
 	memset(*pollfd, 0, sizeof(switch_pollfd_t));
 
-	(*pollfd)->desc_type = APR_POLL_SOCKET;
+	(*pollfd)->desc_type = (switch_pollset_type_t) APR_POLL_SOCKET;
 	(*pollfd)->reqevents = flags;
 	(*pollfd)->desc.s = sock;
 	(*pollfd)->client_data = client_data;
diff --git a/src/switch_channel.c b/src/switch_channel.c
index a0b5b9c018..5620681027 100644
--- a/src/switch_channel.c
+++ b/src/switch_channel.c
@@ -262,7 +262,7 @@ SWITCH_DECLARE(const char *) switch_channel_callstate2str(switch_channel_callsta
 SWITCH_DECLARE(switch_call_cause_t) switch_channel_str2callstate(const char *str)
 {
 	uint8_t x;
-	switch_channel_callstate_t callstate = SWITCH_CAUSE_NONE;
+	switch_channel_callstate_t callstate = (switch_channel_callstate_t) SWITCH_CAUSE_NONE;
 
 	if (*str > 47 && *str < 58) {
 		callstate = atoi(str);
@@ -274,7 +274,7 @@ SWITCH_DECLARE(switch_call_cause_t) switch_channel_str2callstate(const char *str
 			}
 		}
 	}
-	return callstate;
+	return (switch_call_cause_t) callstate;
 }
 
 
@@ -1923,7 +1923,7 @@ SWITCH_DECLARE(switch_channel_state_t) switch_channel_perform_set_running_state(
 
 	switch_mutex_unlock(channel->state_mutex);
 
-	return SWITCH_STATUS_SUCCESS;
+	return (switch_channel_state_t) SWITCH_STATUS_SUCCESS;
 }
 
 SWITCH_DECLARE(switch_channel_state_t) switch_channel_perform_set_state(switch_channel_t *channel,
diff --git a/src/switch_core.c b/src/switch_core.c
index 0e3dc80679..d8dfa9a428 100644
--- a/src/switch_core.c
+++ b/src/switch_core.c
@@ -1566,14 +1566,14 @@ static void switch_load_core_config(const char *file)
 				
 				if (!zstr(var) && !zstr(val)) {
 					uint32_t *p;
-					uint32_t v = (unsigned long) atol(val);
+					uint32_t v = switch_atoul(val);
 
 					if (!strcasecmp(var, "G723") || !strcasecmp(var, "iLBC")) {
 						switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error adding %s, defaults cannot be changed\n", var);
 						continue;
 					}
 					
-					if (v < 0) {
+					if (v == 0) {
 						switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_CRIT, "Error adding %s, invalid ptime\n", var);
 						continue;
 					}
diff --git a/src/switch_ivr.c b/src/switch_ivr.c
index 743b043dd6..c56a862584 100644
--- a/src/switch_ivr.c
+++ b/src/switch_ivr.c
@@ -2965,10 +2965,7 @@ SWITCH_DECLARE(switch_status_t) switch_ivr_process_fh(switch_core_session_t *ses
 					switch_core_file_seek(fhp, &pos, target, SEEK_SET);
 
 				} else {
-					samps = atoi(p) * (codec->implementation->samples_per_second / 1000);
-					if (samps < 0) {
-						samps = 0;
-					}
+					samps = switch_atoui(p) * (codec->implementation->samples_per_second / 1000);
 					switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "seek to position %d\n", samps);
 					switch_core_file_seek(fhp, &pos, samps, SEEK_SET);
 				}
diff --git a/src/switch_odbc.c b/src/switch_odbc.c
index a7c2153304..5bd31adf60 100644
--- a/src/switch_odbc.c
+++ b/src/switch_odbc.c
@@ -710,7 +710,7 @@ SWITCH_DECLARE(switch_odbc_status_t) switch_odbc_SQLSetAutoCommitAttr(switch_odb
 		return SQLSetConnectAttr(handle->con, SQL_ATTR_AUTOCOMMIT, (SQLPOINTER *) SQL_AUTOCOMMIT_OFF, 0 );
 	}
 #else
-	return SWITCH_FALSE;
+	return (switch_odbc_status_t) SWITCH_FALSE;
 #endif
 }
 
@@ -723,7 +723,7 @@ SWITCH_DECLARE(switch_odbc_status_t) switch_odbc_SQLEndTran(switch_odbc_handle_t
 		return SQLEndTran(SQL_HANDLE_DBC, handle->con, SQL_ROLLBACK);
 	}
 #else
-	return SWITCH_FALSE;
+	return (switch_odbc_status_t) SWITCH_FALSE;
 #endif
 }
 
diff --git a/src/switch_time.c b/src/switch_time.c
index 2a5a6860ea..2f111efa26 100644
--- a/src/switch_time.c
+++ b/src/switch_time.c
@@ -951,7 +951,7 @@ static void tm2switchtime(struct tm *tm, switch_time_exp_t *xt)
 	if (!xt || !tm) {
 		return;
 	}
-	memset(xt, 0, sizeof(xt));
+	memset(xt, 0, sizeof(*xt));
 
 	xt->tm_sec = tm->tm_sec;
 	xt->tm_min = tm->tm_min;
diff --git a/src/switch_utils.c b/src/switch_utils.c
index 808afd0c57..3374011f57 100644
--- a/src/switch_utils.c
+++ b/src/switch_utils.c
@@ -2921,6 +2921,20 @@ SWITCH_DECLARE(char *) switch_format_number(const char *num)
 }
 
 
+SWITCH_DECLARE(unsigned int) switch_atoui(const char *nptr)
+{
+	int tmp = atoi(nptr);
+	if (tmp < 0) return 0;
+	else return (unsigned int) tmp;
+}
+
+SWITCH_DECLARE(unsigned long) switch_atoul(const char *nptr)
+{
+	long tmp = atol(nptr);
+	if (tmp < 0) return 0;
+	else return (unsigned long) tmp;
+}
+
 /* For Emacs:
  * Local Variables:
  * mode:c