diff --git a/sm/lib/egsl/egsl.c b/sm/lib/egsl/egsl.c
index 5a57f13a67988519bd25057c7e6bf718bbe0b477..c4943b49cd2896528c27d45d8bd6d5c921420d16 100644
--- a/sm/lib/egsl/egsl.c
+++ b/sm/lib/egsl/egsl.c
@@ -299,5 +299,13 @@ double egsl_atm(val v1, size_t i, size_t j){
 	return *egsl_atmp(v1, i, j);
 }
 
-
+void egsl_free(void){
+	int c;
+	for(c=0;c<=max_cid;c++) {
+		for(int i=egsl_contexts[c].nvars; i<egsl_contexts[c].nallocated; i++){
+			gsl_matrix_free(egsl_contexts[c].vars[i].gsl_m);
+		}
+	egsl_contexts[c].nallocated = egsl_contexts[c].nvars;
+	} 
+}