diff --git a/src/storm-dft/builder/DftExplorationHeuristic.h b/src/storm-dft/builder/DftExplorationHeuristic.h
index f4cc3c1ce..2de704e29 100644
--- a/src/storm-dft/builder/DftExplorationHeuristic.h
+++ b/src/storm-dft/builder/DftExplorationHeuristic.h
@@ -22,6 +22,8 @@ namespace storm {
 
             DFTExplorationHeuristic(size_t id, DFTExplorationHeuristic const& predecessor, ValueType rate, ValueType exitRate);
 
+            virtual ~DFTExplorationHeuristic() = default;
+
             void setBounds(ValueType lowerBound, ValueType upperBound);
 
             virtual bool updateHeuristicValues(DFTExplorationHeuristic const& predecessor, ValueType rate, ValueType exitRate) = 0;
diff --git a/src/storm-pgcl/storage/pgcl/AbstractStatementVisitor.h b/src/storm-pgcl/storage/pgcl/AbstractStatementVisitor.h
index 75cb54186..0c0809e94 100755
--- a/src/storm-pgcl/storage/pgcl/AbstractStatementVisitor.h
+++ b/src/storm-pgcl/storage/pgcl/AbstractStatementVisitor.h
@@ -13,6 +13,8 @@ namespace storm {
          */
         class AbstractStatementVisitor {
         public:
+            virtual ~AbstractStatementVisitor() = default;
+
             // Those functions need to be implemented for every possible
             // statement instantiation.
             virtual void visit(class AssignmentStatement const&) = 0;
diff --git a/src/storm-pgcl/storage/ppg/ProgramAction.h b/src/storm-pgcl/storage/ppg/ProgramAction.h
index adeb1c858..839a097c7 100644
--- a/src/storm-pgcl/storage/ppg/ProgramAction.h
+++ b/src/storm-pgcl/storage/ppg/ProgramAction.h
@@ -13,7 +13,9 @@ namespace storm {
             ProgramAction(ProgramGraph* graph, ProgramActionIdentifier id) : graph(graph), actId(id) {
                 
             }
-            
+
+            virtual ~ProgramAction() = default;
+
             ProgramActionIdentifier id() const {
                 return actId;
             }
diff --git a/src/storm/abstraction/MenuGameAbstractor.h b/src/storm/abstraction/MenuGameAbstractor.h
index 283559470..946fb0a97 100644
--- a/src/storm/abstraction/MenuGameAbstractor.h
+++ b/src/storm/abstraction/MenuGameAbstractor.h
@@ -24,6 +24,8 @@ namespace storm {
         template <storm::dd::DdType DdType, typename ValueType>
         class MenuGameAbstractor {
         public:
+            virtual ~MenuGameAbstractor() = default;
+
             /// Retrieves the abstraction.
             virtual MenuGame<DdType, ValueType> abstract() = 0;
 
diff --git a/src/storm/abstraction/QualitativeResult.h b/src/storm/abstraction/QualitativeResult.h
index 8d2873541..0d027b3a7 100644
--- a/src/storm/abstraction/QualitativeResult.h
+++ b/src/storm/abstraction/QualitativeResult.h
@@ -13,6 +13,8 @@ namespace storm {
         template <storm::dd::DdType Type>
         class QualitativeResult {
         public:
+            virtual ~QualitativeResult() = default;
+
             virtual storm::dd::Bdd<Type> const& getStates() const = 0;
         };
         
diff --git a/src/storm/abstraction/QualitativeResultMinMax.h b/src/storm/abstraction/QualitativeResultMinMax.h
index e748d4023..b6aa96382 100644
--- a/src/storm/abstraction/QualitativeResultMinMax.h
+++ b/src/storm/abstraction/QualitativeResultMinMax.h
@@ -10,6 +10,8 @@ namespace storm {
         
         class QualitativeResultMinMax {
         public:
+            virtual ~QualitativeResultMinMax() = default;
+
             virtual bool isSymbolic() const;
             
             template<storm::dd::DdType Type>
diff --git a/src/storm/abstraction/StateSet.h b/src/storm/abstraction/StateSet.h
index 2a4e0642d..badeaf534 100644
--- a/src/storm/abstraction/StateSet.h
+++ b/src/storm/abstraction/StateSet.h
@@ -10,6 +10,8 @@ namespace storm {
         
         class StateSet {
         public:
+            virtual ~StateSet() = default;
+
             virtual bool isSymbolic() const;
             
             template<storm::dd::DdType Type>
diff --git a/src/storm/counterexamples/Counterexample.h b/src/storm/counterexamples/Counterexample.h
index 8cd93178d..060f1f718 100644
--- a/src/storm/counterexamples/Counterexample.h
+++ b/src/storm/counterexamples/Counterexample.h
@@ -7,6 +7,8 @@ namespace storm {
         
         class Counterexample {
         public:
+            virtual ~Counterexample() = default;
+
             virtual void writeToStream(std::ostream& out) const = 0;
         };
         
diff --git a/src/storm/logic/FormulaVisitor.h b/src/storm/logic/FormulaVisitor.h
index 9548096f7..f0abd0436 100644
--- a/src/storm/logic/FormulaVisitor.h
+++ b/src/storm/logic/FormulaVisitor.h
@@ -10,6 +10,8 @@ namespace storm {
 
         class FormulaVisitor {
         public:
+            virtual ~FormulaVisitor() = default;
+
             virtual boost::any visit(AtomicExpressionFormula const& f, boost::any const& data) const = 0;
             virtual boost::any visit(AtomicLabelFormula const& f, boost::any const& data) const = 0;
             virtual boost::any visit(BinaryBooleanStateFormula const& f, boost::any const& data) const = 0;
diff --git a/src/storm/modelchecker/hints/ModelCheckerHint.h b/src/storm/modelchecker/hints/ModelCheckerHint.h
index 14dd4dcbb..5ee82aea5 100644
--- a/src/storm/modelchecker/hints/ModelCheckerHint.h
+++ b/src/storm/modelchecker/hints/ModelCheckerHint.h
@@ -15,7 +15,8 @@ namespace storm {
         class ModelCheckerHint {
         public:
             ModelCheckerHint() = default;
-            
+            virtual ~ModelCheckerHint() = default;
+
             // Returns true iff this hint does not contain any information.
             virtual bool isEmpty() const;
             
diff --git a/src/storm/modelchecker/multiobjective/SparseMultiObjectivePreprocessorTask.h b/src/storm/modelchecker/multiobjective/SparseMultiObjectivePreprocessorTask.h
index f84b935b6..474eb10f8 100644
--- a/src/storm/modelchecker/multiobjective/SparseMultiObjectivePreprocessorTask.h
+++ b/src/storm/modelchecker/multiobjective/SparseMultiObjectivePreprocessorTask.h
@@ -24,7 +24,9 @@ namespace storm {
                 SparseMultiObjectivePreprocessorTask(std::shared_ptr<Objective<typename SparseModelType::ValueType>> const& objective) : objective(objective) {
                     // intentionally left empty
                 }
-                
+
+                virtual ~SparseMultiObjectivePreprocessorTask() = default;
+
                 virtual void perform(SparseModelType& preprocessedModel) const = 0;
                 
                 virtual bool requiresEndComponentAnalysis() const {
diff --git a/src/storm/modelchecker/prctl/helper/DsMpiUpperRewardBoundsComputer.h b/src/storm/modelchecker/prctl/helper/DsMpiUpperRewardBoundsComputer.h
index 7f2bb4278..f49470dcf 100644
--- a/src/storm/modelchecker/prctl/helper/DsMpiUpperRewardBoundsComputer.h
+++ b/src/storm/modelchecker/prctl/helper/DsMpiUpperRewardBoundsComputer.h
@@ -27,7 +27,9 @@ namespace storm {
                  * @param oneStepTargetProbabilities For each state the probability to go to a goal state in one step.
                  */
                 DsMpiDtmcUpperRewardBoundsComputer(storm::storage::SparseMatrix<ValueType> const& transitionMatrix, std::vector<ValueType> const& rewards, std::vector<ValueType> const& oneStepTargetProbabilities);
-                
+
+                virtual ~DsMpiDtmcUpperRewardBoundsComputer() = default;
+
                 /*!
                  * Computes upper bounds on the expected rewards.
                  */
diff --git a/src/storm/models/sparse/ItemLabeling.h b/src/storm/models/sparse/ItemLabeling.h
index 746320afd..04d9950d2 100644
--- a/src/storm/models/sparse/ItemLabeling.h
+++ b/src/storm/models/sparse/ItemLabeling.h
@@ -33,6 +33,7 @@ namespace storm {
                 ItemLabeling(ItemLabeling const& other) = default;
                 ItemLabeling& operator=(ItemLabeling const& other) = default;
 
+                virtual ~ItemLabeling() = default;
 
                 virtual bool isStateLabeling() const;
                 virtual bool isChoiceLabeling() const;
diff --git a/src/storm/models/sparse/StateAnnotation.h b/src/storm/models/sparse/StateAnnotation.h
index b42e2c9be..edaf0feda 100644
--- a/src/storm/models/sparse/StateAnnotation.h
+++ b/src/storm/models/sparse/StateAnnotation.h
@@ -9,6 +9,8 @@ namespace storm {
             
             class StateAnnotation {
             public:
+                virtual ~StateAnnotation() = default;
+
                 virtual std::string getStateInfo(storm::storage::sparse::state_type const& state) const = 0;
             };
             
diff --git a/src/storm/permissivesched/PermissiveSchedulerComputation.h b/src/storm/permissivesched/PermissiveSchedulerComputation.h
index 372b4a15d..5aa2f400e 100644
--- a/src/storm/permissivesched/PermissiveSchedulerComputation.h
+++ b/src/storm/permissivesched/PermissiveSchedulerComputation.h
@@ -26,8 +26,9 @@ namespace storm {
             {
                 
             }
-            
-                    
+
+            virtual ~PermissiveSchedulerComputation() = default;
+
             virtual void calculatePermissiveScheduler(bool lowerBound, double boundary) = 0;
             
             void setPenalties(PermissiveSchedulerPenalties penalties) {
diff --git a/src/storm/settings/ArgumentBase.h b/src/storm/settings/ArgumentBase.h
index b48a46183..4a5b4f133 100644
--- a/src/storm/settings/ArgumentBase.h
+++ b/src/storm/settings/ArgumentBase.h
@@ -26,7 +26,9 @@ namespace storm {
 			ArgumentBase(std::string const& name, std::string const& description) : hasBeenSet(false), name(name), description(description) {
                 // Intentionally left empty.
             }
-            
+
+            virtual ~ArgumentBase() = default;
+
             /*!
              * Retrieves the type of the argument.
              *
diff --git a/src/storm/settings/ArgumentValidators.h b/src/storm/settings/ArgumentValidators.h
index 4b3b0b3d8..93ced6f26 100644
--- a/src/storm/settings/ArgumentValidators.h
+++ b/src/storm/settings/ArgumentValidators.h
@@ -12,6 +12,8 @@ namespace storm {
         template <typename ValueType>
         class ArgumentValidator {
         public:
+            virtual ~ArgumentValidator() = default;
+
             /*!
              * Checks whether the argument passes the validation.
              */
diff --git a/src/storm/solver/GameSolver.h b/src/storm/solver/GameSolver.h
index a2f6888d4..bf2b2fdc9 100644
--- a/src/storm/solver/GameSolver.h
+++ b/src/storm/solver/GameSolver.h
@@ -167,6 +167,7 @@ namespace storm {
         class GameSolverFactory {
         public:
             GameSolverFactory();
+            virtual ~GameSolverFactory() = default;
 
             virtual std::unique_ptr<GameSolver<ValueType>> create(storm::storage::SparseMatrix<storm::storage::sparse::state_type> const& player1Matrix, storm::storage::SparseMatrix<ValueType> const& player2Matrix) const;
             virtual std::unique_ptr<GameSolver<ValueType>> create(storm::storage::SparseMatrix<storm::storage::sparse::state_type>&& player1Matrix, storm::storage::SparseMatrix<ValueType>&& player2Matrix) const;
diff --git a/src/storm/solver/LinearEquationSolver.h b/src/storm/solver/LinearEquationSolver.h
index e2e5fdb11..fea208b57 100644
--- a/src/storm/solver/LinearEquationSolver.h
+++ b/src/storm/solver/LinearEquationSolver.h
@@ -179,6 +179,8 @@ namespace storm {
         template<typename ValueType>
         class LinearEquationSolverFactory {
         public:
+            virtual ~LinearEquationSolverFactory() = default;
+
             /*!
              * Creates a new linear equation solver instance with the given matrix.
              *
diff --git a/src/storm/solver/LpSolver.h b/src/storm/solver/LpSolver.h
index 7ec7cb906..08d91c463 100644
--- a/src/storm/solver/LpSolver.h
+++ b/src/storm/solver/LpSolver.h
@@ -36,6 +36,8 @@ namespace storm {
              */
             LpSolver(OptimizationDirection const& optDir);
 
+            virtual ~LpSolver() = default;
+
             /*!
              * Registers an upper- and lower-bounded continuous variable, i.e. a variable that may take all real values
              * within its bounds.
diff --git a/src/storm/solver/MinMaxLinearEquationSolver.h b/src/storm/solver/MinMaxLinearEquationSolver.h
index 5f095f5c8..d414eb9f7 100644
--- a/src/storm/solver/MinMaxLinearEquationSolver.h
+++ b/src/storm/solver/MinMaxLinearEquationSolver.h
@@ -207,6 +207,7 @@ namespace storm {
         class MinMaxLinearEquationSolverFactory {
         public:
             MinMaxLinearEquationSolverFactory(MinMaxMethodSelection const& method = MinMaxMethodSelection::FROMSETTINGS, bool trackScheduler = false);
+	    virtual ~MinMaxLinearEquationSolverFactory() = default;
             
             std::unique_ptr<MinMaxLinearEquationSolver<ValueType>> create(storm::storage::SparseMatrix<ValueType> const& matrix) const;
             std::unique_ptr<MinMaxLinearEquationSolver<ValueType>> create(storm::storage::SparseMatrix<ValueType>&& matrix) const;
diff --git a/src/storm/solver/SmtSolver.h b/src/storm/solver/SmtSolver.h
index 3e3a4eeb5..6d842500c 100644
--- a/src/storm/solver/SmtSolver.h
+++ b/src/storm/solver/SmtSolver.h
@@ -36,7 +36,8 @@ namespace storm {
                  * @param manager The manager responsible for the variables whose value can be requested.
                  */
                 ModelReference(storm::expressions::ExpressionManager const& manager);
-                
+                virtual ~ModelReference() = default;
+
                 virtual bool getBooleanValue(storm::expressions::Variable const& variable) const = 0;
 				virtual int_fast64_t getIntegerValue(storm::expressions::Variable const& variable) const = 0;
                 virtual double getRationalValue(storm::expressions::Variable const& variable) const = 0;
diff --git a/src/storm/solver/SymbolicEquationSolver.h b/src/storm/solver/SymbolicEquationSolver.h
index 73681d762..b4aa62933 100644
--- a/src/storm/solver/SymbolicEquationSolver.h
+++ b/src/storm/solver/SymbolicEquationSolver.h
@@ -13,6 +13,7 @@ namespace storm {
         public:
             SymbolicEquationSolver() = default;
             SymbolicEquationSolver(storm::dd::Bdd<DdType> const& allRows);
+            virtual ~SymbolicEquationSolver() = default;
 
             virtual void setLowerBounds(storm::dd::Add<DdType, ValueType> const& lowerBounds);
             virtual void setLowerBound(ValueType const& lowerBound);
diff --git a/src/storm/solver/SymbolicGameSolver.h b/src/storm/solver/SymbolicGameSolver.h
index adcec325d..e6594d3de 100644
--- a/src/storm/solver/SymbolicGameSolver.h
+++ b/src/storm/solver/SymbolicGameSolver.h
@@ -54,7 +54,9 @@ namespace storm {
              * @param relative Sets whether or not to use a relativ stopping criterion rather than an absolute one.
              */
             SymbolicGameSolver(storm::dd::Add<Type, ValueType> const& A, storm::dd::Bdd<Type> const& allRows, storm::dd::Bdd<Type> const& illegalPlayer1Mask, storm::dd::Bdd<Type> const& illegalPlayer2Mask, std::set<storm::expressions::Variable> const& rowMetaVariables, std::set<storm::expressions::Variable> const& columnMetaVariables, std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs, std::set<storm::expressions::Variable> const& player1Variables, std::set<storm::expressions::Variable> const& player2Variables, ValueType precision, uint_fast64_t maximalNumberOfIterations, bool relative);
-            
+
+            virtual ~SymbolicGameSolver() = default;
+
             /*!
              * Solves the equation system defined by the game matrix. Note that the game matrix has to be given upon
              * construction time of the solver object.
@@ -133,6 +135,8 @@ namespace storm {
         template<storm::dd::DdType Type, typename ValueType>
         class SymbolicGameSolverFactory {
         public:
+            virtual ~SymbolicGameSolverFactory() = default;
+
             virtual std::unique_ptr<storm::solver::SymbolicGameSolver<Type, ValueType>> create(storm::dd::Add<Type, ValueType> const& A, storm::dd::Bdd<Type> const& allRows, storm::dd::Bdd<Type> const& illegalPlayer1Mask, storm::dd::Bdd<Type> const& illegalPlayer2Mask, std::set<storm::expressions::Variable> const& rowMetaVariables, std::set<storm::expressions::Variable> const& columnMetaVariables, std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs, std::set<storm::expressions::Variable> const& player1Variables, std::set<storm::expressions::Variable> const& player2Variables) const;
         };
         
diff --git a/src/storm/solver/SymbolicLinearEquationSolver.h b/src/storm/solver/SymbolicLinearEquationSolver.h
index d8d2e00ca..96b4cab83 100644
--- a/src/storm/solver/SymbolicLinearEquationSolver.h
+++ b/src/storm/solver/SymbolicLinearEquationSolver.h
@@ -33,7 +33,8 @@ namespace storm {
         class SymbolicLinearEquationSolver : public SymbolicEquationSolver<DdType, ValueType> {
         public:
             SymbolicLinearEquationSolver();
-            
+            virtual ~SymbolicLinearEquationSolver() = default;
+
             /*!
              * Constructs a symbolic linear equation solver with the given meta variable sets and pairs.
              *
@@ -116,6 +117,8 @@ namespace storm {
         template<storm::dd::DdType DdType, typename ValueType>
         class SymbolicLinearEquationSolverFactory {
         public:
+            virtual ~SymbolicLinearEquationSolverFactory() = default;
+
             std::unique_ptr<storm::solver::SymbolicLinearEquationSolver<DdType, ValueType>> create(storm::dd::Bdd<DdType> const& allRows, std::set<storm::expressions::Variable> const& rowMetaVariables, std::set<storm::expressions::Variable> const& columnMetaVariables, std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs) const;
             
             std::unique_ptr<storm::solver::SymbolicLinearEquationSolver<DdType, ValueType>> create(storm::dd::Add<DdType, ValueType> const& A, storm::dd::Bdd<DdType> const& allRows, std::set<storm::expressions::Variable> const& rowMetaVariables, std::set<storm::expressions::Variable> const& columnMetaVariables, std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs) const;
diff --git a/src/storm/solver/SymbolicMinMaxLinearEquationSolver.h b/src/storm/solver/SymbolicMinMaxLinearEquationSolver.h
index 973caf59f..f8aabedc2 100644
--- a/src/storm/solver/SymbolicMinMaxLinearEquationSolver.h
+++ b/src/storm/solver/SymbolicMinMaxLinearEquationSolver.h
@@ -62,7 +62,8 @@ namespace storm {
         class SymbolicMinMaxLinearEquationSolver : public SymbolicEquationSolver<DdType, ValueType> {
         public:
             SymbolicMinMaxLinearEquationSolver(SymbolicMinMaxLinearEquationSolverSettings<ValueType> const& settings = SymbolicMinMaxLinearEquationSolverSettings<ValueType>());
-            
+            virtual ~SymbolicMinMaxLinearEquationSolver() = default;
+
             /*!
              * Constructs a symbolic min/max linear equation solver with the given meta variable sets and pairs.
              *
@@ -237,6 +238,8 @@ namespace storm {
         template<storm::dd::DdType DdType, typename ValueType>
         class SymbolicMinMaxLinearEquationSolverFactory {
         public:
+            virtual ~SymbolicMinMaxLinearEquationSolverFactory() = default;
+
             virtual std::unique_ptr<storm::solver::SymbolicMinMaxLinearEquationSolver<DdType, ValueType>> create(storm::dd::Add<DdType, ValueType> const& A, storm::dd::Bdd<DdType> const& allRows, storm::dd::Bdd<DdType> const& illegalMask, std::set<storm::expressions::Variable> const& rowMetaVariables, std::set<storm::expressions::Variable> const& columnMetaVariables, std::set<storm::expressions::Variable> const& choiceVariables, std::vector<std::pair<storm::expressions::Variable, storm::expressions::Variable>> const& rowColumnMetaVariablePairs) const = 0;
             
             /*!
diff --git a/src/storm/solver/TerminationCondition.h b/src/storm/solver/TerminationCondition.h
index 7c364989c..90f472c91 100644
--- a/src/storm/solver/TerminationCondition.h
+++ b/src/storm/solver/TerminationCondition.h
@@ -10,6 +10,8 @@ namespace storm {
         template<typename ValueType>
         class TerminationCondition {
         public:
+            virtual ~TerminationCondition() = default;
+
             /*!
              * Retrieves whether the guarantee provided by the solver for the current result is sufficient to terminate.
              */
diff --git a/src/storm/solver/stateelimination/EliminatorBase.h b/src/storm/solver/stateelimination/EliminatorBase.h
index 1d918d562..996da58e6 100644
--- a/src/storm/solver/stateelimination/EliminatorBase.h
+++ b/src/storm/solver/stateelimination/EliminatorBase.h
@@ -19,7 +19,8 @@ namespace storm {
                 typedef typename FlexibleRowType::iterator FlexibleRowIterator;
                 
                 EliminatorBase(storm::storage::FlexibleSparseMatrix<ValueType>& matrix, storm::storage::FlexibleSparseMatrix<ValueType>& transposedMatrix);
-                
+                virtual ~EliminatorBase() = default;
+
                 void eliminate(uint64_t row, uint64_t column, bool clearRow);
                 
                 // Provide virtual methods that can be customized by subclasses to govern side-effect of the elimination.
diff --git a/src/storm/solver/stateelimination/StatePriorityQueue.h b/src/storm/solver/stateelimination/StatePriorityQueue.h
index f5cf6c445..cc133fced 100644
--- a/src/storm/solver/stateelimination/StatePriorityQueue.h
+++ b/src/storm/solver/stateelimination/StatePriorityQueue.h
@@ -10,6 +10,8 @@ namespace storm {
          
             class StatePriorityQueue {
             public:
+                virtual ~StatePriorityQueue() = default;
+
                 virtual bool hasNext() const = 0;
                 virtual storm::storage::sparse::state_type pop() = 0;
                 virtual void update(storm::storage::sparse::state_type state);
diff --git a/src/storm/storage/bisimulation/BisimulationDecomposition.h b/src/storm/storage/bisimulation/BisimulationDecomposition.h
index 6aa56345c..51383da56 100644
--- a/src/storm/storage/bisimulation/BisimulationDecomposition.h
+++ b/src/storm/storage/bisimulation/BisimulationDecomposition.h
@@ -180,7 +180,9 @@ namespace storm {
              * @param options The options to use during for the decomposition.
              */
             BisimulationDecomposition(ModelType const& model, Options const& options);
-            
+
+            virtual ~BisimulationDecomposition() = default;
+
             /*!
              * Retrieves the quotient of the model under the computed bisimulation.
              *
diff --git a/src/storm/storage/dd/bisimulation/QuotientExtractor.cpp b/src/storm/storage/dd/bisimulation/QuotientExtractor.cpp
index 218b11ad7..12b5e39f5 100644
--- a/src/storm/storage/dd/bisimulation/QuotientExtractor.cpp
+++ b/src/storm/storage/dd/bisimulation/QuotientExtractor.cpp
@@ -255,6 +255,8 @@ namespace storm {
                     STORM_LOG_TRACE("Partition has " << partitionBdd.existsAbstract(model.getRowVariables()).getNonZeroCount() << " states in " << this->numberOfBlocks << " blocks.");
                 }
 
+                virtual ~InternalSparseQuotientExtractorBase() = default;
+
                 storm::storage::SparseMatrix<ValueType> extractTransitionMatrix(storm::dd::Add<DdType, ValueType> const& transitionMatrix) {
                     return extractMatrixInternal(transitionMatrix);
                 }
diff --git a/src/storm/storage/dd/cudd/InternalCuddAdd.h b/src/storm/storage/dd/cudd/InternalCuddAdd.h
index 64e1176e7..5871e20dc 100644
--- a/src/storm/storage/dd/cudd/InternalCuddAdd.h
+++ b/src/storm/storage/dd/cudd/InternalCuddAdd.h
@@ -67,7 +67,8 @@ namespace storm {
             InternalAdd& operator=(InternalAdd<DdType::CUDD, ValueType> const& other) = default;
             InternalAdd(InternalAdd<DdType::CUDD, ValueType>&& other) = default;
             InternalAdd& operator=(InternalAdd<DdType::CUDD, ValueType>&& other) = default;
-            
+            virtual ~InternalAdd() = default;
+
             /*!
              * Retrieves whether the two DDs represent the same function.
              *
diff --git a/src/storm/storage/dd/sylvan/InternalSylvanAdd.h b/src/storm/storage/dd/sylvan/InternalSylvanAdd.h
index c4374c2b1..79a29f187 100644
--- a/src/storm/storage/dd/sylvan/InternalSylvanAdd.h
+++ b/src/storm/storage/dd/sylvan/InternalSylvanAdd.h
@@ -60,7 +60,8 @@ namespace storm {
             InternalAdd& operator=(InternalAdd<DdType::Sylvan, ValueType> const& other) = default;
             InternalAdd(InternalAdd<DdType::Sylvan, ValueType>&& other) = default;
             InternalAdd& operator=(InternalAdd<DdType::Sylvan, ValueType>&& other) = default;
-            
+            virtual ~InternalAdd() = default;
+
             /*!
              * Retrieves whether the two DDs represent the same function.
              *
@@ -732,7 +733,7 @@ namespace storm {
             static MTBDD getLeaf(uint_fast64_t value);
 
             /*!
-             * Retrieves the sylvan representation of the given storm::Rat�onalNumber.
+             * Retrieves the sylvan representation of the given storm::Rat�onalNumber.
              *
              * @return The sylvan node for the given value.
              */
diff --git a/src/storm/storage/expressions/CompiledExpression.h b/src/storm/storage/expressions/CompiledExpression.h
index 786408c94..dfa0ea02b 100644
--- a/src/storm/storage/expressions/CompiledExpression.h
+++ b/src/storm/storage/expressions/CompiledExpression.h
@@ -7,6 +7,7 @@ namespace storm {
         
         class CompiledExpression {
         public:
+            virtual ~CompiledExpression() = default;
             
             virtual bool isExprtkCompiledExpression() const;
             ExprtkCompiledExpression& asExprtkCompiledExpression();
diff --git a/src/storm/storage/expressions/ExpressionEvaluatorBase.h b/src/storm/storage/expressions/ExpressionEvaluatorBase.h
index 80ae61af6..8fd552d28 100644
--- a/src/storm/storage/expressions/ExpressionEvaluatorBase.h
+++ b/src/storm/storage/expressions/ExpressionEvaluatorBase.h
@@ -9,7 +9,8 @@ namespace storm {
         class ExpressionEvaluatorBase {
         public:
             ExpressionEvaluatorBase(storm::expressions::ExpressionManager const& manager);
-            
+            virtual ~ExpressionEvaluatorBase() = default;
+
             virtual bool asBool(Expression const& expression) const = 0;
             virtual int_fast64_t asInt(Expression const& expression) const = 0;
             virtual RationalReturnType asRational(Expression const& expression) const = 0;
diff --git a/src/storm/storage/expressions/ExpressionVisitor.h b/src/storm/storage/expressions/ExpressionVisitor.h
index edbdc5d5a..8ef1ea90d 100644
--- a/src/storm/storage/expressions/ExpressionVisitor.h
+++ b/src/storm/storage/expressions/ExpressionVisitor.h
@@ -20,6 +20,8 @@ namespace storm {
         
         class ExpressionVisitor {
         public:
+            virtual ~ExpressionVisitor() = default;
+
             virtual boost::any visit(IfThenElseExpression const& expression, boost::any const& data) = 0;
             virtual boost::any visit(BinaryBooleanFunctionExpression const& expression, boost::any const& data) = 0;
             virtual boost::any visit(BinaryNumericalFunctionExpression const& expression, boost::any const& data) = 0;
diff --git a/src/storm/storage/expressions/Type.h b/src/storm/storage/expressions/Type.h
index 44295b76f..b173d5d53 100644
--- a/src/storm/storage/expressions/Type.h
+++ b/src/storm/storage/expressions/Type.h
@@ -15,6 +15,7 @@ namespace storm {
         class BaseType {
         public:
             BaseType();
+            virtual ~BaseType() = default;
             
             /*!
              * Retrieves the mask that is associated with this type.
diff --git a/src/storm/storage/jani/Composition.h b/src/storm/storage/jani/Composition.h
index 773dd93cd..b1375cdce 100644
--- a/src/storm/storage/jani/Composition.h
+++ b/src/storm/storage/jani/Composition.h
@@ -9,6 +9,8 @@ namespace storm {
         
         class Composition {
         public:
+            virtual ~Composition() = default;
+
             virtual boost::any accept(CompositionVisitor& visitor, boost::any const& data) const = 0;
             
             virtual void write(std::ostream& stream) const = 0;
diff --git a/src/storm/storage/jani/CompositionVisitor.h b/src/storm/storage/jani/CompositionVisitor.h
index c346826e2..c9086c722 100644
--- a/src/storm/storage/jani/CompositionVisitor.h
+++ b/src/storm/storage/jani/CompositionVisitor.h
@@ -11,6 +11,8 @@ namespace storm {
         
         class CompositionVisitor {
         public:
+            virtual ~CompositionVisitor() = default;
+
             virtual boost::any visit(AutomatonComposition const& composition, boost::any const& data) = 0;
             virtual boost::any visit(ParallelComposition const& composition, boost::any const& data) = 0;
         };
diff --git a/src/storm/storage/prism/Composition.h b/src/storm/storage/prism/Composition.h
index ac9602af6..06c61b362 100644
--- a/src/storm/storage/prism/Composition.h
+++ b/src/storm/storage/prism/Composition.h
@@ -10,6 +10,7 @@ namespace storm {
         class Composition {
         public:
             Composition() = default;
+            virtual ~Composition() = default;
             
             friend std::ostream& operator<<(std::ostream& stream, Composition const& composition);
             
diff --git a/src/storm/storage/prism/CompositionVisitor.h b/src/storm/storage/prism/CompositionVisitor.h
index 81f7ee40c..41fcd7f72 100644
--- a/src/storm/storage/prism/CompositionVisitor.h
+++ b/src/storm/storage/prism/CompositionVisitor.h
@@ -15,6 +15,8 @@ namespace storm {
         
         class CompositionVisitor {
         public:
+            virtual ~CompositionVisitor() = default;
+
             virtual boost::any visit(ModuleComposition const& composition, boost::any const& data) = 0;
             virtual boost::any visit(RenamingComposition const& composition, boost::any const& data) = 0;
             virtual boost::any visit(HidingComposition const& composition, boost::any const& data) = 0;
diff --git a/src/storm/storage/prism/Variable.h b/src/storm/storage/prism/Variable.h
index 42ba9aec0..ae6c12935 100644
--- a/src/storm/storage/prism/Variable.h
+++ b/src/storm/storage/prism/Variable.h
@@ -17,7 +17,8 @@ namespace storm {
             Variable& operator=(Variable const& otherVariable)= default;
             Variable(Variable&& otherVariable) = default;
             Variable& operator=(Variable&& otherVariable) = default;
-
+            virtual ~Variable() = default;
+            
             /*!
              * Retrieves the name of the variable.
              *
diff --git a/src/storm/utility/solver.h b/src/storm/utility/solver.h
index 2dd77f1d6..e75397535 100644
--- a/src/storm/utility/solver.h
+++ b/src/storm/utility/solver.h
@@ -59,6 +59,8 @@ namespace storm {
             template<typename ValueType>
             class LpSolverFactory {
             public:
+                virtual ~LpSolverFactory() = default;
+
                 /*!
                  * Creates a new linear equation solver instance with the given name.
                  *
@@ -98,6 +100,8 @@ namespace storm {
 
             class SmtSolverFactory {
             public:
+                virtual ~SmtSolverFactory() = default;
+
                 /*!
                  * Creates a new SMT solver instance.
                  *