diff --git a/asn1c/asn1c.c b/asn1c/asn1c.c
index ad44dcb..4b466b5 100644
--- a/asn1c/asn1c.c
+++ b/asn1c/asn1c.c
@@ -65,6 +65,7 @@
     int ret;                        /* Return value from misc functions */
     int ch;                         /* Command line character */
     int i;                          /* Index in some loops */
+    int exit_code = 0;              /* Exit code */
 
     /*
      * Process command-line options.
@@ -262,7 +263,8 @@
         new_asn = asn1p_parse_file(av[i], asn1_parser_flags);
         if(new_asn == NULL) {
             fprintf(stderr, "Cannot parse \"%s\"\n", av[i]);
-            exit(EX_DATAERR);
+            exit_code = EX_DATAERR;
+            goto cleanup;
         }
 
         /*
@@ -286,7 +288,10 @@
      * Dump the parsed ASN.1 tree if -E specified and -F is NOT given.
      */
     if(print_arg__print_out && !print_arg__fix_n_print) {
-        if(asn1print(asn, asn1_printer_flags)) exit(EX_SOFTWARE);
+        if(asn1print(asn, asn1_printer_flags)) {
+            exit_code = EX_SOFTWARE;
+            goto cleanup;
+        }
         return 0;
     }
 
@@ -294,7 +299,10 @@
      * Read in the files from skeletons/standard-modules
      */
     if(importStandardModules(asn, skeletons_dir)) {
-        if(warnings_as_errors) exit(EX_DATAERR);
+        if(warnings_as_errors) {
+            exit_code = EX_DATAERR;
+            goto cleanup;
+        }
     }
 
     /*
@@ -310,14 +318,18 @@
         case 0:
         break; /* All clear */
     case -1:
-        exit(EX_DATAERR); /* Fatal failure */
+        exit_code = EX_DATAERR; /* Fatal failure */
+        goto cleanup;
     }
 
     /*
      * Dump the parsed ASN.1 tree if -E specified and -F is given.
      */
     if(print_arg__print_out && print_arg__fix_n_print) {
-        if(asn1print(asn, asn1_printer_flags)) exit(EX_SOFTWARE);
+        if(asn1print(asn, asn1_printer_flags)) {
+            exit_code = EX_SOFTWARE;
+            goto cleanup;
+        }
         return 0;
     }
 
@@ -327,10 +339,13 @@
      */
     if(asn1_compile(asn, skeletons_dir, asn1_compiler_flags, ac + optind,
                     optind, av - optind)) {
-        exit(EX_SOFTWARE);
+        exit_code = EX_SOFTWARE;
     }
 
+cleanup:
     asn1p_delete(asn);
+    asn1p_lex_destroy();
+    if (exit_code) exit(exit_code);
 
     return 0;
 }
@@ -415,6 +430,7 @@
             TQ_ADD(&(asn->modules), mod, mod_next);
         }
         asn1p_delete(new_asn);
+        asn1p_lex_destroy();
 
 #ifdef _WIN32
     } while(_findnext(dir, &c_file) == 0);
diff --git a/libasn1compiler/asn1c_constraint.c b/libasn1compiler/asn1c_constraint.c
index e67590a..0b502b6 100644
--- a/libasn1compiler/asn1c_constraint.c
+++ b/libasn1compiler/asn1c_constraint.c
@@ -267,6 +267,7 @@
 		 */
 		assert(range->el_count == 0);
 		/* The full range is specified. Ignore it. */
+		asn1constraint_range_free(range);
 		return 0;
 	}
 
diff --git a/libasn1fix/asn1fix_constr.c b/libasn1fix/asn1fix_constr.c
index e486a33..04063ce 100644
--- a/libasn1fix/asn1fix_constr.c
+++ b/libasn1fix/asn1fix_constr.c
@@ -60,7 +60,7 @@
 		coft = asn1p_expr_clone(terminal, 1 /* Skip extensions */);
 		if(!coft) return -1;	/* ENOMEM */
 
-		if(0) {
+		if(1) {
 			asn1p_expr_free(memb);	/* Don't need it anymore*/
 		} else {
 			/* Actual removal clashes with constraints... skip. */
diff --git a/libasn1fix/asn1fix_cws.c b/libasn1fix/asn1fix_cws.c
index aefb15c..312a65b 100644
--- a/libasn1fix/asn1fix_cws.c
+++ b/libasn1fix/asn1fix_cws.c
@@ -206,12 +206,14 @@
 		ref = asn1p_ref_new(arg->expr->_lineno);
 		asn1p_ref_add_component(ref, p, RLT_UNKNOWN);
 		assert(ref);
-	
+
 		expr = asn1f_lookup_symbol(arg, arg->mod, arg->expr->rhs_pspecs, ref);
 		if(!expr) {
 			FATAL("Cannot find %s referenced by %s at line %d",
 				p, arg->expr->Identifier,
 				arg->expr->_lineno);
+			asn1p_ref_free(ref);
+			free(p);
 			return -1;
 		}
 	}
diff --git a/libasn1fix/asn1fix_misc.c b/libasn1fix/asn1fix_misc.c
index 23005b9..88e8d18 100644
--- a/libasn1fix/asn1fix_misc.c
+++ b/libasn1fix/asn1fix_misc.c
@@ -26,7 +26,7 @@
         size_t tmp_len = (len);                     \
         if(tmp_len >= managedptr_len) {             \
             free(managedptr);                       \
-            managedptr = malloc(tmp_len + 1);       \
+            managedptr = calloc(1, tmp_len + 1);    \
             if(managedptr) {                        \
                 managedptr_len = tmp_len;           \
             } else {                                \
diff --git a/libasn1parser/asn1p_expr.c b/libasn1parser/asn1p_expr.c
index 4340066..6065a7a 100644
--- a/libasn1parser/asn1p_expr.c
+++ b/libasn1parser/asn1p_expr.c
@@ -222,8 +222,8 @@
 asn1p_expr_add_many(asn1p_expr_t *to, asn1p_expr_t *from_what) {
 	asn1p_expr_t *expr;
 	TQ_FOR(expr, &(from_what->members), next) {
-        expr->parent_expr = to;
-    }
+		expr->parent_expr = to;
+	}
 	TQ_CONCAT(&(to->members), &(from_what->members), next);
 }
 
@@ -257,9 +257,25 @@
 		asn1p_constraint_free(expr->constraints);
 		asn1p_constraint_free(expr->combined_constraints);
 		asn1p_paramlist_free(expr->lhs_params);
+		asn1p_expr_free(expr->rhs_pspecs);
 		asn1p_value_free(expr->value);
 		asn1p_value_free(expr->marker.default_value);
 		asn1p_wsyntx_free(expr->with_syntax);
+		if(expr->specializations.pspec) {
+			int pspec;
+			for(pspec = 0; pspec < expr->specializations.pspecs_count; pspec++) {
+				asn1p_expr_free(expr->specializations.pspec[pspec].rhs_pspecs);
+				asn1p_expr_free(expr->specializations.pspec[pspec].my_clone);
+			}
+			free(expr->specializations.pspec);
+		}
+		if(expr->object_class_matrix.row) {
+			int row;
+			for(row = 0; row < expr->object_class_matrix.rows; row++) {
+				asn1p_ioc_row_delete(expr->object_class_matrix.row[row]);
+			}
+			free(expr->object_class_matrix.row);
+		}
 
 		if(expr->data && expr->data_free)
 			expr->data_free(expr->data);
diff --git a/libasn1parser/asn1p_l.l b/libasn1parser/asn1p_l.l
index 6deeca7..f221327 100644
--- a/libasn1parser/asn1p_l.l
+++ b/libasn1parser/asn1p_l.l
@@ -209,7 +209,7 @@
 
 '[0-9A-F \t\r\v\f\n]+'H {
 		/* " \t\r\n" weren't allowed in ASN.1:1990. */
-		asn1p_lval.tv_str = yytext;
+		asn1p_lval.tv_str = strdup(yytext);
 		return TOK_hstring;
 	}
 
diff --git a/libasn1parser/asn1p_module.c b/libasn1parser/asn1p_module.c
index 95ac50d..10aa94c 100644
--- a/libasn1parser/asn1p_module.c
+++ b/libasn1parser/asn1p_module.c
@@ -26,12 +26,19 @@
 asn1p_module_free(asn1p_module_t *mod) {
 	if(mod) {
 		asn1p_expr_t *expr;
+		asn1p_xports_t *xports;
 
 		free(mod->ModuleName);
 		free(mod->source_file_name);
 
 		asn1p_oid_free(mod->module_oid);
 
+		while((xports = TQ_REMOVE(&(mod->exports), xp_next)))
+			asn1p_xports_free(xports);
+
+		while((xports = TQ_REMOVE(&(mod->imports), xp_next)))
+			asn1p_xports_free(xports);
+
 		while((expr = TQ_REMOVE(&(mod->members), next)))
 			asn1p_expr_free(expr);
 
diff --git a/libasn1parser/asn1p_xports.c b/libasn1parser/asn1p_xports.c
index 35104df..8f46ac1 100644
--- a/libasn1parser/asn1p_xports.c
+++ b/libasn1parser/asn1p_xports.c
@@ -25,8 +25,14 @@
 void
 asn1p_xports_free(asn1p_xports_t *xp) {
 	if(xp) {
+		asn1p_expr_t *expr;
+
 		free(xp->fromModuleName);
 		asn1p_oid_free(xp->identifier.oid);
+
+		while((expr = TQ_REMOVE(&(xp->members), next)))
+			asn1p_expr_free(expr);
+
 		free(xp);
 	}
 }
diff --git a/libasn1parser/asn1p_y.c b/libasn1parser/asn1p_y.c
index 9d355b7..11acfae 100644
--- a/libasn1parser/asn1p_y.c
+++ b/libasn1parser/asn1p_y.c
@@ -2449,6 +2449,10 @@
 		AL_IMPORT((yyval.a_module), exports, (yyvsp[(1) - (3)].a_module), xp_next);
 		AL_IMPORT((yyval.a_module), imports, (yyvsp[(2) - (3)].a_module), xp_next);
 		AL_IMPORT((yyval.a_module), members, (yyvsp[(3) - (3)].a_module), next);
+
+		asn1p_module_free((yyvsp[(1) - (3)].a_module));
+		asn1p_module_free((yyvsp[(2) - (3)].a_module));
+		asn1p_module_free((yyvsp[(3) - (3)].a_module));
 	}
     break;
 
@@ -2469,6 +2473,8 @@
 			break;
 		}
 		AL_IMPORT((yyval.a_module), members, (yyvsp[(2) - (2)].a_module), next);
+
+		asn1p_module_free((yyvsp[(2) - (2)].a_module));
 	}
     break;
 
@@ -2925,7 +2931,7 @@
     {
 		(yyval.a_expr) = NEW_EXPR();
 		checkmem((yyval.a_expr));
-		(yyval.a_expr)->Identifier = "?";
+		(yyval.a_expr)->Identifier = strdup("?");
 		(yyval.a_expr)->expr_type = A1TC_REFERENCE;
 		(yyval.a_expr)->meta_type = AMT_VALUE;
 		(yyval.a_expr)->value = (yyvsp[(1) - (1)].a_value);
@@ -2989,6 +2995,7 @@
     {
         (yyval.a_expr) = (yyvsp[(1) - (5)].a_expr);
 		asn1p_expr_add_many((yyval.a_expr), (yyvsp[(4) - (5)].a_expr));
+		asn1p_expr_free((yyvsp[(4) - (5)].a_expr));
 	}
     break;
 
@@ -3324,6 +3331,8 @@
 		} else {
 			if((yyval.a_expr)->constraints) {
 				assert(!(yyvsp[(2) - (3)].a_expr));
+				/* Check this : optConstraints is not used ?! */
+				asn1p_constraint_free((yyvsp[(3) - (3)].a_constr));
 			} else {
 				(yyval.a_expr)->constraints = (yyvsp[(3) - (3)].a_constr);
 			}
@@ -4412,6 +4421,7 @@
 		(yyval.a_constr) = asn1p_constraint_new(yylineno);
 		(yyval.a_constr)->type = ACT_CT_CTNG;
 		(yyval.a_constr)->value = asn1p_value_fromtype((yyvsp[(2) - (2)].a_expr));
+		asn1p_expr_free((yyvsp[(2) - (2)].a_expr));
 	}
     break;
 
diff --git a/libasn1parser/asn1p_y.y b/libasn1parser/asn1p_y.y
index 910989a..b8406b6 100644
--- a/libasn1parser/asn1p_y.y
+++ b/libasn1parser/asn1p_y.y
@@ -529,6 +529,10 @@
 		AL_IMPORT($$, exports, $1, xp_next);
 		AL_IMPORT($$, imports, $2, xp_next);
 		AL_IMPORT($$, members, $3, next);
+
+		asn1p_module_free($1);
+		asn1p_module_free($2);
+		asn1p_module_free($3);
 	}
 	;
 
@@ -544,6 +548,7 @@
 			break;
 		}
 		AL_IMPORT($$, members, $2, next);
+		asn1p_module_free($2);
 	}
 	;
 
@@ -874,6 +879,7 @@
 		ret = asn1p_ref_add_component($$.governor, $1, 0);
 		checkmem(ret == 0);
 		$$.argument = $3;
+		free($1);
 	}
 	| TypeRefName ':' TypeRefName {
 		int ret;
@@ -881,6 +887,7 @@
 		ret = asn1p_ref_add_component($$.governor, $1, 0);
 		checkmem(ret == 0);
 		$$.argument = $3;
+		free($1);
 	}
 	| BasicTypeId ':' Identifier {
 		int ret;
@@ -919,7 +926,7 @@
 	| SimpleValue {
 		$$ = NEW_EXPR();
 		checkmem($$);
-		$$->Identifier = "?";
+		$$->Identifier = strdup("?");
 		$$->expr_type = A1TC_REFERENCE;
 		$$->meta_type = AMT_VALUE;
 		$$->value = $1;
@@ -972,8 +979,9 @@
 		asn1p_expr_add($$, $3);
 	}
 	| ComponentTypeLists ',' TOK_VBracketLeft ComponentTypeLists TOK_VBracketRight {
-        $$ = $1;
+		$$ = $1;
 		asn1p_expr_add_many($$, $4);
+		asn1p_expr_free($4);
 	}
 	;
 
@@ -1225,6 +1233,8 @@
 		} else {
 			if($$->constraints) {
 				assert(!$2);
+				/* Check this : optConstraints is not used ?! */
+				asn1p_constraint_free($3);
 			} else {
 				$$->constraints = $3;
 			}
@@ -1316,6 +1326,7 @@
 		checkmem(ret == 0);
 		$$->expr_type = ASN_TYPE_ANY;
 		$$->meta_type = AMT_TYPE;
+		free($4);
 	}
 	| TOK_INSTANCE TOK_OF ComplexTypeReference {
 		$$ = NEW_EXPR();
@@ -1349,6 +1360,7 @@
 		ret = asn1p_ref_add_component($$, $3, RLT_UNKNOWN);
 		checkmem(ret == 0);
 		free($1);
+		free($3);
 	}
 	| ObjectClassReference '.' TypeRefName {
 		int ret;
@@ -1359,6 +1371,7 @@
 		ret = asn1p_ref_add_component($$, $3, RLT_UNKNOWN);
 		checkmem(ret == 0);
 		free($1);
+		free($3);
 	}
 	| TOK_typereference '.' Identifier {
 		int ret;
@@ -1369,6 +1382,7 @@
 		ret = asn1p_ref_add_component($$, $3, RLT_lowercase);
 		checkmem(ret == 0);
 		free($1);
+		free($3);
 	}
 	| ObjectClassReference {
 		int ret;
@@ -1438,14 +1452,17 @@
 	TOK_typefieldreference {
 		$$ = asn1p_ref_new(yylineno);
 		asn1p_ref_add_component($$, $1, RLT_AmpUppercase);
+		free($1);
 	}
 	| FieldName '.' TOK_typefieldreference {
 		$$ = $$;
 		asn1p_ref_add_component($$, $3, RLT_AmpUppercase);
+		free($3);
 	}
 	| FieldName '.' TOK_valuefieldreference {
 		$$ = $$;
 		asn1p_ref_add_component($$, $3, RLT_Amplowercase);
+		free($3);
 	}
 	;
 
@@ -1453,12 +1470,15 @@
 	TOK_capitalreference {
 		$$ = asn1p_ref_new(yylineno);
 		asn1p_ref_add_component($$, $1, RLT_CAPITALS);
+		free($1);
 	}
 /*
 	| TypeRefName '.' TOK_capitalreference {
 		$$ = asn1p_ref_new(yylineno);
 		asn1p_ref_add_component($$, $1, RLT_AmpUppercase);
 		asn1p_ref_add_component($$, $3, RLT_CAPITALS);
+		free($1);
+		free($3);
 	}
 */
 	;
@@ -1515,10 +1535,12 @@
 	| TOK_bstring {
 		$$ = _convert_bitstring2binary($1, 'B');
 		checkmem($$);
+		free($1);
 	}
 	| TOK_hstring {
 		$$ = _convert_bitstring2binary($1, 'H');
 		checkmem($$);
+		free($1);
 	}
 	| RestrictedCharacterStringValue {
 		$$ = $$;
@@ -1849,6 +1871,7 @@
 		ref = asn1p_ref_new(yylineno);
 		asn1p_ref_add_component(ref, $2, RLT_lowercase);
 		$$->value = asn1p_value_fromref(ref, 0);
+		free($2);
 	}
 	;
 
@@ -1892,10 +1915,12 @@
 	TOK_bstring {
 		$$ = _convert_bitstring2binary($1, 'B');
 		checkmem($$);
+		free($1);
 	}
 	| TOK_hstring {
 		$$ = _convert_bitstring2binary($1, 'H');
 		checkmem($$);
+		free($1);
 	}
 	;
 
@@ -1993,6 +2018,7 @@
 		$$ = asn1p_constraint_new(yylineno);
 		$$->type = ACT_CT_CTNG;
 		$$->value = asn1p_value_fromtype($2);
+		asn1p_expr_free($2);
 	}
 	;
 
@@ -2026,6 +2052,7 @@
 		ct->type = ACT_EL_VALUE;
 		ct->value = asn1p_value_fromref(ref, 0);
 		CONSTRAINT_INSERT($$, ACT_CA_CRC, ct, 0);
+		free($2);
 	}
 	;
 
@@ -2094,6 +2121,8 @@
 		$$[l1] = '.';
 		memcpy($$ + l1 + 1, $3, l3);
 		$$[l1 + 1 + l3] = '\0';
+		free($1);
+		free($3);
 	}
 	;
 
diff --git a/libasn1parser/asn1parser.c b/libasn1parser/asn1parser.c
index 2ade9e9..42982c6 100644
--- a/libasn1parser/asn1parser.c
+++ b/libasn1parser/asn1parser.c
@@ -53,8 +53,10 @@
 
 	if(ret == 0) {
 		assert(a);
-		if(_asn1p_fix_modules(a, "-"))
+		if(_asn1p_fix_modules(a, "-")) {
+			asn1p_delete(a);
 			return NULL;	/* FIXME: destroy (a) */
+		}
 	} else if(a) {
 		asn1p_delete(a);
 		a = NULL;
@@ -110,8 +112,10 @@
 
 	if(ret == 0) {
 		assert(a);
-		if(_asn1p_fix_modules(a, filename))
+		if(_asn1p_fix_modules(a, filename)) {
+			asn1p_delete(a);
 			return NULL;	/* FIXME: destroy (a) */
+		}
 	} else if(a) {
 		asn1p_delete(a);
 		a = NULL;
diff --git a/libasn1parser/asn1parser.h b/libasn1parser/asn1parser.h
index e83b747..4926c77 100644
--- a/libasn1parser/asn1parser.h
+++ b/libasn1parser/asn1parser.h
@@ -70,5 +70,6 @@
 	enum asn1p_flags);
 
 int asn1p_atoi(const char *ptr, asn1c_integer_t *r_value);
+int asn1p_lex_destroy();
 
 #endif	/* ASN1PARSER_H */
