diff --git a/examples/configio.c b/examples/configio.c
index 9710d53..575211d 100644
--- a/examples/configio.c
+++ b/examples/configio.c
@@ -8,7 +8,8 @@
 	struct kshark_config_doc *conf, *filter, *hello;
 	struct kshark_context *kshark_ctx;
 	struct kshark_data_stream *stream;
-	int sd, *ids = NULL, i;
+	int sd, *ids = NULL;
+	size_t i;
 
 	/* Create a new kshark session. */
 	kshark_ctx = NULL;
diff --git a/examples/datafilter.c b/examples/datafilter.c
index 8e86d9c..120c12e 100644
--- a/examples/datafilter.c
+++ b/examples/datafilter.c
@@ -17,11 +17,11 @@
 
 int main(int argc, char **argv)
 {
-	size_t i, sd, n_rows, n_tasks, n_evts, count;
+	size_t i, n_rows, n_tasks, n_evts, count;
 	struct kshark_context *kshark_ctx;
 	struct kshark_data_stream *stream;
 	struct kshark_entry **data = NULL;
-	int *pids, *evt_ids;
+	int sd, *pids, *evt_ids;
 	char *entry_str;
 
 	/* Create a new kshark session. */
diff --git a/examples/datahisto.c b/examples/datahisto.c
index 568072d..b54b9e9 100644
--- a/examples/datahisto.c
+++ b/examples/datahisto.c
@@ -70,7 +70,7 @@
 
 void dump_histo(struct kshark_trace_histo *histo, int sd, const char *type, int val)
 {
-	size_t bin;
+	int bin;
 
 	for (bin = 0; bin < histo->n_bins; ++bin)
 		dump_bin(histo, bin, sd, type, val);
diff --git a/src/libkshark-collection.c b/src/libkshark-collection.c
index 915983b..c44d579 100644
--- a/src/libkshark-collection.c
+++ b/src/libkshark-collection.c
@@ -120,7 +120,7 @@
 		temp->type = COLLECTION_IGNORE;
 	}
 
-	for (i = first + margin; i < end; ++i) {
+	for (i = first + margin; i < (size_t) end; ++i) {
 		if (!cond(kshark_ctx, data[i], sd, values)) {
 			/*
 			 * The entry is irrelevant for this collection.
@@ -161,9 +161,8 @@
 
 			/* Keep adding entries until the "next" record. */
 			for (j = i + 1;
-			     j != end && last_vis_entry->next != data[j];
-			     j++)
-				;
+			     j != (size_t) end && last_vis_entry->next != data[j];
+			     j++);
 
 			/*
 			 * If the number of added entries is smaller than the
@@ -322,8 +321,9 @@
 			    bool front, size_t *end)
 {
 	int col_index_flag;
-	ssize_t col_index;
+	size_t col_index;
 	size_t req_end;
+	ssize_t ret;
 
 	if (req->next || col->size == 0) {
 		fprintf(stderr,
@@ -338,19 +338,17 @@
 	 * Find the first Resume Point of the collection which is equal or
 	 * greater than the first index of this request.
 	 */
-	col_index = map_collection_index_from_source(col,
-						     req->first,
-						     &col_index_flag);
+	ret = map_collection_index_from_source(col, req->first, &col_index_flag);
+	if (ret == KS_EMPTY_BIN) {
+		/* Empty collection. */
+		goto do_nothing;
+	}
+	col_index = ret;
 
 	/*
 	 * The value of "col_index" is ambiguous. Use the "col_index_flag" to
 	 * deal with all possible cases.
 	 */
-	if (col_index == KS_EMPTY_BIN) {
-		/* Empty collection. */
-		goto do_nothing;
-	}
-
 	if (col_index_flag == COLLECTION_AFTER) {
 		/*
 		 * This request starts after the end of interval "col_index".
@@ -436,12 +434,14 @@
 			    struct kshark_entry_request *req)
 {
 	size_t req_first, req_end;
-	ssize_t col_index;
+	size_t col_index;
 	int req_count;
+	ssize_t ret;
 
-	col_index = map_collection_request_init(col, req, false, &req_end);
-	if (col_index == KS_EMPTY_BIN)
+	ret = map_collection_request_init(col, req, false, &req_end);
+	if (ret == KS_EMPTY_BIN)
 		return 0;
+	col_index = ret;
 
 	/*
 	 * Now loop over the intervals of the collection going backwards till
@@ -449,7 +449,7 @@
 	 * each of those interest.
 	 */
 	req_count = 1;
-	while (col_index >= 0 && req_end <= col->break_points[col_index]) {
+	while (req_end <= col->break_points[col_index]) {
 		if (req_end >= col->resume_points[col_index]) {
 			/*
 			 * The last entry of the original request is inside
@@ -519,12 +519,14 @@
 			     struct kshark_entry_request *req)
 {
 	size_t req_first, req_end;
-	ssize_t col_index;
+	size_t col_index;
 	int req_count;
+	ssize_t ret;
 
-	col_index = map_collection_request_init(col, req, true, &req_end);
-	if (col_index == KS_EMPTY_BIN)
+	ret = map_collection_request_init(col, req, true, &req_end);
+	if (ret == KS_EMPTY_BIN)
 		return 0;
+	col_index = ret;
 
 	/*
 	 * Now loop over the intervals of the collection going forwards till
diff --git a/src/libkshark-configio.c b/src/libkshark-configio.c
index 038cb22..88c2c9a 100644
--- a/src/libkshark-configio.c
+++ b/src/libkshark-configio.c
@@ -1114,7 +1114,8 @@
 	json_object *jfilter_data, *jname;
 	struct kshark_hash_id *filter;
 	char *name_str;
-	int i, *ids;
+	int *ids;
+	size_t i;
 
 	filter = kshark_get_filter(stream, filter_type);
 	if (!filter)
@@ -1283,7 +1284,8 @@
 					struct json_object *jobj)
 {
 	json_object *jfilter_data, *jpid = NULL;
-	int i, *ids;
+	int *ids;
+	size_t i;
 
 	/*
 	 * If this Json document already contains a description of the filter,
diff --git a/src/libkshark-hash.c b/src/libkshark-hash.c
index 89c021b..8782883 100644
--- a/src/libkshark-hash.c
+++ b/src/libkshark-hash.c
@@ -168,8 +168,7 @@
 void kshark_hash_id_clear(struct kshark_hash_id *hash)
 {
 	struct kshark_hash_id_item *item, *next;
-	size_t size;
-	int i;
+	size_t i, size;
 
 	if (!hash || ! hash->hash)
 		return;
@@ -211,8 +210,8 @@
 int *kshark_hash_ids(struct kshark_hash_id *hash)
 {
 	struct kshark_hash_id_item *item;
-	size_t size = hash_size(hash);
-	int count = 0, i;
+	size_t i, size = hash_size(hash);
+	int count = 0;
 	int *ids;
 
 	if (!hash->count)
diff --git a/src/libkshark-model.c b/src/libkshark-model.c
index e872784..c6dce5e 100644
--- a/src/libkshark-model.c
+++ b/src/libkshark-model.c
@@ -91,7 +91,7 @@
 }
 
 static void ksmodel_set_in_range_bining(struct kshark_trace_histo *histo,
-					size_t n, int64_t min, int64_t max,
+					int n, int64_t min, int64_t max,
 					bool force_in_range)
 {
 	int64_t corrected_range, delta_range, range = max - min;
@@ -110,7 +110,7 @@
 	}
 
 	/* The size of the bin must be >= 1, hence the range must be >= n. */
-	if (range < n) {
+	if (range < (int64_t) n) {
 		range = n;
 		max = min + n;
 	}
@@ -266,10 +266,10 @@
 }
 
 static void ksmodel_set_next_bin_edge(struct kshark_trace_histo *histo,
-				      size_t bin, size_t last_row)
+				      int bin, size_t last_row)
 {
 	int64_t time_min, time_max;
-	size_t next_bin = bin + 1;
+	int next_bin = bin + 1;
 	ssize_t row;
 
 	/* Calculate the beginning and the end of the next bin. */
@@ -463,12 +463,12 @@
  * @param histo: Input location for the model descriptor.
  * @param n: Number of bins to shift.
  */
-void ksmodel_shift_forward(struct kshark_trace_histo *histo, size_t n)
+void ksmodel_shift_forward(struct kshark_trace_histo *histo, int n)
 {
 	size_t last_row = 0;
 	int bin;
 
-	if (!histo->data_size)
+	if (!histo->data_size || histo->n_bins <= 0)
 		return;
 
 	if (histo->map[UOB(histo)] == KS_EMPTY_BIN) {
@@ -541,12 +541,12 @@
  * @param histo: Input location for the model descriptor.
  * @param n: Number of bins to shift.
  */
-void ksmodel_shift_backward(struct kshark_trace_histo *histo, size_t n)
+void ksmodel_shift_backward(struct kshark_trace_histo *histo, int n)
 {
 	size_t last_row = 0;
 	int bin;
 
-	if (!histo->data_size)
+	if (!histo->data_size || histo->n_bins <= 0)
 		return;
 
 	if (histo->map[LOB(histo)] == KS_EMPTY_BIN) {
@@ -649,7 +649,7 @@
 static void ksmodel_zoom(struct kshark_trace_histo *histo,
 			 double r, int mark, bool zoom_in)
 {
-	size_t range, min, max, delta_min;
+	int64_t range, min, max, delta_min;
 	double delta_tot;
 
 	if (!histo->data_size)
@@ -668,7 +668,7 @@
 	 * Avoid overzooming. If needed, adjust the Scale factor to a the value
 	 * which provides bin_size >= 5.
 	 */
-	if (zoom_in && (size_t) (range * (1. - r)) < histo->n_bins * 5)
+	if (zoom_in && (int64_t) (range * (1. - r)) < (int64_t) histo->n_bins * 5)
 		r = 1. - (histo->n_bins * 5.) / range;
 
 	/*
diff --git a/src/libkshark-model.h b/src/libkshark-model.h
index 8989ee0..bf4f1c4 100644
--- a/src/libkshark-model.h
+++ b/src/libkshark-model.h
@@ -85,9 +85,9 @@
 
 size_t ksmodel_bin_count(struct kshark_trace_histo *histo, int bin);
 
-void ksmodel_shift_forward(struct kshark_trace_histo *histo, size_t n);
+void ksmodel_shift_forward(struct kshark_trace_histo *histo, int n);
 
-void ksmodel_shift_backward(struct kshark_trace_histo *histo, size_t n);
+void ksmodel_shift_backward(struct kshark_trace_histo *histo, int n);
 
 void ksmodel_jump_to(struct kshark_trace_histo *histo, int64_t ts);
 
diff --git a/src/libkshark-tepdata.c b/src/libkshark-tepdata.c
index 4e572a1..ed508a9 100644
--- a/src/libkshark-tepdata.c
+++ b/src/libkshark-tepdata.c
@@ -239,7 +239,7 @@
 	ret = tep_read_number_field(get_sched_next(stream),
 				    record->data, &val);
 
-	return ret ? : val;
+	return ret ? : (int) val;
 }
 
 static void register_command(struct kshark_data_stream *stream,
@@ -312,7 +312,6 @@
 		count = 0;
 		cpu_list[cpu] = NULL;
 		temp_next = &cpu_list[cpu];
-
 		rec = tracecmd_read_cpu_first(kshark_get_tep_input(stream), cpu);
 		while (rec) {
 			*temp_next = temp_rec = calloc(1, sizeof(*temp_rec));
diff --git a/src/libkshark.c b/src/libkshark.c
index 8443279..4909dd6 100644
--- a/src/libkshark.c
+++ b/src/libkshark.c
@@ -1370,14 +1370,15 @@
 			      size_t n_entries)
 {
 	struct kshark_data_stream *stream;
-	int *stream_ids, i;
+	int *stream_ids, sd;
+	size_t i;
 
 	for (i = 0; i < n_entries; ++i)
 		set_all_visible(&data[i]->visible);
 
 	stream_ids = kshark_all_streams(kshark_ctx);
-	for (i = 0; i < kshark_ctx->n_streams; i++) {
-		stream = kshark_get_data_stream(kshark_ctx, stream_ids[i]);
+	for (sd = 0; sd < kshark_ctx->n_streams; sd++) {
+		stream = kshark_get_data_stream(kshark_ctx, stream_ids[sd]);
 		stream->filter_is_applied = false;
 	}
 
@@ -1902,10 +1903,13 @@
 	kshark_data_qsort(entries, size);
 }
 
-static int first_in_time_entry(struct kshark_entry_data_set *buffer, int n_buffers, size_t *count)
+static int first_in_time_entry(struct kshark_entry_data_set *buffer,
+			       size_t n_buffers,
+			       ssize_t *count)
 {
 	int64_t t_min = INT64_MAX;
-	int i, min = -1;
+	int min = -1;
+	size_t i;
 
 	for (i = 0; i < n_buffers; ++i) {
 		if (count[i] == buffer[i].n_rows)
@@ -1930,10 +1934,11 @@
  *	    responsible for freeing the elements of the outputted array.
  */
 struct kshark_entry **
-kshark_merge_data_entries(struct kshark_entry_data_set *buffers, int n_buffers)
+kshark_merge_data_entries(struct kshark_entry_data_set *buffers, size_t n_buffers)
 {
 	struct kshark_entry **merged_data;
-	size_t i, tot = 0, count[n_buffers];
+	ssize_t count[n_buffers];
+	size_t i, tot = 0;
 	int i_first;
 
 	if (n_buffers < 2) {
@@ -2078,7 +2083,9 @@
 				merged_data);
 }
 
-static int first_in_time_row(struct kshark_matrix_data_set *buffers, int n_buffers, size_t *count)
+static int first_in_time_row(struct kshark_matrix_data_set *buffers,
+			     int n_buffers,
+			     ssize_t *count)
 {
 	int64_t t_min = INT64_MAX;
 	int i, min = -1;
@@ -2107,10 +2114,11 @@
  *	    matrix.
  */
 struct kshark_matrix_data_set
-kshark_merge_data_matrices(struct kshark_matrix_data_set *buffers, int n_buffers)
+kshark_merge_data_matrices(struct kshark_matrix_data_set *buffers, size_t n_buffers)
 {
 	struct kshark_matrix_data_set merged_data;
-	size_t i, tot = 0, count[n_buffers];
+	ssize_t count[n_buffers];
+	size_t i, tot = 0;
 	int i_first;
 	bool status;
 
diff --git a/src/libkshark.h b/src/libkshark.h
index 97d3227..7656ce9 100644
--- a/src/libkshark.h
+++ b/src/libkshark.h
@@ -764,7 +764,7 @@
 	int *values;
 
 	/** The suze of the array of matching condition values. */
-	int n_val;
+	size_t n_val;
 
 	/**
 	 * Array of indexes defining the beginning of each individual data
@@ -1071,7 +1071,7 @@
 
 struct kshark_entry **
 kshark_merge_data_entries(struct kshark_entry_data_set *buffers,
-			  int n_buffers);
+			  size_t n_buffers);
 
 ssize_t kshark_load_all_entries(struct kshark_context *kshark_ctx,
 				struct kshark_entry ***data_rows);
@@ -1111,7 +1111,7 @@
 
 struct kshark_matrix_data_set
 kshark_merge_data_matrices(struct kshark_matrix_data_set *buffers,
-			   int n_buffers);
+			   size_t n_buffers);
 
 /**
  * Structure used to store the data of a kshark_entry plus one additional
diff --git a/src/plugins/sched_events.c b/src/plugins/sched_events.c
index c3a4f47..e7dd2b1 100644
--- a/src/plugins/sched_events.c
+++ b/src/plugins/sched_events.c
@@ -104,28 +104,28 @@
 {
 	struct tep_record *record = (struct tep_record *) rec;
 	struct plugin_sched_context *plugin_ctx;
-	unsigned long long next_pid, prev_state;
+	unsigned long long next_pid_val, prev_state_val;
 	ks_num_field_t ks_field = 0;
-	int ret;
+	int ret, pid;
 
 	plugin_ctx = __get_context(stream->stream_id);
 	if (!plugin_ctx)
 		return;
 
 	ret = tep_read_number_field(plugin_ctx->sched_switch_next_field,
-				    record->data, &next_pid);
-
-	if (ret == 0 && next_pid >= 0) {
+				    record->data, &next_pid_val);
+	pid = next_pid_val;
+	if (ret == 0 && pid >= 0) {
 		plugin_sched_set_pid(&ks_field, entry->pid);
 
 		ret = tep_read_number_field(plugin_ctx->sched_switch_prev_state_field,
-					    record->data, &prev_state);
+					    record->data, &prev_state_val);
 
 		if (ret == 0)
-			plugin_sched_set_prev_state(&ks_field, prev_state);
+			plugin_sched_set_prev_state(&ks_field, prev_state_val);
 
 		kshark_data_container_append(plugin_ctx->ss_data, entry, ks_field);
-		entry->pid = next_pid;
+		entry->pid = pid;
 	}
 }
 
