diff --git a/src/transform/eliminate_algebraic.ml b/src/transform/eliminate_algebraic.ml
index 5a347552e788c333842ecd9cc80d8d8bdacdc354..8af6fcb361105bf75aa45d6686e9f27ae3bac4a3 100644
--- a/src/transform/eliminate_algebraic.ml
+++ b/src/transform/eliminate_algebraic.ml
@@ -74,7 +74,9 @@ type state = {
   keep_t : bool;                (* keep algebraic type definitions *)
   keep_e : bool;                (* keep monomorphic enumeration types *)
   keep_r : bool;                (* keep non-recursive records *)
-  no_ind : bool;                (* do not generate indexing funcitons *)
+  no_ind : bool;                (* do not generate indexing functions *)
+  no_inv : bool;                (* do not generate inversion axioms *)
+  no_sel : bool;                (* do not generate selector *)
 }
 
 let empty_state = {
@@ -87,6 +89,8 @@ let empty_state = {
   keep_e = false;
   keep_r = false;
   no_ind = false;
+  no_inv = false;
+  no_sel = false;
 }
 
 let uncompiled = "eliminate_algebraic: compile_match required"
@@ -185,6 +189,7 @@ and rewriteF kn state av sign f = match f.t_node with
         (rewriteF kn state Svs.empty) sign f
 
 let add_selector (state,task) ts ty csl =
+  if state.no_sel then state, task else
   (* declare the selector function *)
   let mt_id = id_derive ("match_" ^ ts.ts_name.id_string) ts.ts_name in
   let mt_ty = ty_var (create_tvsymbol (id_fresh "a")) in
@@ -299,7 +304,7 @@ let add_projections (state,task) _ts _ty csl =
   { state with pj_map = pjmap }, task
 
 let add_inversion (state,task) ts ty csl =
-  if state.keep_t then state, task else
+  if state.keep_t or state.no_inv then state, task else
   (* add the inversion axiom *)
   let ax_id = ts.ts_name.id_string ^ "_inversion" in
   let ax_pr = create_prsymbol (id_derive ax_id ts.ts_name) in
@@ -433,7 +438,10 @@ let meta_elim = register_meta "eliminate_algebraic" [MTstring]
     \"keep_types\" : @[keep algebraic type definitions@]@\n\
     \"keep_enums\" : @[keep monomorphic enumeration types@]@\n\
     \"keep_recs\"  : @[keep non-recursive records@]@\n\
-    \"no_index\"   : @[do not generate indexing functions@]@]"
+    \"no_index\"   : @[do not generate indexing functions@]@\n\
+    \"no_inversion\" : @[do not generate inversion axioms@]@\n\
+    \"no_selector\"  : @[do not generate selector@]@]"
+
 
 let eliminate_algebraic = Trans.compose compile_match
   (Trans.on_meta meta_elim (fun ml ->
@@ -443,6 +451,8 @@ let eliminate_algebraic = Trans.compose compile_match
       | [MAstr "keep_enums"] -> { st with keep_e = true }
       | [MAstr "keep_recs"]  -> { st with keep_r = true }
       | [MAstr "no_index"]   -> { st with no_ind = true }
+      | [MAstr "no_inversion"] -> { st with no_inv = true }
+      | [MAstr "no_selector"]  -> { st with no_sel = true }
       | _ -> raise (Invalid_argument "meta eliminate_algebraic")
     in
     let st = List.fold_left check st ml in