diff --git a/src/eval.c b/src/eval.c
index 72f9324..a9d0c7d 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -692,7 +692,7 @@
 
 	if (current_sctx.sc_version == SCRIPT_VERSION_VIM9 && *p == ':')
 	{
-	    scriptitem_T *si = &SCRIPT_ITEM(current_sctx.sc_sid);
+	    scriptitem_T *si = SCRIPT_ITEM(current_sctx.sc_sid);
 	    char_u	 *tp = skipwhite(p + 1);
 
 	    // parse the type after the name
diff --git a/src/evalvars.c b/src/evalvars.c
index ebb30dd..866682b 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -2289,7 +2289,7 @@
 	// imported variable from another script
 	if (import != NULL)
 	{
-	    scriptitem_T    *si = &SCRIPT_ITEM(import->imp_sid);
+	    scriptitem_T    *si = SCRIPT_ITEM(import->imp_sid);
 	    svar_T	    *sv = ((svar_T *)si->sn_var_vals.ga_data)
 						    + import->imp_var_vals_idx;
 	    tv = sv->sv_tv;
@@ -2571,7 +2571,7 @@
     if (sv == NULL)
 	return;
     init_var_dict(&sv->sv_dict, &sv->sv_var, VAR_SCOPE);
-    SCRIPT_ITEM(id).sn_vars = sv;
+    SCRIPT_ITEM(id)->sn_vars = sv;
 }
 
 /*
@@ -2876,7 +2876,7 @@
 
 	if (is_script_local && current_sctx.sc_version == SCRIPT_VERSION_VIM9)
 	{
-	    scriptitem_T *si = &SCRIPT_ITEM(current_sctx.sc_sid);
+	    scriptitem_T *si = SCRIPT_ITEM(current_sctx.sc_sid);
 
 	    // Store a pointer to the typval_T, so that it can be found by
 	    // index instead of using a hastab lookup.
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 0e6b8dc..c0ed1c8 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -2496,7 +2496,7 @@
 #ifdef FEAT_EVAL
     // Set flag that any command was executed, used by ex_vim9script().
     if (getline_equal(ea.getline, ea.cookie, getsourceline))
-	SCRIPT_ITEM(current_sctx.sc_sid).sn_had_command = TRUE;
+	SCRIPT_ITEM(current_sctx.sc_sid)->sn_had_command = TRUE;
 
     /*
      * If the command just executed called do_cmdline(), any throw or ":return"
diff --git a/src/globals.h b/src/globals.h
index 6a73bc1..b40eb2a 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -285,9 +285,9 @@
 # ifdef FEAT_PROFILE
 EXTERN int	do_profiling INIT(= PROF_NONE);	// PROF_ values
 # endif
-EXTERN garray_T script_items INIT5(0, 0, sizeof(scriptitem_T), 4, NULL);
-# define SCRIPT_ITEM(id)    (((scriptitem_T *)script_items.ga_data)[(id) - 1])
-# define SCRIPT_SV(id)	    (SCRIPT_ITEM(id).sn_vars)
+EXTERN garray_T script_items INIT5(0, 0, sizeof(scriptitem_T *), 20, NULL);
+# define SCRIPT_ITEM(id)    (((scriptitem_T **)script_items.ga_data)[(id) - 1])
+# define SCRIPT_SV(id)	    (SCRIPT_ITEM(id)->sn_vars)
 # define SCRIPT_VARS(id)    (SCRIPT_SV(id)->sv_dict.dv_hashtab)
 
 # define FUNCLINE(fp, j)	((char_u **)(fp->uf_lines.ga_data))[j]
diff --git a/src/profiler.c b/src/profiler.c
index cd962ca..647934d 100644
--- a/src/profiler.c
+++ b/src/profiler.c
@@ -440,7 +440,7 @@
 prof_def_func(void)
 {
     if (current_sctx.sc_sid > 0)
-	return SCRIPT_ITEM(current_sctx.sc_sid).sn_pr_force;
+	return SCRIPT_ITEM(current_sctx.sc_sid)->sn_pr_force;
     return FALSE;
 }
 
@@ -763,7 +763,7 @@
 
     if (current_sctx.sc_sid > 0 && current_sctx.sc_sid <= script_items.ga_len)
     {
-	si = &SCRIPT_ITEM(current_sctx.sc_sid);
+	si = SCRIPT_ITEM(current_sctx.sc_sid);
 	if (si->sn_prof_on && si->sn_pr_nest++ == 0)
 	    profile_start(&si->sn_pr_child);
     }
@@ -780,7 +780,7 @@
 
     if (current_sctx.sc_sid > 0 && current_sctx.sc_sid <= script_items.ga_len)
     {
-	si = &SCRIPT_ITEM(current_sctx.sc_sid);
+	si = SCRIPT_ITEM(current_sctx.sc_sid);
 	if (si->sn_prof_on && --si->sn_pr_nest == 0)
 	{
 	    profile_end(&si->sn_pr_child);
@@ -805,7 +805,7 @@
 
     for (id = 1; id <= script_items.ga_len; ++id)
     {
-	si = &SCRIPT_ITEM(id);
+	si = SCRIPT_ITEM(id);
 	if (si->sn_prof_on)
 	{
 	    fprintf(fd, "SCRIPT  %s\n", si->sn_name);
@@ -905,7 +905,7 @@
 
     if (current_sctx.sc_sid <= 0 || current_sctx.sc_sid > script_items.ga_len)
 	return;
-    si = &SCRIPT_ITEM(current_sctx.sc_sid);
+    si = SCRIPT_ITEM(current_sctx.sc_sid);
     if (si->sn_prof_on && SOURCING_LNUM >= 1)
     {
 	// Grow the array before starting the timer, so that the time spent
@@ -940,7 +940,7 @@
 
     if (current_sctx.sc_sid <= 0 || current_sctx.sc_sid > script_items.ga_len)
 	return;
-    si = &SCRIPT_ITEM(current_sctx.sc_sid);
+    si = SCRIPT_ITEM(current_sctx.sc_sid);
     if (si->sn_prof_on && si->sn_prl_idx >= 0)
 	si->sn_prl_execed = TRUE;
 }
@@ -956,7 +956,7 @@
 
     if (current_sctx.sc_sid <= 0 || current_sctx.sc_sid > script_items.ga_len)
 	return;
-    si = &SCRIPT_ITEM(current_sctx.sc_sid);
+    si = SCRIPT_ITEM(current_sctx.sc_sid);
     if (si->sn_prof_on && si->sn_prl_idx >= 0
 				     && si->sn_prl_idx < si->sn_prl_ga.ga_len)
     {
diff --git a/src/scriptfile.c b/src/scriptfile.c
index 376e0c3..09548d8 100644
--- a/src/scriptfile.c
+++ b/src/scriptfile.c
@@ -1124,7 +1124,7 @@
 	//   inode number, even though to the user it is the same script.
 	// - If a script is deleted and another script is written, with a
 	//   different name, the inode may be re-used.
-	si = &SCRIPT_ITEM(sid);
+	si = SCRIPT_ITEM(sid);
 	if (si->sn_name != NULL && fnamecmp(si->sn_name, fname_exp) == 0)
 		// Found it!
 		break;
@@ -1294,8 +1294,11 @@
 	    goto almosttheend;
 	while (script_items.ga_len < current_sctx.sc_sid)
 	{
+	    si = ALLOC_CLEAR_ONE(scriptitem_T);
+	    if (si == NULL)
+		goto almosttheend;
 	    ++script_items.ga_len;
-	    si = &SCRIPT_ITEM(script_items.ga_len);
+	    SCRIPT_ITEM(script_items.ga_len) = si;
 	    si->sn_name = NULL;
 	    si->sn_version = 1;
 
@@ -1308,7 +1311,7 @@
 	    si->sn_prof_on = FALSE;
 # endif
 	}
-	si = &SCRIPT_ITEM(current_sctx.sc_sid);
+	si = SCRIPT_ITEM(current_sctx.sc_sid);
 	si->sn_name = fname_exp;
 	fname_exp = vim_strsave(si->sn_name);  // used for autocmd
 	if (ret_sid != NULL)
@@ -1364,7 +1367,7 @@
     if (do_profiling == PROF_YES)
     {
 	// Get "si" again, "script_items" may have been reallocated.
-	si = &SCRIPT_ITEM(current_sctx.sc_sid);
+	si = SCRIPT_ITEM(current_sctx.sc_sid);
 	if (si->sn_prof_on)
 	{
 	    profile_end(&si->sn_pr_start);
@@ -1411,7 +1414,7 @@
 #ifdef FEAT_EVAL
 almosttheend:
     // Get "si" again, "script_items" may have been reallocated.
-    si = &SCRIPT_ITEM(current_sctx.sc_sid);
+    si = SCRIPT_ITEM(current_sctx.sc_sid);
     if (si->sn_save_cpo != NULL)
     {
 	free_string_option(p_cpo);
@@ -1456,16 +1459,16 @@
 	    emsg(_(e_invarg));
 	else
 	{
-	    eap->arg = SCRIPT_ITEM(eap->line2).sn_name;
+	    eap->arg = SCRIPT_ITEM(eap->line2)->sn_name;
 	    do_exedit(eap, NULL);
 	}
 	return;
     }
 
     for (i = 1; i <= script_items.ga_len && !got_int; ++i)
-	if (SCRIPT_ITEM(i).sn_name != NULL)
+	if (SCRIPT_ITEM(i)->sn_name != NULL)
 	{
-	    home_replace(NULL, SCRIPT_ITEM(i).sn_name,
+	    home_replace(NULL, SCRIPT_ITEM(i)->sn_name,
 						    NameBuff, MAXPATHL, TRUE);
 	    smsg("%3d: %s", i, NameBuff);
 	}
@@ -1481,8 +1484,8 @@
     int i;
 
     for (i = 1; i <= script_items.ga_len; ++i)
-	if (SCRIPT_ITEM(i).sn_name != NULL)
-	    slash_adjust(SCRIPT_ITEM(i).sn_name);
+	if (SCRIPT_ITEM(i)->sn_name != NULL)
+	    slash_adjust(SCRIPT_ITEM(i)->sn_name);
 }
 # endif
 
@@ -1502,7 +1505,7 @@
 	return (char_u *)_("environment variable");
     if (id == SID_ERROR)
 	return (char_u *)_("error handler");
-    return SCRIPT_ITEM(id).sn_name;
+    return SCRIPT_ITEM(id)->sn_name;
 }
 
 # if defined(EXITFREE) || defined(PROTO)
@@ -1513,14 +1516,17 @@
 
     for (i = script_items.ga_len; i > 0; --i)
     {
-	// the variables themselves are cleared in evalvars_clear()
-	vim_free(SCRIPT_ITEM(i).sn_vars);
+	scriptitem_T *si = SCRIPT_ITEM(i);
 
-	vim_free(SCRIPT_ITEM(i).sn_name);
-	free_string_option(SCRIPT_ITEM(i).sn_save_cpo);
+	// the variables themselves are cleared in evalvars_clear()
+	vim_free(si->sn_vars);
+
+	vim_free(si->sn_name);
+	free_string_option(si->sn_save_cpo);
 #  ifdef FEAT_PROFILE
-	ga_clear(&SCRIPT_ITEM(i).sn_prl_ga);
+	ga_clear(&si->sn_prl_ga);
 #  endif
+	vim_free(si);
     }
     ga_clear(&script_items);
 }
@@ -1832,7 +1838,7 @@
     else
     {
 	current_sctx.sc_version = nr;
-	SCRIPT_ITEM(current_sctx.sc_sid).sn_version = nr;
+	SCRIPT_ITEM(current_sctx.sc_sid)->sn_version = nr;
     }
 #endif
 }
diff --git a/src/version.c b/src/version.c
index c7ecb0e..19a5c0d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -743,6 +743,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    154,
+/**/
     153,
 /**/
     152,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 9f273c5..6690622 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -1401,7 +1401,7 @@
 {
     hashtab_T	    *ht;
     dictitem_T	    *di;
-    scriptitem_T    *si = &SCRIPT_ITEM(sid);
+    scriptitem_T    *si = SCRIPT_ITEM(sid);
     int		    idx;
 
     // First look the name up in the hashtable.
@@ -1433,7 +1433,7 @@
     imported_T *
 find_imported(char_u *name, cctx_T *cctx)
 {
-    scriptitem_T    *si = &SCRIPT_ITEM(current_sctx.sc_sid);
+    scriptitem_T    *si = SCRIPT_ITEM(current_sctx.sc_sid);
     int		    idx;
 
     if (cctx != NULL)
@@ -1462,7 +1462,7 @@
     static int
 compile_load_scriptvar(cctx_T *cctx, char_u *name)
 {
-    scriptitem_T    *si = &SCRIPT_ITEM(current_sctx.sc_sid);
+    scriptitem_T    *si = SCRIPT_ITEM(current_sctx.sc_sid);
     int		    idx = get_script_item_idx(current_sctx.sc_sid, name, FALSE);
     imported_T	    *import;
 
diff --git a/src/vim9execute.c b/src/vim9execute.c
index 10da178..a738aa1 100644
--- a/src/vim9execute.c
+++ b/src/vim9execute.c
@@ -492,7 +492,7 @@
 	    case ISN_LOADSCRIPT:
 		{
 		    scriptitem_T *si =
-				 &SCRIPT_ITEM(iptr->isn_arg.script.script_sid);
+				  SCRIPT_ITEM(iptr->isn_arg.script.script_sid);
 		    svar_T	 *sv;
 
 		    sv = ((svar_T *)si->sn_var_vals.ga_data)
@@ -598,7 +598,7 @@
 	    // store script-local variable
 	    case ISN_STORESCRIPT:
 		{
-		    scriptitem_T *si = &SCRIPT_ITEM(
+		    scriptitem_T *si = SCRIPT_ITEM(
 					      iptr->isn_arg.script.script_sid);
 		    svar_T	 *sv = ((svar_T *)si->sn_var_vals.ga_data)
 					     + iptr->isn_arg.script.script_idx;
@@ -1551,7 +1551,7 @@
 	    case ISN_LOADSCRIPT:
 		{
 		    scriptitem_T *si =
-				 &SCRIPT_ITEM(iptr->isn_arg.script.script_sid);
+				  SCRIPT_ITEM(iptr->isn_arg.script.script_sid);
 		    svar_T *sv = ((svar_T *)si->sn_var_vals.ga_data)
 					     + iptr->isn_arg.script.script_idx;
 
@@ -1561,7 +1561,7 @@
 		break;
 	    case ISN_LOADS:
 		{
-		    scriptitem_T *si = &SCRIPT_ITEM(iptr->isn_arg.loads.ls_sid);
+		    scriptitem_T *si = SCRIPT_ITEM(iptr->isn_arg.loads.ls_sid);
 
 		    smsg("%4d LOADS s:%s from %s", current,
 					    iptr->isn_arg.string, si->sn_name);
@@ -1589,7 +1589,7 @@
 	    case ISN_STORESCRIPT:
 		{
 		    scriptitem_T *si =
-				 &SCRIPT_ITEM(iptr->isn_arg.script.script_sid);
+				  SCRIPT_ITEM(iptr->isn_arg.script.script_sid);
 		    svar_T *sv = ((svar_T *)si->sn_var_vals.ga_data)
 					     + iptr->isn_arg.script.script_idx;
 
diff --git a/src/vim9script.c b/src/vim9script.c
index 4596ce3..fb19258 100644
--- a/src/vim9script.c
+++ b/src/vim9script.c
@@ -32,7 +32,7 @@
     void
 ex_vim9script(exarg_T *eap)
 {
-    scriptitem_T *si = &SCRIPT_ITEM(current_sctx.sc_sid);
+    scriptitem_T *si = SCRIPT_ITEM(current_sctx.sc_sid);
 
     if (!getline_equal(eap->getline, eap->cookie, getsourceline))
     {
@@ -114,7 +114,7 @@
     void
 free_imports(int sid)
 {
-    scriptitem_T    *si = &SCRIPT_ITEM(sid);
+    scriptitem_T    *si = SCRIPT_ITEM(sid);
     int		    idx;
 
     for (idx = 0; idx < si->sn_imports.ga_len; ++idx)
@@ -226,7 +226,7 @@
     if (*tv.vval.v_string == '.')
     {
 	size_t		len;
-	scriptitem_T	*si = &SCRIPT_ITEM(current_sctx.sc_sid);
+	scriptitem_T	*si = SCRIPT_ITEM(current_sctx.sc_sid);
 	char_u		*tail = gettail(si->sn_name);
 	char_u		*from_name;
 
@@ -279,7 +279,7 @@
     if (*arg_start == '*')
     {
 	imported_T *imported = new_imported(gap != NULL ? gap
-					: &SCRIPT_ITEM(import_sid).sn_imports);
+					: &SCRIPT_ITEM(import_sid)->sn_imports);
 
 	if (imported == NULL)
 	    return NULL;
@@ -289,7 +289,7 @@
     }
     else
     {
-	scriptitem_T *script = &SCRIPT_ITEM(sid);
+	scriptitem_T *script = SCRIPT_ITEM(sid);
 
 	arg = arg_start;
 	if (*arg == '{')
@@ -358,7 +358,7 @@
 	    }
 
 	    imported = new_imported(gap != NULL ? gap
-					: &SCRIPT_ITEM(import_sid).sn_imports);
+				       : &SCRIPT_ITEM(import_sid)->sn_imports);
 	    if (imported == NULL)
 		return NULL;
 
