diff --git a/src/ast/simplifiers/dependent_expr_state.h b/src/ast/simplifiers/dependent_expr_state.h
index 165cbbce0..e187f19c6 100644
--- a/src/ast/simplifiers/dependent_expr_state.h
+++ b/src/ast/simplifiers/dependent_expr_state.h
@@ -105,14 +105,14 @@ public:
 class default_dependent_expr_state : public dependent_expr_state {
 public:
     default_dependent_expr_state(ast_manager& m): dependent_expr_state(m) {}
-    virtual unsigned qtail() const { return 0; }
-    virtual dependent_expr const& operator[](unsigned i) { throw default_exception("unexpected access"); }
-    virtual void update(unsigned i, dependent_expr const& j) { throw default_exception("unexpected update"); }
-    virtual void add(dependent_expr const& j) { throw default_exception("unexpected addition"); }
-    virtual bool inconsistent() { return false; }
-    virtual model_reconstruction_trail& model_trail() { throw default_exception("unexpected access to model reconstruction"); }
-    virtual bool updated() { return false; }
-    virtual void reset_updated() {}
+    unsigned qtail() const override { return 0; }
+    dependent_expr const& operator[](unsigned i) override { throw default_exception("unexpected access"); }
+    void update(unsigned i, dependent_expr const& j) override { throw default_exception("unexpected update"); }
+    void add(dependent_expr const& j) override { throw default_exception("unexpected addition"); }
+    bool inconsistent() override { return false; }
+    model_reconstruction_trail& model_trail() override { throw default_exception("unexpected access to model reconstruction"); }
+    bool updated() override { return false; }
+    void reset_updated() override {}
 
 };
 
diff --git a/src/ast/simplifiers/model_reconstruction_trail.h b/src/ast/simplifiers/model_reconstruction_trail.h
index 79a38401a..c2d8b0001 100644
--- a/src/ast/simplifiers/model_reconstruction_trail.h
+++ b/src/ast/simplifiers/model_reconstruction_trail.h
@@ -90,7 +90,7 @@ class model_reconstruction_trail {
     struct undo_model_var : public trail {
         model_reconstruction_trail& s;
         undo_model_var(model_reconstruction_trail& s) : s(s) {}
-        virtual void undo() {
+        void undo() override {
             s.m_model_vars.mark(s.m_model_vars_trail.back(), false);
             s.m_model_vars_trail.pop_back();
         }
diff --git a/src/math/lp/lar_solver.cpp b/src/math/lp/lar_solver.cpp
index 15d03fb86..a55edfe35 100644
--- a/src/math/lp/lar_solver.cpp
+++ b/src/math/lp/lar_solver.cpp
@@ -1490,7 +1490,7 @@ namespace lp {
     struct lar_solver::undo_add_column : public trail {
         lar_solver& s;
         undo_add_column(lar_solver& s) : s(s) {}
-        virtual void undo() {
+        void undo() override {
             s.remove_last_column_from_tableau();            
             s.m_columns_to_ul_pairs.pop_back();
             unsigned j = s.m_columns_to_ul_pairs.size();
diff --git a/src/solver/simplifier_solver.cpp b/src/solver/simplifier_solver.cpp
index 712c42f45..7debe6bc0 100644
--- a/src/solver/simplifier_solver.cpp
+++ b/src/solver/simplifier_solver.cpp
@@ -39,7 +39,7 @@ class simplifier_solver : public solver {
         bool m_updated = false;
         dep_expr_state(simplifier_solver& s) :dependent_expr_state(s.m), s(s), m_reconstruction_trail(s.m, m_trail) {}
         ~dep_expr_state() override {}
-        virtual unsigned qtail() const override { return s.m_fmls.size(); }
+        unsigned qtail() const override { return s.m_fmls.size(); }
         dependent_expr const& operator[](unsigned i) override { return s.m_fmls[i]; }
         void update(unsigned i, dependent_expr const& j) override { 
             SASSERT(j.fml());