diff --git a/.snapcraft.yaml b/.snapcraft.yaml
deleted file mode 100644
index dcf3af94..00000000
--- a/.snapcraft.yaml
+++ /dev/null
@@ -1,83 +0,0 @@
-name: vips-nip2 
-icon: share/nip2/data/vips-128.png
-version: 'master'
-summary: An image-processing spreadsheet.
-description: |
-  nip2 is half-way between a spreadsheet and a paint program. 
-  It's terrible for retouching photographs, but very handy for automating image 
-  processing tasks. 
-
-  It can process multi-gigabyte images efficiently. It has good support for 
-  scientific image formats. It's much faster and more flexible than tools like 
-  ImageJ. 
-
-  This snap is git master nip2 built with git master libvips. 
-
-grade: devel 
-confinement: strict
-
-apps:
-  nip2:
-    command:  desktop-launch nip2
-    desktop: share/applications/nip2.desktop
-    plugs: [x11, home, gsettings]
-
-parts:
-  vips-part:
-    source: https://github.com/jcupitt/libvips
-    source-branch: master
-    source-type: git
-    plugin: autotools
-    build-packages:
-        -    gtk-doc-tools
-        -    gobject-introspection
-        -    intltool
-        -    libgirepository1.0-dev
-        -    libglib2.0-dev
-        -    libfftw3-dev
-        -    libexpat1-dev
-        -    libxml2-dev 
-        -    libjpeg-turbo8-dev
-        -    libtiff5-dev
-        -    libopenslide-dev
-        -    libopenexr-dev
-        -    libcfitsio-dev
-        -    libmatio-dev
-        -    libgif-dev
-        -    libpoppler-dev
-        -    librsvg2-dev
-        -    libmagickcore-6.q16-dev
-        -    libexif-dev
-        -    libgsf-1-dev
-        -    liblcms2-dev
-        -    libpng12-dev
-        -    libfontconfig1-dev
-        -    libgdk-pixbuf2.0-dev
-        -    libfreetype6-dev
-        -    libxft-dev
-        -    libcairo2-dev
-        -    libpango1.0-dev
-        -    liborc-0.4-dev
-        -    libwebp-dev
-
-  nip2-part:
-    source: https://github.com/jcupitt/nip2
-    source-branch: master
-    source-type: git
-    plugin: autotools
-    build-packages:
-        -    gobject-introspection
-        -    intltool
-        -    libgirepository1.0-dev
-        -    libglib2.0-dev
-        -    libgtk2.0-dev
-        -    libx11-dev
-        -    libxml2-dev
-        -    flex
-        -    bison
-        -    libfftw3-dev
-        -    libgoffice-0.8-dev
-        -    libgsl-dev
-        -    libgvc6
-    after: [desktop-gtk2, vips-part]
-
diff --git a/ChangeLog b/ChangeLog
index 5cdabb36..87c5bebd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,6 @@
+started 8.9.2 22/11/23
+- fix a lockup with comment characters in REPL [MvGulik]
+
 started 8.9.1 15/2/23
 - fix build with --std=c99 [Schamschula]
 
diff --git a/README.md b/README.md
index f8348a47..3e57bffb 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,27 @@
 # nip2 --- a user interface for libvips
 
-[![Snap
-Status](https://build.snapcraft.io/badge/jcupitt/nip2.svg)](https://build.snapcraft.io/user/jcupitt/nip2)
+We now have a first public test release of nip4, a rewrite of nip2 for the
+gtk4 UI toolkit. If you have some time to try it, any feedback would
+be very welcome:
+
+https://github.com/jcupitt/nip4/releases
+
+## nip2
 
 nip2 is a GUI for the [libvips image processing 
 library](https://libvips.github.io/libvips). It's a little like a spreadsheet:
 you create a set of formula connecting your objects together, and on a change
-nip2 recalculates.
+nip2 will recalculate. This makes it convenient for developing image processing
+systems since you can watch pixels change as you adjust your equations.
+
+Because nip2 uses libvips as the image processing engine it can handle very
+large images and only needs a little memory. It scales to fairly complex
+workflows: I've used it to develop systems with more than 10,000 cells,
+analyzing images of many tens of gigabytes. It has a batch mode, so you
+can run any image processing system you develop from the command-line and
+without a GUI.
 
-[![Screenshot](screenshot.png)](screenshot.png)
+![image](https://github.com/user-attachments/assets/aa2c3e0f-9f96-4594-9f1d-62ef770d0775)
 
 ## Installing
 
diff --git a/configure.ac b/configure.ac
index e3b412c9..ac6a03b4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
 # Process this file with autoconf to produce a configure script.
 
-AC_INIT([nip2], [8.9.1], [vipsip@jiscmail.ac.uk])
+AC_INIT([nip2], [8.9.2], [vipsip@jiscmail.ac.uk])
 
 # foreign stops complaints about a missing README (we use README.md instead)
 # and missing INSTALL (the standard Gnu INSTALL is not very useful)
@@ -17,7 +17,7 @@ dnl
 
 m4_define([nip_major_version], [8])
 m4_define([nip_minor_version], [9])
-m4_define([nip_micro_version], [1])
+m4_define([nip_micro_version], [2])
 m4_define([nip_version],
           [nip_major_version.nip_minor_version.nip_micro_version])
 
diff --git a/screenshot.png b/screenshot.png
deleted file mode 100644
index 224dfebe..00000000
Binary files a/screenshot.png and /dev/null differ
diff --git a/src/dummy.c b/src/dummy.c
new file mode 100644
index 00000000..679b26f3
--- /dev/null
+++ b/src/dummy.c
@@ -0,0 +1 @@
+int poop () {}
diff --git a/src/imageinfo.c b/src/imageinfo.c
index 2abf10f8..14f70f92 100644
--- a/src/imageinfo.c
+++ b/src/imageinfo.c
@@ -720,7 +720,6 @@ imageinfo_proxy_add( Imageinfo *imageinfo )
          */ 
 	g_assert( !imageinfo->proxy );
 	if( !(imageinfo->proxy = IM_NEW( imageinfo->im, Imageinfoproxy )) )
-	if( !(imageinfo->proxy = IM_NEW( NULL, Imageinfoproxy )) )
 		return;
 	imageinfo->proxy->im = imageinfo->im;
 	imageinfo->proxy->imageinfo = imageinfo;
diff --git a/src/ip.h b/src/ip.h
index fcb06b56..6cfbbd46 100644
--- a/src/ip.h
+++ b/src/ip.h
@@ -108,7 +108,6 @@
 #endif /*HAVE_SYS_STATVFS_H*/
 #ifdef HAVE_SYS_VFS_H
 #include <sys/vfs.h>
-extern int statfs();
 #endif /*HAVE_SYS_VFS_H*/
 #ifdef HAVE_SYS_MOUNT_H
 #include <sys/mount.h>
@@ -202,7 +201,7 @@ extern int statfs();
 #define IP_NAME PACKAGE "-" VERSION
 #define MAX_LINELENGTH (120)	/* Max chars we display of value */
 #define MAX_RECENT (10)		/* Number of recent items in file menu */
-#define NIP_COPYRIGHT "%s: &#0169;2018 Imperial College, London"
+#define NIP_COPYRIGHT "%s: &#0169;2023 libvips.org"
 
 /* Our stock_ids.
  */
diff --git a/src/lex.l b/src/lex.l
index 9cfc2e93..b960b9b7 100644
--- a/src/lex.l
+++ b/src/lex.l
@@ -180,7 +180,7 @@ read_char( void )
 
 	/* Read string up to \n, EOF.
 	 */
-	while( (ch = input()) != EOF && ch != '\n' )
+	while( (ch = input()) != EOF && ch != '\n' && ch != '\0')
 		;
 }
 
diff --git a/src/plot.c b/src/plot.c
index 52b7b9cd..fb310939 100644
--- a/src/plot.c
+++ b/src/plot.c
@@ -375,7 +375,7 @@ plot_class_get( Classmodel *classmodel, PElement *root )
 	Imageinfo *ii2;
 	IMAGE *t;
 	DOUBLEMASK *mask;
-	int (*fn)();
+	int (*fn)(VipsImage *, VipsImage *);
 
 	/* nx1 or 1xm images only ... use Bands for columns.
 	 */