diff --git a/src/vim9expr.c b/src/vim9expr.c
index 76edddb..83c68a9 100644
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -240,7 +240,7 @@
 	cctx_T *cctx,
 	char_u *name,	    // variable NUL terminated
 	char_u *start,	    // start of variable
-	char_u **end,	    // end of variable
+	char_u **end,	    // end of variable, may be NULL
 	int    error)	    // when TRUE may give error
 {
     scriptitem_T    *si;
@@ -266,65 +266,56 @@
 	return OK;
     }
 
-    import = find_imported(name, 0, cctx);
+    import = end == NULL ? NULL : find_imported(name, 0, cctx);
     if (import != NULL)
     {
-	if (import->imp_flags & IMP_FLAGS_STAR)
+	char_u	*p = skipwhite(*end);
+	char_u	*exp_name;
+	int	cc;
+	ufunc_T	*ufunc;
+	type_T	*type;
+
+	// Need to lookup the member.
+	if (*p != '.')
 	{
-	    char_u	*p = skipwhite(*end);
-	    char_u	*exp_name;
-	    int		cc;
-	    ufunc_T	*ufunc;
-	    type_T	*type;
-
-	    // Used "import * as Name", need to lookup the member.
-	    if (*p != '.')
-	    {
-		semsg(_(e_expected_dot_after_name_str), start);
-		return FAIL;
-	    }
-	    ++p;
-	    if (VIM_ISWHITE(*p))
-	    {
-		emsg(_(e_no_white_space_allowed_after_dot));
-		return FAIL;
-	    }
-
-	    // isolate one name
-	    exp_name = p;
-	    while (eval_isnamec(*p))
-		++p;
-	    cc = *p;
-	    *p = NUL;
-
-	    idx = find_exported(import->imp_sid, exp_name, &ufunc, &type,
-								   cctx, TRUE);
-	    *p = cc;
-	    p = skipwhite(p);
-	    *end = p;
-
-	    if (idx < 0)
-	    {
-		if (*p == '(' && ufunc != NULL)
-		{
-		    generate_PUSHFUNC(cctx, ufunc->uf_name, import->imp_type);
-		    return OK;
-		}
-		return FAIL;
-	    }
-
-	    generate_VIM9SCRIPT(cctx, ISN_LOADSCRIPT,
-		    import->imp_sid,
-		    idx,
-		    type);
+	    semsg(_(e_expected_dot_after_name_str), start);
+	    return FAIL;
 	}
-	else if (import->imp_funcname != NULL)
-	    generate_PUSHFUNC(cctx, import->imp_funcname, import->imp_type);
-	else
-	    generate_VIM9SCRIPT(cctx, ISN_LOADSCRIPT,
-		    import->imp_sid,
-		    import->imp_var_vals_idx,
-		    import->imp_type);
+	++p;
+	if (VIM_ISWHITE(*p))
+	{
+	    emsg(_(e_no_white_space_allowed_after_dot));
+	    return FAIL;
+	}
+
+	// isolate one name
+	exp_name = p;
+	while (eval_isnamec(*p))
+	    ++p;
+	cc = *p;
+	*p = NUL;
+
+	idx = find_exported(import->imp_sid, exp_name, &ufunc, &type,
+								   cctx, TRUE);
+	*p = cc;
+	p = skipwhite(p);
+	*end = p;
+
+	if (idx < 0)
+	{
+	    if (ufunc != NULL)
+	    {
+		// function call or function reference
+		generate_PUSHFUNC(cctx, ufunc->uf_name, NULL);
+		return OK;
+	    }
+	    return FAIL;
+	}
+
+	generate_VIM9SCRIPT(cctx, ISN_LOADSCRIPT,
+		import->imp_sid,
+		idx,
+		type);
 	return OK;
     }
 
