diff --git a/src/Makefile b/src/Makefile
index c4bce68..e8f84465 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -2026,7 +2026,7 @@
 RSRC_DIR = os_mac_rsrc
 
 PRO_MANUAL = os_amiga.pro os_win32.pro \
-	os_mswin.pro winclip.pro os_beos.pro os_vms.pro $(PERL_PRO)
+	os_mswin.pro winclip.pro os_vms.pro $(PERL_PRO)
 
 # Default target is making the executable and tools
 all: $(VIMTARGET) $(TOOLS) languages $(GUI_BUNDLE)
@@ -2193,10 +2193,6 @@
 	$(CPROTO) -DWIN32 -UHAVE_CONFIG_H $< > proto/$@
 	echo "/* vim: set ft=c : */" >> proto/$@
 
-os_beos.pro: os_beos.c
-	$(CPROTO) -D__BEOS__ -UHAVE_CONFIG_H $< > proto/$@
-	echo "/* vim: set ft=c : */" >> proto/$@
-
 os_vms.pro: os_vms.c
 # must use os_vms_conf.h for auto/config.h
 	mv auto/config.h auto/config.h.save
@@ -3394,9 +3390,6 @@
 objects/optionstr.o: optionstr.c
 	$(CCC_NF) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) $(RUBY_CFLAGS) $(TCL_CFLAGS) $(ALL_CFLAGS) -o $@ optionstr.c
 
-objects/os_beos.o: os_beos.c
-	$(CCC) -o $@ os_beos.c
-
 objects/os_qnx.o: os_qnx.c
 	$(CCC) -o $@ os_qnx.c
 
diff --git a/src/auto/configure b/src/auto/configure
index 659ef82..516e45c 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -4533,16 +4533,6 @@
 
 OS_EXTRA_SRC=""; OS_EXTRA_OBJ=""
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BeOS" >&5
-$as_echo_n "checking for BeOS... " >&6; }
-case `uname` in
-    BeOS)	OS_EXTRA_SRC=os_beos.c; OS_EXTRA_OBJ=objects/os_beos.o
-		BEOS=yes; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; };;
-    *)		BEOS=no; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; };;
-esac
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Haiku" >&5
 $as_echo_n "checking for Haiku... " >&6; }
 case `uname` in
diff --git a/src/configure.ac b/src/configure.ac
index 8751b2e..6785180 100644
--- a/src/configure.ac
+++ b/src/configure.ac
@@ -146,14 +146,6 @@
 
 OS_EXTRA_SRC=""; OS_EXTRA_OBJ=""
 
-dnl Check for BeOS, which needs an extra source file
-AC_MSG_CHECKING(for BeOS)
-case `uname` in
-    BeOS)	OS_EXTRA_SRC=os_beos.c; OS_EXTRA_OBJ=objects/os_beos.o
-		BEOS=yes; AC_MSG_RESULT(yes);;
-    *)		BEOS=no; AC_MSG_RESULT(no);;
-esac
-
 AC_MSG_CHECKING(for Haiku)
 case `uname` in
     Haiku) HAIKU=yes; AC_MSG_RESULT(yes);;
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 907815f..fc8b044 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -3387,13 +3387,6 @@
 		0
 #endif
 		},
-	{"beos",
-#ifdef __BEOS__
-		1
-#else
-		0
-#endif
-		},
 	{"haiku",
 #ifdef __HAIKU__
 		1
diff --git a/src/normal.c b/src/normal.c
index 48e1c71..a39b1d4 100644
--- a/src/normal.c
+++ b/src/normal.c
@@ -3385,14 +3385,6 @@
 {
     if (!checkclearop(cap->oap))
     {
-#if defined(__BEOS__) && !USE_THREAD_FOR_INPUT_WITH_TIMEOUT
-	/*
-	 * Right now, the BeBox doesn't seem to have an easy way to detect
-	 * window resizing, so we cheat and make the user detect it
-	 * manually with CTRL-L instead
-	 */
-	ui_get_shellsize();
-#endif
 #ifdef FEAT_SYN_HL
 	// Clear all syntax states to force resyncing.
 	syn_stack_free_all(curwin->w_s);
diff --git a/src/os_beos.c b/src/os_beos.c
deleted file mode 100644
index f3c0173..0000000
--- a/src/os_beos.c
+++ /dev/null
@@ -1,200 +0,0 @@
-/* vi:set ts=8 sts=4 sw=4 noet:
- *
- * VIM - Vi IMproved	by Bram Moolenaar
- *		 BeBox port Copyright 1997 by Olaf Seibert.
- *
- * Do ":help uganda"  in Vim to read copying and usage conditions.
- * Do ":help credits" in Vim to see a list of people who contributed.
- * See README.txt for an overview of the Vim source code.
- */
-/*
- * os_beos.c  Additional stuff for BeOS (rest is in os_unix.c)
- */
-
-#include <float.h>
-#include <termios.h>
-#ifndef PROTO
-# include <kernel/OS.h>
-#endif
-
-#include "vim.h"
-
-#if USE_THREAD_FOR_INPUT_WITH_TIMEOUT
-
-#ifdef PROTO	    // making prototypes on Unix
-#define sem_id int
-#define thread_id int
-#endif
-
-char_u charbuf;
-signed char charcount;
-sem_id character_present;
-sem_id character_wanted;
-thread_id read_thread_id;
-
-#define TRY_ABORT	0	// This code does not work so turn it off.
-
-#if TRY_ABORT
-    static void
-mostly_ignore(int sig)
-{
-}
-#endif
-
-    static long
-read_thread(void *dummy)
-{
-    signal(SIGINT, SIG_IGN);
-    signal(SIGQUIT, SIG_IGN);
-#if TRY_ABORT
-    signal(SIGUSR1, mostly_ignore);
-#endif
-
-    for (;;) {
-	if (acquire_sem(character_wanted) != B_NO_ERROR)
-	    break;
-	charcount = read(read_cmd_fd, &charbuf, 1);
-	release_sem(character_present);
-    }
-
-    return 0;
-}
-
-    void
-beos_cleanup_read_thread(void)
-{
-    if (character_present > 0)
-	delete_sem(character_present);
-    character_present = 0;
-    if (read_thread_id > 0)
-	kill_thread(read_thread_id);
-    read_thread_id = 0;
-}
-
-#endif
-
-/*
- * select() emulation. Hopefully, in DR9 there will be something
- * useful supplied by the system. ... Alas, not. Not in AAPR, nor
- * in PR or even PR2... R3 then maybe? I don't think so!
- */
-
-    int
-beos_select(int nbits,
-       struct fd_set *rbits,
-       struct fd_set *wbits,
-       struct fd_set *ebits,
-       struct timeval *timeout)
-{
-    bigtime_t tmo;
-
-    if (nbits == 0) {
-	// select is purely being used for delay
-	snooze(timeout->tv_sec * 1e6 + timeout->tv_usec);
-	return 0;
-    }
-#if 0
-    /*
-     * This does not seem to work either. Reads here are not supposed to
-     * block indefinitely, yet they do. This is most annoying.
-     */
-    if (FD_ISSET(0, rbits)) {
-	char cbuf[1];
-	int count;
-	struct termios told;
-	struct termios tnew;
-	tcgetattr(0, &told);
-	tnew = told;
-	tnew.c_lflag &= ~ICANON;
-	tnew.c_cc[VMIN] = 0;
-	tnew.c_cc[VTIME] = timeout->tv_sec * 10 + timeout->tv_usec / 100000;
-	tcsetattr(0, TCSANOW, &tnew);
-
-	count = read(0, &cbuf, sizeof(cbuf));
-	tcsetattr(0, TCSANOW, &told);
-	if (count > 0) {
-	    add_to_input_buf(&cbuf[0], count);
-	    return 1;
-	}
-	return 0;
-    }
-#endif
-#if USE_THREAD_FOR_INPUT_WITH_TIMEOUT
-    /*
-     * Check if the operation is really on stdin...
-     */
-    if (FD_ISSET(read_cmd_fd, rbits))
-    {
-	int acquired;
-
-	/*
-	 * Is this the first time through?
-	 * Then start up the thread and initialise the semaphores.
-	 */
-	if (character_present == 0) {
-	    character_present = create_sem(0, "vim character_present");
-	    character_wanted = create_sem(1, "vim character_wanted");
-	    read_thread_id = spawn_thread(read_thread, "vim async read",
-		    B_NORMAL_PRIORITY, NULL);
-	    atexit(beos_cleanup_read_thread);
-	    resume_thread(read_thread_id);
-	}
-
-	// timeout == NULL means "indefinitely"
-	if (timeout) {
-	    tmo = timeout->tv_sec * 1e6 + timeout->tv_usec;
-	    // 0 means "don't wait, which is impossible to do exactly.
-	    if (tmo == 0)
-		tmo = 1.0;
-	}
-#if TRY_ABORT
-	release_sem(character_wanted);
-#endif
-	if (timeout)
-	    acquired = acquire_sem_etc(character_present, 1, B_TIMEOUT, tmo);
-	else
-	    acquired = acquire_sem(character_present);
-	if (acquired == B_NO_ERROR) {
-	    if (charcount > 0) {
-		add_to_input_buf(&charbuf, 1);
-#if !TRY_ABORT
-		release_sem(character_wanted);
-#endif
-
-		return 1;
-	    } else {
-#if !TRY_ABORT
-		release_sem(character_wanted);
-#endif
-
-		return 0;
-	    }
-	}
-#if TRY_ABORT
-	else {
-	    /*
-	     * Timeout occurred. Break the read() call by sending
-	     * a signal. Problem: it may be just read()ing it now.
-	     * Therefore we still have to finish the handshake with
-	     * the thread and maybe remember the character.
-	     */
-	    kill(read_thread_id, SIGUSR1);
-	    /*
-	     *	If some other error occurred, don't hang now.
-	     * (We will most likely hang later anyway...)
-	     */
-	    if (acquired == B_TIMED_OUT)
-		acquire_sem(character_present);
-	    if (charcount > 0) {
-		add_to_input_buf(&charbuf, 1);
-		return 1;
-	    }
-	    return 0;
-	}
-#endif
-    }
-#endif
-
-    return 0;
-}
-
diff --git a/src/os_beos.h b/src/os_beos.h
deleted file mode 100644
index caf3952..0000000
--- a/src/os_beos.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* vi:set ts=8 sts=4 sw=4 noet:
- *
- * VIM - Vi IMproved	by Bram Moolenaar
- *		 BeBox port by Olaf Seibert
- *
- * Do ":help uganda"  in Vim to read copying and usage conditions.
- * Do ":help credits" in Vim to see a list of people who contributed.
- */
-
-/*
- * os_beos.h
- */
-
-#undef USE_SYSTEM
-#define USE_THREAD_FOR_INPUT_WITH_TIMEOUT	1
-#define USE_TERM_CONSOLE
-
-#define HAVE_DROP_FILE
-
-#undef	BEOS_DR8
-#define	BEOS_PR_OR_BETTER
-
-// select emulation
-
-#ifndef PROTO
-# include <net/socket.h>		// for typedefs and #defines only
-#endif
diff --git a/src/os_beos.rsrc b/src/os_beos.rsrc
deleted file mode 100644
index f6443cd..0000000
--- a/src/os_beos.rsrc
+++ /dev/null
Binary files differ
diff --git a/src/os_unix.c b/src/os_unix.c
index 6c308af..3464426 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -12,7 +12,7 @@
 /*
  * os_unix.c -- code for all flavors of Unix (BSD, SYSV, SVR4, POSIX, ...)
  *	     Also for OS/2, using the excellent EMX package!!!
- *	     Also for BeOS and Atari MiNT.
+ *	     Also for Atari MiNT.
  *
  * A lot of this file was originally written by Juergen Weigert and later
  * changed beyond recognition.
@@ -43,11 +43,6 @@
 # endif
 #endif
 
-#ifdef __BEOS__
-# undef select
-# define select	beos_select
-#endif
-
 #ifdef __CYGWIN__
 # ifndef MSWIN
 #  include <cygwin/version.h>
@@ -150,7 +145,7 @@
 #endif
 static int  WaitForChar(long msec, int *interrupted, int ignore_input);
 static int  WaitForCharOrMouse(long msec, int *interrupted, int ignore_input);
-#if defined(__BEOS__) || defined(VMS)
+#ifdef VMS
 int  RealWaitForChar(int, long, int *, int *interrupted);
 #else
 static int  RealWaitForChar(int, long, int *, int *interrupted);
@@ -1245,8 +1240,7 @@
     if (ignore_sigtstp)
 	return;
 
-    // BeOS does have SIGTSTP, but it doesn't work.
-#if defined(SIGTSTP) && !defined(__BEOS__)
+#if defined(SIGTSTP)
     in_mch_suspend = TRUE;
 
     out_flush();	    // needed to make cursor visible on some systems
@@ -3486,10 +3480,13 @@
     tnew = told;
     if (tmode == TMODE_RAW)
     {
-	/*
-	 * ~ICRNL enables typing ^V^M
-	 */
+	// ~ICRNL enables typing ^V^M
 	tnew.c_iflag &= ~ICRNL;
+# ifdef IXON_NOT_USED
+	// Do not make CTRL-S stop output, for most users it is unexpected and
+	// is hardly ever useful.
+	tnew.c_iflag |= IXON;
+# endif
 	tnew.c_lflag &= ~(ICANON | ECHO | ISIG | ECHOE
 # if defined(IEXTEN) && !defined(__MINT__)
 		    | IEXTEN	    // IEXTEN enables typing ^V on SOLARIS
@@ -4631,11 +4628,6 @@
     if (!pipe_error)			// pty or pipe opened or not used
     {
 	SIGSET_DECL(curset)
-
-# if defined(__BEOS__) && USE_THREAD_FOR_INPUT_WITH_TIMEOUT
-	beos_cleanup_read_thread();
-# endif
-
 	BLOCK_SIGNALS(&curset);
 	pid = fork();	// maybe we should use vfork()
 	if (pid == -1)
@@ -6075,11 +6067,7 @@
  * "interrupted" (if not NULL) is set to TRUE when no character is available
  * but something else needs to be done.
  */
-#if defined(__BEOS__)
-    int
-#else
     static int
-#endif
 RealWaitForChar(int fd, long msec, int *check_for_gpm UNUSED, int *interrupted)
 {
     int		ret;
diff --git a/src/proto.h b/src/proto.h
index 7a5cc41..b73350a 100644
--- a/src/proto.h
+++ b/src/proto.h
@@ -49,9 +49,6 @@
 # ifdef VMS
 #  include "os_vms.pro"
 # endif
-# ifdef __BEOS__
-#  include "os_beos.pro"
-# endif
 # ifdef __QNX__
 #  include "os_qnx.pro"
 # endif
diff --git a/src/proto/os_beos.pro b/src/proto/os_beos.pro
deleted file mode 100644
index bccf45d..0000000
--- a/src/proto/os_beos.pro
+++ /dev/null
@@ -1,4 +0,0 @@
-/* os_beos.c */
-void beos_cleanup_read_thread(void);
-int beos_select(int nbits, struct fd_set *rbits, struct fd_set *wbits, struct fd_set *ebits, struct timeval *timeout);
-/* vim: set ft=c : */
diff --git a/src/pty.c b/src/pty.c
index 03c02af..5f8b9e5 100644
--- a/src/pty.c
+++ b/src/pty.c
@@ -386,7 +386,7 @@
 static char PtyProto[] = "/dev/ptym/ptyXY";
 static char TtyProto[] = "/dev/pty/ttyXY";
 # else
-#  if defined (__BEOS__) || defined(__HAIKU__)
+#  ifdef(__HAIKU__)
 static char PtyProto[] = "/dev/pt/XY";
 static char TtyProto[] = "/dev/tt/XY";
 #  else
diff --git a/src/screen.c b/src/screen.c
index 6893ca3..9dac324 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -3868,19 +3868,6 @@
 	type = USE_REDRAW;
     else if (can_clear(T_CD) && result_empty)
 	type = USE_T_CD;
-#if defined(__BEOS__) && defined(BEOS_DR8)
-    /*
-     * USE_NL does not seem to work in Terminal of DR8 so we set T_DB="" in
-     * its internal termcap... this works okay for tests which test *T_DB !=
-     * NUL.  It has the disadvantage that the user cannot use any :set t_*
-     * command to get T_DB (back) to empty_option, only :set term=... will do
-     * the trick...
-     * Anyway, this hack will hopefully go away with the next OS release.
-     * (Olaf Seibert)
-     */
-    else if (row == 0 && T_DB == empty_option
-					&& (line_count == 1 || *T_CDL == NUL))
-#else
     else if (row == 0 && (
 #ifndef AMIGA
 	// On the Amiga, somehow '\n' on the last line doesn't always scroll
@@ -3888,7 +3875,6 @@
 			    line_count == 1 ||
 #endif
 						*T_CDL == NUL))
-#endif
 	type = USE_NL;
     else if (*T_CDL != NUL && line_count > 1 && can_delete)
 	type = USE_T_CDL;
diff --git a/src/term.c b/src/term.c
index d774ebc..7c92f3e 100644
--- a/src/term.c
+++ b/src/term.c
@@ -362,11 +362,10 @@
     {TERMCAP2KEY('*', '7'), "\233\065\065~"},	// shifted end key
 # endif
 
-# if defined(__BEOS__) || defined(ALL_BUILTIN_TCAPS)
+# ifdef ALL_BUILTIN_TCAPS
 /*
- * almost standard ANSI terminal, default for bebox
+ * almost standard ANSI terminal
  */
-    {(int)KS_NAME,	"beos-ansi"},
     {(int)KS_CE,	"\033[K"},
     {(int)KS_CD,	"\033[J"},
     {(int)KS_AL,	"\033[L"},
@@ -381,13 +380,6 @@
 #  else
     {(int)KS_CDL,	"\033[%dM"},
 #  endif
-#ifdef BEOS_PR_OR_BETTER
-#  ifdef TERMINFO
-    {(int)KS_CS,	"\033[%i%p1%d;%p2%dr"},
-#  else
-    {(int)KS_CS,	"\033[%i%d;%dr"},	// scroll region
-#  endif
-#endif
     {(int)KS_CL,	"\033[H\033[2J"},
 #ifdef notyet
     {(int)KS_VI,	"[VI]"}, // cursor invisible, VT320: CSI ? 25 l
@@ -425,9 +417,6 @@
 #  else
     {(int)KS_CRI,	"\033[%dC"},
 #  endif
-#  if defined(BEOS_DR8)
-    {(int)KS_DB,	""},		// hack! see screen.c
-#  endif
 
     {K_UP,		"\033[A"},
     {K_DOWN,		"\033[B"},
@@ -1415,11 +1404,6 @@
 # define DEFAULT_TERM	(char_u *)"vt320"
 #endif
 
-#ifdef __BEOS__
-# undef DEFAULT_TERM
-# define DEFAULT_TERM	(char_u *)"beos-ansi"
-#endif
-
 #ifdef __HAIKU__
 # undef DEFAULT_TERM
 # define DEFAULT_TERM	(char_u *)"xterm"
@@ -2429,17 +2413,6 @@
 	name = NULL;	    // empty name is equal to no name
     term = name;
 
-#ifdef __BEOS__
-    /*
-     * TERM environment variable is normally set to 'ansi' on the Bebox;
-     * Since the BeBox doesn't quite support full ANSI yet, we use our
-     * own custom 'ansi-beos' termcap instead, unless the -T option has
-     * been given on the command line.
-     */
-    if (term == NULL
-		 && strcmp((char *)mch_getenv((char_u *)"TERM"), "ansi") == 0)
-	term = DEFAULT_TERM;
-#endif
 #ifndef MSWIN
     if (term == NULL)
 	term = mch_getenv((char_u *)"TERM");
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index d342e51..e5c74e0 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -1766,11 +1766,10 @@
 
 func Test_platform_name()
   " The system matches at most only one name.
-  let names = ['amiga', 'beos', 'bsd', 'hpux', 'linux', 'mac', 'qnx', 'sun', 'vms', 'win32', 'win32unix']
+  let names = ['amiga', 'bsd', 'hpux', 'linux', 'mac', 'qnx', 'sun', 'vms', 'win32', 'win32unix']
   call assert_inrange(0, 1, len(filter(copy(names), 'has(v:val)')))
 
   " Is Unix?
-  call assert_equal(has('beos'), has('beos') && has('unix'))
   call assert_equal(has('bsd'), has('bsd') && has('unix'))
   call assert_equal(has('hpux'), has('hpux') && has('unix'))
   call assert_equal(has('linux'), has('linux') && has('unix'))
@@ -1782,7 +1781,6 @@
 
   if has('unix') && executable('uname')
     let uname = system('uname')
-    call assert_equal(uname =~? 'BeOS', has('beos'))
     " GNU userland on BSD kernels (e.g., GNU/kFreeBSD) don't have BSD defined
     call assert_equal(uname =~? '\%(GNU/k\w\+\)\@<!BSD\|DragonFly', has('bsd'))
     call assert_equal(uname =~? 'HP-UX', has('hpux'))
diff --git a/src/ui.c b/src/ui.c
index 050b162..19d9e21 100644
--- a/src/ui.c
+++ b/src/ui.c
@@ -554,7 +554,7 @@
     mch_suspend();
 }
 
-#if !defined(UNIX) || !defined(SIGTSTP) || defined(PROTO) || defined(__BEOS__)
+#if !defined(UNIX) || !defined(SIGTSTP) || defined(PROTO)
 /*
  * When the OS can't really suspend, call this function to start a shell.
  * This is never called in the GUI.
@@ -912,17 +912,6 @@
      * If we can't get any, and there isn't any in the buffer, we give up and
      * exit Vim.
      */
-# ifdef __BEOS__
-    /*
-     * On the BeBox version (for now), all input is secretly performed within
-     * beos_select() which is called from RealWaitForChar().
-     */
-    while (!vim_is_input_buf_full() && RealWaitForChar(read_cmd_fd, 0, NULL))
-	    ;
-    len = inbufcount;
-    inbufcount = 0;
-# else
-
     if (rest != NULL)
     {
 	// Use remainder of previous call, starts with an invalid character
@@ -981,7 +970,6 @@
 	if (!exit_on_error)
 	    return;
     }
-# endif
     if (len <= 0 && !got_int)
 	read_error_exit();
     if (len > 0)
diff --git a/src/version.c b/src/version.c
index 47538a6..59c314b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    849,
+/**/
     848,
 /**/
     847,
diff --git a/src/vim.h b/src/vim.h
index 708bb99..68cf943 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -220,10 +220,6 @@
 # include <clib/exec_protos.h>
 #endif
 
-#ifdef __BEOS__
-# include "os_beos.h"
-#endif
-
 #ifdef __HAIKU__
 # include "os_haiku.h"
 # define __ARGS(x)  x
