diff --git a/select.c b/select.c
index 1c2796766b7f6a503901dc44f853c227c1775a2d..edf48a67ad1e34b02120943114f839cf226a69a3 100644
--- a/select.c
+++ b/select.c
@@ -38,6 +38,7 @@ oop_adapter_select *oop_select_new(
 	FD_ZERO(&s->active.wfd);
 	FD_ZERO(&s->active.xfd);
 	s->num_fd = 0;
+	s->num_fd_active = 0;
 	s->do_timeout = 0;
 	s->is_active = 0;
 	s->call = call;
diff --git a/sys.c b/sys.c
index 9f0c1557ff5d21435e427e0621b942901144ca95..19bbeb38e8f26ca577359bee68deb661a10f8b99 100644
--- a/sys.c
+++ b/sys.c
@@ -86,12 +86,13 @@ static void sys_on_fd(oop_source *source,int fd,oop_event ev,
 		int i,j,num_files = 1 + fd;
 		sys_file *files = oop_malloc(num_files * sizeof(sys_file));
 		if (NULL == files) return; /* ugh */
+
 		memcpy(files,sys->files,sizeof(sys_file) * sys->num_files);
 		for (i = sys->num_files; i < num_files; ++i)
 			for (j = 0; j < OOP_NUM_EVENTS; ++j)
 				files[i][j].f = NULL;
 
-		oop_free(sys->files);
+		if (NULL != sys->files) oop_free(sys->files);
 		sys->files = files;
 		sys->num_files = num_files;
 	}
@@ -414,6 +415,7 @@ void oop_sys_delete(oop_source_sys *sys) {
 			assert(NULL == sys->files[i][j].f && "cannot delete with file handler");
 
 	assert(0 == sys->num_events);
+	if (NULL != sys->files) oop_free(sys->files);
 	oop_free(sys);
 }