diff --git a/petabtests/cases/v2.0.0/sbml/0026/0026.py b/petabtests/cases/v2.0.0/sbml/0026/0026.py
new file mode 100644
index 0000000..29ff50f
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0026/0026.py
@@ -0,0 +1,87 @@
+from inspect import cleandoc
+
+from petab.v2.C import *
+from petab.v2 import Problem
+
+from petabtests import (
+ PetabV2TestCase,
+ analytical_a,
+ analytical_b,
+ antimony_to_sbml_str,
+)
+from pathlib import Path
+
+DESCRIPTION = cleandoc("""
+## Objective
+
+This case tests the handling of initial concentrations that are specified
+via mathematical expressions (rather than a single value or parameter) in
+the conditions table. For species `A`, the initial concentration is given
+by an expression containing both parameters to be estimated and parameters
+that are not estimated. For species `B`, the initial concentration is
+specified via an expression involving only parameters that are not
+estimated.
+
+## Model
+
+A simple conversion reaction `A <=> B` in a single compartment, following
+mass action kinetics.
+""")
+
+# problem --------------------------------------------------------------------
+ant_model = """
+model *petab_test_0026()
+ compartment compartment_ = 1;
+ species A in compartment_, B in compartment_;
+
+ fwd: A => B; compartment_ * k1 * A;
+ rev: B => A; compartment_ * k2 * B;
+
+ A = a0;
+ B = 1;
+ a0 = 1;
+ k1 = 0;
+ k2 = 0;
+end
+"""
+model_file = Path(__file__).parent / "_model.xml"
+model_file.write_text(antimony_to_sbml_str(ant_model))
+
+problem = Problem()
+
+problem.add_condition("c0", A="initial_A1 + initial_A2", B="initial_B1 / initial_B2")
+problem.add_experiment("e1", 0, "c0")
+
+problem.add_observable("obs_a", "A", noise_formula="0.5")
+problem.add_observable("obs_b", "B", noise_formula="0.5")
+problem.add_measurement("obs_a", experiment_id="e1", time=0, measurement=0.7)
+problem.add_measurement("obs_a", experiment_id="e1", time=10, measurement=0.1)
+problem.add_measurement("obs_b", experiment_id="e1", time=0, measurement=0.7)
+problem.add_measurement("obs_b", experiment_id="e1", time=10, measurement=0.1)
+
+problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True)
+problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True)
+problem.add_parameter("initial_A1", lb=1, ub=10, nominal_value=0.5, estimate=True)
+problem.add_parameter("initial_A2", lb=1, ub=10, nominal_value=1.5, estimate=False)
+problem.add_parameter("initial_B1", lb=0, ub=10, nominal_value=9, estimate=False)
+problem.add_parameter("initial_B2", lb=0, ub=10, nominal_value=3, estimate=False)
+
+
+# solutions ------------------------------------------------------------------
+
+simulation_df = problem.measurement_df.copy(deep=True).rename(
+ columns={MEASUREMENT: SIMULATION}
+)
+simulation_df[SIMULATION] = [
+ *(analytical_a(t, 2, 3, 0.8, 0.6) for t in (0, 10)),
+ *(analytical_b(t, 2, 3, 0.8, 0.6) for t in (0, 10)),
+]
+
+case = PetabV2TestCase.from_problem(
+ id=26,
+ brief="Simulation. Estimated initial value via math expressions in conditions table.",
+ description=DESCRIPTION,
+ model=model_file,
+ problem=problem,
+ simulation_df=simulation_df,
+)
diff --git a/petabtests/cases/v2.0.0/sbml/0026/README.md b/petabtests/cases/v2.0.0/sbml/0026/README.md
new file mode 100644
index 0000000..9b14c1f
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0026/README.md
@@ -0,0 +1,16 @@
+# PEtab test case 0026
+
+## Objective
+
+This case tests the handling of initial concentrations that are specified
+via mathematical expressions (rather than a single value or parameter) in
+the conditions table. For species `A`, the initial concentration is given
+by an expression containing both parameters to be estimated and parameters
+that are not estimated. For species `B`, the initial concentration is
+specified via an expression involving only parameters that are not
+estimated.
+
+## Model
+
+A simple conversion reaction `A <=> B` in a single compartment, following
+mass action kinetics.
diff --git a/petabtests/cases/v2.0.0/sbml/0026/_0026.yaml b/petabtests/cases/v2.0.0/sbml/0026/_0026.yaml
new file mode 100644
index 0000000..2a7c4ad
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0026/_0026.yaml
@@ -0,0 +1,15 @@
+condition_files:
+- _conditions.tsv
+experiment_files:
+- _experiments.tsv
+format_version: 2.0.0
+measurement_files:
+- _measurements.tsv
+model_files:
+ model_0:
+ language: sbml
+ location: _model.xml
+observable_files:
+- _observables.tsv
+parameter_files:
+- _parameters.tsv
diff --git a/petabtests/cases/v2.0.0/sbml/0026/_0026_solution.yaml b/petabtests/cases/v2.0.0/sbml/0026/_0026_solution.yaml
new file mode 100644
index 0000000..6bc1f12
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0026/_0026_solution.yaml
@@ -0,0 +1,7 @@
+chi2: 75.02040884206437
+llh: -38.41336983161109
+simulation_files:
+- _simulations.tsv
+tol_chi2: 0.001
+tol_llh: 0.001
+tol_simulations: 0.001
diff --git a/petabtests/cases/v2.0.0/sbml/0026/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0026/_conditions.tsv
new file mode 100644
index 0000000..bc499e5
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0026/_conditions.tsv
@@ -0,0 +1,3 @@
+conditionId targetId targetValue
+c0 A initial_A1 + initial_A2
+c0 B initial_B1/initial_B2
diff --git a/petabtests/cases/v2.0.0/sbml/0026/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0026/_experiments.tsv
new file mode 100644
index 0000000..5d8c1e0
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0026/_experiments.tsv
@@ -0,0 +1,2 @@
+experimentId time conditionId
+e1 0.0 c0
diff --git a/petabtests/cases/v2.0.0/sbml/0026/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0026/_measurements.tsv
new file mode 100644
index 0000000..d9f5e7b
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0026/_measurements.tsv
@@ -0,0 +1,5 @@
+modelId observableId experimentId time measurement observableParameters noiseParameters
+ obs_a e1 0.0 0.7
+ obs_a e1 10.0 0.1
+ obs_b e1 0.0 0.7
+ obs_b e1 10.0 0.1
diff --git a/petabtests/cases/v2.0.0/sbml/0026/_model.xml b/petabtests/cases/v2.0.0/sbml/0026/_model.xml
new file mode 100644
index 0000000..4a0dbcc
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0026/_model.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/petabtests/cases/v2.0.0/sbml/0026/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0026/_observables.tsv
new file mode 100644
index 0000000..1234233
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0026/_observables.tsv
@@ -0,0 +1,3 @@
+observableId observableName observableFormula noiseFormula noiseDistribution observablePlaceholders noisePlaceholders
+obs_a A 0.500000000000000 normal
+obs_b B 0.500000000000000 normal
diff --git a/petabtests/cases/v2.0.0/sbml/0026/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0026/_parameters.tsv
new file mode 100644
index 0000000..d210cf0
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0026/_parameters.tsv
@@ -0,0 +1,7 @@
+parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters
+k1 0.0 10.0 0.8 true
+k2 0.0 10.0 0.6 true
+initial_A1 1.0 10.0 0.5 true
+initial_A2 1.0 10.0 1.5 false
+initial_B1 0.0 10.0 9.0 false
+initial_B2 0.0 10.0 3.0 false
diff --git a/petabtests/cases/v2.0.0/sbml/0026/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0026/_simulations.tsv
new file mode 100644
index 0000000..642a386
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0026/_simulations.tsv
@@ -0,0 +1,5 @@
+modelId observableId experimentId time simulation observableParameters noiseParameters
+ obs_a e1 0.0 2.0
+ obs_a e1 10.0 2.1428570240673257
+ obs_b e1 0.0 3.0
+ obs_b e1 10.0 2.8571429759326743
diff --git a/petabtests/cases/v2.0.0/sbml/0027/0027.py b/petabtests/cases/v2.0.0/sbml/0027/0027.py
new file mode 100644
index 0000000..83a5934
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0027/0027.py
@@ -0,0 +1,86 @@
+from inspect import cleandoc
+from pathlib import Path
+
+from petab.v2.C import *
+from petab.v2 import Problem
+from petabtests import PetabV2TestCase, analytical_a, antimony_to_sbml_str
+
+DESCRIPTION = cleandoc("""
+## Objective
+
+This case tests support for parametric overrides from condition table
+via math expressions.
+
+The model is simulated for two different experimental conditions
+(here: different initial concentrations). The observable is offset via
+a parametric override in the condition table (i.e. the actual value
+has to be taken from the parameter table). The formulas in the
+condition table are mathematical expressions consisting of
+numerical values, parameters to be estimated, and parameters that
+are not to be estimated.
+
+## Model
+
+A simple conversion reaction `A <=> B` in a single compartment, following
+mass action kinetics.
+""")
+
+# problem --------------------------------------------------------------------
+ant_model = """
+model *petab_test_0027()
+ compartment compartment_ = 1;
+ species A in compartment_, B in compartment_;
+
+ fwd: A => B; compartment_ * k1 * A;
+ rev: B => A; compartment_ * k2 * B;
+
+ A = a0;
+ B = b0;
+ offset_A = 0;
+ a0 = 1;
+ b0 = 0;
+ k1 = 0;
+ k2 = 0;
+end
+"""
+model_file = Path(__file__).parent / "_model.xml"
+model_file.write_text(antimony_to_sbml_str(ant_model))
+
+problem = Problem()
+problem.add_condition("c0", offset_A="offset_A1_c0 + offset_A2_c0")
+problem.add_condition("c1", offset_A="offset_A1_c1 / 3.0")
+
+problem.add_experiment("e1", 0, "c0")
+problem.add_experiment("e2", 0, "c1")
+
+problem.add_observable("obs_a", "A + offset_A", noise_formula="1")
+
+problem.add_measurement("obs_a", experiment_id="e1", time=10, measurement=2.1)
+problem.add_measurement("obs_a", experiment_id="e2", time=10, measurement=3.2)
+
+problem.add_parameter("a0", lb=0, ub=10, nominal_value=1, estimate=True)
+problem.add_parameter("b0", lb=0, ub=10, nominal_value=0, estimate=True)
+problem.add_parameter("k1", lb=0, ub=10, nominal_value=0.8, estimate=True)
+problem.add_parameter("k2", lb=0, ub=10, nominal_value=0.6, estimate=True)
+problem.add_parameter("offset_A1_c0", lb=0, ub=10, nominal_value=0.5, estimate=True)
+problem.add_parameter("offset_A2_c0", lb=0, ub=10, nominal_value=1.5, estimate=False)
+problem.add_parameter("offset_A1_c1", lb=0, ub=10, nominal_value=9, estimate=True)
+
+# solutions ------------------------------------------------------------------
+
+simulation_df = problem.measurement_df.copy(deep=True).rename(
+ columns={MEASUREMENT: SIMULATION}
+)
+simulation_df[SIMULATION] = [
+ analytical_a(10, 1, 0, 0.8, 0.6) + offset for offset in [2, 3]
+]
+
+case = PetabV2TestCase.from_problem(
+ id=27,
+ brief="Simulation. Condition-specific parameters defined via "
+ "math expressions in the parameter table.",
+ description=DESCRIPTION,
+ model=model_file,
+ problem=problem,
+ simulation_df=simulation_df,
+)
diff --git a/petabtests/cases/v2.0.0/sbml/0027/README.md b/petabtests/cases/v2.0.0/sbml/0027/README.md
new file mode 100644
index 0000000..7cc3041
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0027/README.md
@@ -0,0 +1,19 @@
+# PEtab test case 0027
+
+## Objective
+
+This case tests support for parametric overrides from condition table
+via math expressions.
+
+The model is simulated for two different experimental conditions
+(here: different initial concentrations). The observable is offset via
+a parametric override in the condition table (i.e. the actual value
+has to be taken from the parameter table). The formulas in the
+condition table are mathematical expressions consisting of
+numerical values, parameters to be estimated, and parameters that
+are not to be estimated.
+
+## Model
+
+A simple conversion reaction `A <=> B` in a single compartment, following
+mass action kinetics.
diff --git a/petabtests/cases/v2.0.0/sbml/0027/_0027.yaml b/petabtests/cases/v2.0.0/sbml/0027/_0027.yaml
new file mode 100644
index 0000000..2a7c4ad
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0027/_0027.yaml
@@ -0,0 +1,15 @@
+condition_files:
+- _conditions.tsv
+experiment_files:
+- _experiments.tsv
+format_version: 2.0.0
+measurement_files:
+- _measurements.tsv
+model_files:
+ model_0:
+ language: sbml
+ location: _model.xml
+observable_files:
+- _observables.tsv
+parameter_files:
+- _parameters.tsv
diff --git a/petabtests/cases/v2.0.0/sbml/0027/_0027_solution.yaml b/petabtests/cases/v2.0.0/sbml/0027/_0027_solution.yaml
new file mode 100644
index 0000000..5f6c46b
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0027/_0027_solution.yaml
@@ -0,0 +1,7 @@
+chi2: 0.16020461109629
+llh: -1.91797937195749
+simulation_files:
+- _simulations.tsv
+tol_chi2: 0.001
+tol_llh: 0.001
+tol_simulations: 0.001
diff --git a/petabtests/cases/v2.0.0/sbml/0027/_conditions.tsv b/petabtests/cases/v2.0.0/sbml/0027/_conditions.tsv
new file mode 100644
index 0000000..0bd0965
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0027/_conditions.tsv
@@ -0,0 +1,3 @@
+conditionId targetId targetValue
+c0 offset_A offset_A1_c0 + offset_A2_c0
+c1 offset_A 0.333333333333333*offset_A1_c1
diff --git a/petabtests/cases/v2.0.0/sbml/0027/_experiments.tsv b/petabtests/cases/v2.0.0/sbml/0027/_experiments.tsv
new file mode 100644
index 0000000..7c2a6e8
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0027/_experiments.tsv
@@ -0,0 +1,3 @@
+experimentId time conditionId
+e1 0.0 c0
+e2 0.0 c1
diff --git a/petabtests/cases/v2.0.0/sbml/0027/_measurements.tsv b/petabtests/cases/v2.0.0/sbml/0027/_measurements.tsv
new file mode 100644
index 0000000..679f1c2
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0027/_measurements.tsv
@@ -0,0 +1,3 @@
+modelId observableId experimentId time measurement observableParameters noiseParameters
+ obs_a e1 10.0 2.1
+ obs_a e2 10.0 3.2
diff --git a/petabtests/cases/v2.0.0/sbml/0027/_model.xml b/petabtests/cases/v2.0.0/sbml/0027/_model.xml
new file mode 100644
index 0000000..9661881
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0027/_model.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/petabtests/cases/v2.0.0/sbml/0027/_observables.tsv b/petabtests/cases/v2.0.0/sbml/0027/_observables.tsv
new file mode 100644
index 0000000..e8b2bea
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0027/_observables.tsv
@@ -0,0 +1,2 @@
+observableId observableName observableFormula noiseFormula noiseDistribution observablePlaceholders noisePlaceholders
+obs_a A + offset_A 1.00000000000000 normal
diff --git a/petabtests/cases/v2.0.0/sbml/0027/_parameters.tsv b/petabtests/cases/v2.0.0/sbml/0027/_parameters.tsv
new file mode 100644
index 0000000..f8920c5
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0027/_parameters.tsv
@@ -0,0 +1,8 @@
+parameterId lowerBound upperBound nominalValue estimate priorDistribution priorParameters
+a0 0.0 10.0 1.0 true
+b0 0.0 10.0 0.0 true
+k1 0.0 10.0 0.8 true
+k2 0.0 10.0 0.6 true
+offset_A1_c0 0.0 10.0 0.5 true
+offset_A2_c0 0.0 10.0 1.5 false
+offset_A1_c1 0.0 10.0 9.0 true
diff --git a/petabtests/cases/v2.0.0/sbml/0027/_simulations.tsv b/petabtests/cases/v2.0.0/sbml/0027/_simulations.tsv
new file mode 100644
index 0000000..b1fd1b6
--- /dev/null
+++ b/petabtests/cases/v2.0.0/sbml/0027/_simulations.tsv
@@ -0,0 +1,3 @@
+modelId observableId experimentId time simulation observableParameters noiseParameters
+ obs_a e1 10.0 2.4285719037306968
+ obs_a e2 10.0 3.4285719037306968
diff --git a/petabtests/cases/v2.0.0/sbml/README.md b/petabtests/cases/v2.0.0/sbml/README.md
index c76bb72..6c0ab27 100644
--- a/petabtests/cases/v2.0.0/sbml/README.md
+++ b/petabtests/cases/v2.0.0/sbml/README.md
@@ -94,3 +94,11 @@ Truncated prior distributions.
Non-truncated prior distributions.
+# [0026](0026/)
+
+Simulation. Estimated initial value via math expressions in conditions table.
+
+# [0027](0027/)
+
+Simulation. Condition-specific parameters defined via math expressions in the parameter table.
+