diff --git a/linopy/objective.py b/linopy/objective.py
index cbfdd84a..426a6879 100644
--- a/linopy/objective.py
+++ b/linopy/objective.py
@@ -99,9 +99,6 @@ def expression(self, expr):
         if isinstance(expr, (list, tuple)):
             expr = self.model.linexpr(*expr)
 
-        if isinstance(expr, Objective):
-            expr = expr.expression
-
         if not isinstance(
             expr, (expressions.LinearExpression, expressions.QuadraticExpression)
         ):
diff --git a/test/test_objective.py b/test/test_objective.py
index 7cded4eb..f3ec9524 100644
--- a/test/test_objective.py
+++ b/test/test_objective.py
@@ -111,12 +111,24 @@ def test_add(linear_objective, quadratic_objective):
     assert isinstance(obj.expression, QuadraticExpression)
 
 
+def test_add_expr(linear_objective, quadratic_objective):
+    obj = linear_objective + quadratic_objective.expression
+    assert isinstance(obj, Objective)
+    assert isinstance(obj.expression, QuadraticExpression)
+
+
 def test_sub(linear_objective, quadratic_objective):
     obj = quadratic_objective - linear_objective
     assert isinstance(obj, Objective)
     assert isinstance(obj.expression, QuadraticExpression)
 
 
+def test_sub_epxr(linear_objective, quadratic_objective):
+    obj = quadratic_objective - linear_objective.expression
+    assert isinstance(obj, Objective)
+    assert isinstance(obj.expression, QuadraticExpression)
+
+
 def test_mul(quadratic_objective):
     obj = quadratic_objective * 2
     assert isinstance(obj, Objective)
@@ -135,9 +147,21 @@ def test_truediv(quadratic_objective):
     assert isinstance(obj.expression, QuadraticExpression)
 
 
+def test_truediv_false(quadratic_objective):
+    with pytest.raises(ValueError):
+        quadratic_objective / quadratic_objective
+
+
 def test_repr(linear_objective, quadratic_objective):
     assert isinstance(linear_objective.__repr__(), str)
     assert isinstance(quadratic_objective.__repr__(), str)
 
     assert "Linear" in linear_objective.__repr__()
     assert "Quadratic" in quadratic_objective.__repr__()
+
+
+def test_objective_constant():
+    m = Model()
+    linear_expr = LinearExpression(None, m) + 1
+    with pytest.raises(ValueError):
+        m.objective = Objective(linear_expr, m)
diff --git a/test/test_optimization.py b/test/test_optimization.py
index 72c3d06f..4322c5d7 100644
--- a/test/test_optimization.py
+++ b/test/test_optimization.py
@@ -294,6 +294,9 @@ def test_default_setting(model, solver, io_api):
     assert status == "ok"
     assert np.isclose(model.objective.value, 3.3)
 
+    with pytest.warns(DeprecationWarning):
+        assert np.isclose(model.objective_value, 3.3)
+
 
 @pytest.mark.parametrize("solver,io_api", params)
 def test_default_setting_sol_and_dual_accessor(model, solver, io_api):