diff --git a/sm/csm/math_utils.c b/sm/csm/math_utils.c
index 04e66e411c10539b017e6f3dad4d6a63a58a2c2d..275aabf2e00d4e4951cd4d13855f07b72f0ae3b9 100644
--- a/sm/csm/math_utils.c
+++ b/sm/csm/math_utils.c
@@ -262,7 +262,7 @@ double segment_alpha(const double p0[2], const double p1[2]) {
 }
 
 
-static char tmp_buf[100];
+static char tmp_buf[1024];
 const char* friendly_pose(const double*pose) {
 	sprintf(tmp_buf, "(%4.2f mm, %4.2f mm, %4.4f deg)",
 		1000*pose[0],1000*pose[1],rad2deg(pose[2]));
diff --git a/sm/csm/math_utils_gsl.c b/sm/csm/math_utils_gsl.c
index 5ec42d374833efd8bb804525c361a47e6703012b..1bb120c2fe0590da648531e8e8d8eb291b7894aa 100644
--- a/sm/csm/math_utils_gsl.c
+++ b/sm/csm/math_utils_gsl.c
@@ -66,7 +66,7 @@ const char* gsl_friendly_pose(gsl_vector*v) {
 	return friendly_pose(v->data);
 }
 
-static char egsl_tmp_buf[100];
+static char egsl_tmp_buf[1024];
 const char* egsl_friendly_pose(val v) {
 	sprintf(egsl_tmp_buf, "(%4.2f mm, %4.2f mm, %4.4f deg)",
 		1000*egsl_atv(v,0),
diff --git a/sm/lib/egsl/egsl.c b/sm/lib/egsl/egsl.c
index 387d04f7aac6113ed9888d4c6e2e4986a84e4c46..bfecfdc55fddf8fa73bd30b708b6443290856ccc 100644
--- a/sm/lib/egsl/egsl.c
+++ b/sm/lib/egsl/egsl.c
@@ -99,18 +99,19 @@ void egsl_push_named(const char*name) {
 		egsl_first_time  = 0;
 	}
 	cid++;
-	if(max_cid < cid) max_cid = cid;
 	
-	if(name != 0) 
-		sprintf(egsl_contexts[cid].name, "%s", name);
-	else
-		sprintf(egsl_contexts[cid].name, "Unnamed context");
-		
 	if(cid >= MAX_CONTEXTS) {
 		fprintf(stderr, "egsl: maximum number of contexts reached \n");
 		egsl_print_stats();
 		assert(0);
 	}
+
+	if(max_cid < cid) max_cid = cid;
+	
+	if(name != 0) 
+		sprintf(egsl_contexts[cid].name, "%s", name);
+	else
+		sprintf(egsl_contexts[cid].name, "Unnamed context");
 }
 
 void egsl_pop_named(const char*name) {
@@ -147,7 +148,7 @@ void egsl_print_stats() {
 	fprintf(stderr, "egsl: total allocations: %d   cache hits: %d\n",	
 		egsl_total_allocations, egsl_cache_hits);
 /*	printf("egsl: sizeof(val) = %d\n",(int)sizeof(val)); */
-	int c; for(c=0;c<=max_cid;c++) {
+	int c; for(c=0;c<=max_cid&&c<MAX_CONTEXTS;c++) {
 	/*	printf("egsl: context #%d\n ",c); */
 /*	 	if(0==egsl_contexts[c].nallocated) break; */
 		fprintf(stderr, "egsl: context #%d allocations: %d active: %d name: '%s' \n",