diff --git a/skfem/assembly/basis/abstract_basis.py b/skfem/assembly/basis/abstract_basis.py
index eb3a4c02..5d5c6cd1 100644
--- a/skfem/assembly/basis/abstract_basis.py
+++ b/skfem/assembly/basis/abstract_basis.py
@@ -394,14 +394,17 @@ class AbstractBasis:
 
     def _normalize_interp(self, interp) -> Tuple[ndarray, ...]:
 
-        if isinstance(interp, ndarray):
-            pass
-        elif callable(interp):
-            interp = interp(self.global_coordinates())
-        elif isinstance(interp, (float, int)):
+        if isinstance(interp, (tuple, list)):
+            interp = tuple(self._normalize_interp(c)[0] for c in interp)
+
+        if callable(interp):
+            interp = self._normalize_interp(interp(self.global_coordinates()))
+
+        if isinstance(interp, (float, int)):
             interp = interp + self.zero_w()
-        elif isinstance(interp, (tuple, list)):
-            interp = tuple(self._normalize_interp(c) for c in interp)
+
+        if isinstance(interp, ndarray):
+            interp = (interp,)
 
         return interp
 
@@ -411,8 +414,7 @@ class AbstractBasis:
         from skfem.helpers import inner
 
         interp = self._normalize_interp(interp)
-        if not isinstance(interp, tuple):
-            interp = (interp,)
+        assert isinstance(interp, tuple)
         assert len(interp) == len(self.basis[0])
 
         return (

diff --git a/tests/test_basis.py b/tests/test_basis.py
index 4ef5ed98..b0a88575 100644
--- a/tests/test_basis.py
+++ b/tests/test_basis.py
@@ -471,6 +471,18 @@ def test_basis_project(m, e, fun):
             lambda x: (x[0] * 0 + 1, x[0] * 0 + 1),
             np.ones(8),
         ),
+        (
+            MeshTri(),
+            ElementTriP1() * ElementTriP1(),
+            lambda x: [x[0] * 0 + 1, x[0] * 0 + 1],
+            np.ones(8),
+        ),
+        (
+            MeshTri(),
+            ElementTriP1() * ElementTriP1(),
+            lambda x: [x[0] * 0 + 1, 1],
+            np.ones(8),
+        ),
     ]
 )
 def test_basis_project_composite(m, e, p1, p2):

Projecting on a Basis with a combination of ElementVector and ElementComposite
```python
from skfem import *
from skfem.helpers import *

mesh = MeshTri()

basis = Basis(mesh, ElementVector(ElementTriP1()) * ElementTriP1())


@LinearForm
def from_form(v_t, v_z, w):  # e_t=[y,-x], e_z = 2
    return w.x[1] * v_t[0] - w.x[0] * v_t[1] + 2 * v_z


@BilinearForm
def to_form(e_t, e_z, v_t, v_z, w):
    return inner(e_t, v_t) + inner(e_z, v_z)


x_0 = solve(to_form.assemble(basis), from_form.assemble(basis))
x_1 = basis.project(lambda x: [np.array((x[1], -x[0])), 2])
```
It seems that basis.project doesn't work if we project on a Basis which has a combination of ElementVector and ElementComposite. Or am I doing definition of the lambda wrong?
tests/test_basis.py::test_basis_project_composite[m3-e3-<lambda>-p23] tests/test_basis.py::test_basis_project_composite[m4-e4-<lambda>-p24]
tests/test_basis.py::TestCompositeSplitting::runTest tests/test_basis.py::TestCompositeFacetAssembly::runTest tests/test_basis.py::TestFacetExpansion::runTest tests/test_basis.py::TestFacetExpansionHexS2::runTest tests/test_basis.py::TestFacetExpansionHex2::runTest tests/test_basis.py::TestInterpolatorTet::runTest tests/test_basis.py::TestInterpolatorTet2::runTest tests/test_basis.py::TestInterpolatorTri::runTest tests/test_basis.py::TestInterpolatorQuad::runTest tests/test_basis.py::TestInterpolatorHex::runTest tests/test_basis.py::TestInterpolatorLine::runTest tests/test_basis.py::TestInterpolatorLine2::runTest tests/test_basis.py::TestIncompatibleMeshElement::runTest tests/test_basis.py::test_interpolator_probes[MeshTri1-e0-0-10] tests/test_basis.py::test_interpolator_probes[MeshTri1-e1-1-10] tests/test_basis.py::test_interpolator_probes[MeshTri1-e2-5-10] tests/test_basis.py::test_interpolator_probes[MeshTri1-e3-1-300000.0] tests/test_basis.py::test_interpolator_probes[MeshTet1-e4-1-10] tests/test_basis.py::test_interpolator_probes[MeshTet1-e5-4-10] tests/test_basis.py::test_interpolator_probes[MeshTet1-e6-1-30000.0] tests/test_basis.py::test_interpolator_probes[MeshQuad1-e7-1-10] tests/test_basis.py::test_interpolator_probes[MeshQuad1-e8-1-300000.0] tests/test_basis.py::test_interpolator_probes[MeshHex1-e9-1-100000.0] tests/test_basis.py::test_interpolator_probes[MeshWedge1-e10-0-10] tests/test_basis.py::test_trace[MeshTri1-e10-e20-False] tests/test_basis.py::test_trace[MeshTri1-e11-e21-False] tests/test_basis.py::test_trace[MeshTri1-e12-e22-False] tests/test_basis.py::test_trace[MeshTri1-e13-e23-False] tests/test_basis.py::test_trace[MeshTri1-e14-e24-True] tests/test_basis.py::test_trace[MeshTri1-e15-e25-True] tests/test_basis.py::test_trace[MeshTri1-e16-e26-True] tests/test_basis.py::test_trace[MeshTri1-e17-e27-True] tests/test_basis.py::test_trace[MeshTri1-e18-None-False] tests/test_basis.py::test_trace[MeshTri1-e19-None-True] tests/test_basis.py::test_trace[MeshQuad1-e110-e210-False] tests/test_basis.py::test_trace[MeshQuad1-e111-e211-False] tests/test_basis.py::test_trace[MeshQuad1-e112-e212-False] tests/test_basis.py::test_trace[MeshQuad1-e113-e213-True] tests/test_basis.py::test_trace[MeshQuad1-e114-e214-True] tests/test_basis.py::test_trace[MeshQuad1-e115-e215-True] tests/test_basis.py::test_trace[MeshTet1-e116-e216-False] tests/test_basis.py::test_trace[MeshTet1-e117-e217-False] tests/test_basis.py::test_trace[MeshHex1-e118-e218-False] tests/test_basis.py::test_trace[MeshHex1-e119-e219-False] tests/test_basis.py::test_trace[MeshHex1-e120-e220-False] tests/test_basis.py::test_point_source[ElementLineP1] tests/test_basis.py::test_point_source[ElementLineP2] tests/test_basis.py::test_point_source[ElementLineMini] tests/test_basis.py::test_pickling tests/test_basis.py::test_mortar_basis[m10-m20-1.0] tests/test_basis.py::test_mortar_basis[m11-m21-1.4142135623730951] tests/test_basis.py::test_basis_project[m0-e0-<lambda>] tests/test_basis.py::test_basis_project[m1-e1-<lambda>] tests/test_basis.py::test_basis_project[m2-e2-<lambda>] tests/test_basis.py::test_basis_project_composite[m0-e0-p10-p20] tests/test_basis.py::test_basis_project_composite[m1-e1-p11-p21] tests/test_basis.py::test_basis_project_composite[m2-e2-<lambda>-p22] tests/test_basis.py::test_basis_project_grad tests/test_basis.py::test_basis_interpolate_project[m0-e0] tests/test_basis.py::test_basis_interpolate_project[m1-e1] tests/test_basis.py::test_basis_interpolate_project[m2-e2] tests/test_basis.py::test_basis_interpolate_project[m3-e3] tests/test_basis.py::test_subdomain_facet_assembly tests/test_basis.py::test_subdomain_facet_assembly_2 tests/test_basis.py::test_oriented_interface_integral[m0-e0-interfacee-<lambda>] tests/test_basis.py::test_oriented_interface_integral[m1-e1-interface-<lambda>] tests/test_basis.py::test_oriented_gauss_integral[m0-e0] tests/test_basis.py::test_oriented_gauss_integral[m1-e1] tests/test_basis.py::test_oriented_gauss_integral[m2-e2] tests/test_basis.py::test_oriented_saveload[m0] tests/test_basis.py::test_oriented_saveload[m1] tests/test_basis.py::test_oriented_saveload[m2] tests/test_basis.py::test_oriented_saveload[m3] tests/test_basis.py::test_oriented_saveload[m4]