diff --git a/src/feature.h b/src/feature.h
index 2d49b5c..c23ade4 100644
--- a/src/feature.h
+++ b/src/feature.h
@@ -1133,7 +1133,7 @@
 /*
  * +ARP			Amiga only. Use arp.library, DOS 2.0 is not required.
  */
-#ifndef NO_ARP
+#if !defined(NO_ARP) && !defined(__amigaos4__)
 # define FEAT_ARP
 #endif
 
diff --git a/src/mbyte.c b/src/mbyte.c
index 085b0ea..846ce98 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -667,7 +667,7 @@
 	     * API */
 	    n = IsDBCSLeadByteEx(enc_dbcs, (BYTE)i) ? 2 : 1;
 #else
-# ifdef MACOS
+# if defined(MACOS) || defined(__amigaos4__)
 	    /*
 	     * if mblen() is not available, character which MSB is turned on
 	     * are treated as leading byte character. (note : This assumption
diff --git a/src/memfile.c b/src/memfile.c
index 0f07091..ba2a379 100644
--- a/src/memfile.c
+++ b/src/memfile.c
@@ -655,7 +655,7 @@
 # endif
 #endif
 #ifdef AMIGA
-# ifdef __AROS__
+# if defined(__AROS__) || defined(__amigaos4__)
 	if (fsync(mfp->mf_fd) != 0)
 	    status = FAIL;
 # else
diff --git a/src/memline.c b/src/memline.c
index 5d43dc3..80a870a 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -55,10 +55,14 @@
 # include <time.h>
 #endif
 
-#ifdef SASC
+#if defined(SASC) || defined(__amigaos4__)
 # include <proto/dos.h>	    /* for Open() and Close() */
 #endif
 
+#ifdef HAVE_ERRNO_H
+# include <errno.h>
+#endif
+
 typedef struct block0		ZERO_BL;    /* contents of the first block */
 typedef struct pointer_block	PTR_BL;	    /* contents of a pointer block */
 typedef struct data_block	DATA_BL;    /* contents of a data block */
@@ -4481,7 +4485,7 @@
     curchnk = buf->b_ml.ml_chunksize + curix;
 
     if (updtype == ML_CHNK_DELLINE)
-	len *= -1;
+	len = -len;
     curchnk->mlcs_totalsize += len;
     if (updtype == ML_CHNK_ADDLINE)
     {
diff --git a/src/os_amiga.c b/src/os_amiga.c
index 3728beb..07000dc 100644
--- a/src/os_amiga.c
+++ b/src/os_amiga.c
@@ -30,20 +30,31 @@
 # include <exec/types.h>
 # include <exec/exec.h>
 # include <libraries/dos.h>
-# include <libraries/dosextens.h>
 # include <intuition/intuition.h>
-#else
-# include <proto/dos.h>
-# include <libraries/dosextens.h>
-# include <proto/intuition.h>
-# include <proto/exec.h>
 #endif
 
+/* XXX These are included from os_amiga.h
+#include <proto/exec.h>
+#include <proto/dos.h>
+#include <proto/intuition.h>
+*/
+
 #include <exec/memory.h>
+#include <libraries/dosextens.h>
 
 #include <dos/dostags.h>	    /* for 2.0 functions */
 #include <dos/dosasl.h>
 
+/* From version 4 of AmigaOS, several system structures must be allocated
+ * and freed using system functions. "struct AnchorPath" is one.
+ */
+#ifdef __amigaos4__
+# include <dos/anchorpath.h>
+# define	free_fib(x) FreeDosObject(DOS_FIB, x)
+#else
+# define	free_fib(x) vim_free(fib)
+#endif
+
 #if defined(LATTICE) && !defined(SASC) && defined(FEAT_ARP)
 # include <libraries/arp_pragmas.h>
 #endif
@@ -56,7 +67,9 @@
 #undef	FALSE
 #define FALSE (0)
 
-#if !defined(AZTEC_C) && !defined(__AROS__)
+#ifdef __amigaos4__
+# define	dos_packet(a, b, c)   DoPkt(a, b, c, 0, 0, 0, 0)
+#elif !defined(AZTEC_C) && !defined(__AROS__)
 static long dos_packet __ARGS((struct MsgPort *, long, long));
 #endif
 static int lock2name __ARGS((BPTR lock, char_u *buf, long   len));
@@ -68,7 +81,9 @@
 static BPTR		raw_out = (BPTR)NULL;
 static int		close_win = FALSE;  /* set if Vim opened the window */
 
+#ifndef __amigaos4__	/* Use autoopen for AmigaOS4 */
 struct IntuitionBase	*IntuitionBase = NULL;
+#endif
 #ifdef FEAT_ARP
 struct ArpBase		*ArpBase = NULL;
 #endif
@@ -186,9 +201,17 @@
 mch_avail_mem(special)
     int	    special;
 {
+#ifdef __amigaos4__
+    return (long_u)AvailMem(MEMF_ANY);
+#else
     return (long_u)AvailMem(special ? (long)MEMF_CHIP : (long)MEMF_ANY);
+#endif
 }
 
+/*
+ * Waits a specified amount of time, or until input arrives if
+ * ignoreinput is FALSE.
+ */
     void
 mch_delay(msec, ignoreinput)
     long    msec;
@@ -252,6 +275,7 @@
     out_flush();
 
     wb_window = NULL;
+#ifndef __amigaos4__
     if ((IntuitionBase = (struct IntuitionBase *)
 				OpenLibrary((UBYTE *)intlibname, 0L)) == NULL)
     {
@@ -260,6 +284,7 @@
 	mch_errmsg("!?\n");
 	mch_exit(3);
     }
+#endif
 }
 
 #include <workbench/startup.h>
@@ -284,7 +309,7 @@
 {
     int		    i;
     BPTR	    nilfh, fh;
-    char_u	    buf1[20];
+    char_u	    buf1[24];
     char_u	    buf2[BUF2SIZE];
     static char_u   *(constrings[3]) = {(char_u *)"con:0/0/662/210/",
 					(char_u *)"con:0/0/640/200/",
@@ -295,35 +320,39 @@
     char	    *av;
     char_u	    *device = NULL;
     int		    exitval = 4;
+#ifndef __amigaos4__
     struct Library  *DosBase;
+#endif
     int		    usewin = FALSE;
 
 /*
  * check if we are running under DOS 2.0x or higher
  */
+#ifndef __amigaos4__
     DosBase = OpenLibrary(DOS_LIBRARY, 37L);
     if (DosBase != NULL)
     /* if (((struct Library *)DOSBase)->lib_Version >= 37) */
     {
 	CloseLibrary(DosBase);
-#ifdef FEAT_ARP
+# ifdef FEAT_ARP
 	dos2 = TRUE;
-#endif
+# endif
     }
     else	    /* without arp functions we NEED 2.0 */
     {
-#ifndef FEAT_ARP
+# ifndef FEAT_ARP
 	mch_errmsg(_("Need Amigados version 2.04 or later\n"));
 	exit(3);
-#else
+# else
 		    /* need arp functions for dos 1.x */
 	if (!(ArpBase = (struct ArpBase *) OpenLibrary((UBYTE *)ArpName, ArpVersion)))
 	{
 	    fprintf(stderr, _("Need %s version %ld\n"), ArpName, ArpVersion);
 	    exit(3);
 	}
-#endif
+# endif
     }
+#endif	/* __amigaos4__ */
 
     /*
      * scan argv[] for the "-f" and "-d" arguments
@@ -398,8 +427,15 @@
     /*
      * Make a unique name for the temp file (which we will not delete!).
      * Use a pointer on the stack (nobody else will be using it).
+     * Under AmigaOS4, this assumption might change in the future, so
+     * we use a pointer to the current task instead. This should be a
+     * shared structure and thus globally unique.
      */
+#ifdef __amigaos4__
+    sprintf((char *)buf1, "t:nc%p", FindTask(0));
+#else
     sprintf((char *)buf1, "t:nc%ld", (long)buf1);
+#endif
     if ((fh = Open((UBYTE *)buf1, (long)MODE_NEWFILE)) == (BPTR)NULL)
     {
 	mch_errmsg(_("Cannot create "));
@@ -513,7 +549,8 @@
 
 /*
  * fname_case(): Set the case of the file name, if it already exists.
- *		 This will cause the file name to remain exactly the same.
+ *		 This will cause the file name to remain exactly the same
+ *		 if the file system ignores, but preserves case.
  */
 /*ARGSUSED*/
     void
@@ -528,9 +565,14 @@
     if (fib != NULL)
     {
 	flen = STRLEN(name);
+	/* TODO: Check if this fix applies to AmigaOS < 4 too.*/
+#ifdef __amigaos4__
+	if (fib->fib_DirEntryType == ST_ROOT)
+	    strcat(fib->fib_FileName, ":");
+#endif
 	if (flen == strlen(fib->fib_FileName))	/* safety check */
 	    mch_memmove(name, fib->fib_FileName, flen);
-	vim_free(fib);
+	free_fib(fib);
     }
 }
 
@@ -548,13 +590,17 @@
 
     if (fname == NULL)	    /* safety check */
 	return NULL;
-    fib = (struct FileInfoBlock *)malloc(sizeof(struct FileInfoBlock));
+#ifdef __amigaos4__
+    fib = AllocDosObject(DOS_FIB,0);
+#else
+    fib = (struct FileInfoBlock *)alloc(sizeof(struct FileInfoBlock));
+#endif
     if (fib != NULL)
     {
 	flock = Lock((UBYTE *)fname, (long)ACCESS_READ);
 	if (flock == (BPTR)NULL || !Examine(flock, fib))
 	{
-	    vim_free(fib);  /* in case of an error the memory is freed here */
+	    free_fib(fib);  /* in case of an error the memory is freed here */
 	    fib = NULL;
 	}
 	if (flock)
@@ -613,6 +659,7 @@
     char_u  *s;
     int	    len;
 {
+    /* TODO: Implement this. */
     *s = NUL;
     return FAIL;
 }
@@ -625,7 +672,11 @@
     char_u  *s;
     int	    len;
 {
+#if defined(__amigaos4__) && defined(__CLIB2__)
+    gethostname(s, len);
+#else
     vim_strncpy(s, "Amiga", len - 1);
+#endif
 }
 
 /*
@@ -634,7 +685,14 @@
     long
 mch_get_pid()
 {
+#ifdef __amigaos4__
+    /* This is as close to a pid as we can come. We could use CLI numbers also,
+     * but then we would have two different types of process identifiers.
+     */
+    return((long)FindTask(0));
+#else
     return (long)0;
+#endif
 }
 
 /*
@@ -746,7 +804,7 @@
     if (fib != NULL)
     {
 	retval = fib->fib_Protection;
-	vim_free(fib);
+	free_fib(fib);
     }
     return retval;
 }
@@ -790,8 +848,12 @@
     fib = get_fib(name);
     if (fib != NULL)
     {
+#ifdef __amigaos4__
+	retval = (FIB_IS_DRAWER(fib)) ? TRUE : FALSE;
+#else
 	retval = ((fib->fib_DirEntryType >= 0) ? TRUE : FALSE);
-	vim_free(fib);
+#endif
+	free_fib(fib);
     }
     return retval;
 }
@@ -912,7 +974,7 @@
 mch_settmode(tmode)
     int		tmode;
 {
-#ifdef __AROS__
+#if defined(__AROS__) || defined(__amigaos4__)
     if (!SetMode(raw_in, tmode == TMODE_RAW ? 1 : 0))
 #else
     if (dos_packet(MP(raw_in), (long)ACTION_SCREEN_MODE,
@@ -954,14 +1016,21 @@
 mch_get_shellsize()
 {
     struct ConUnit  *conUnit;
+#ifndef __amigaos4__
     char	    id_a[sizeof(struct InfoData) + 3];
-    struct InfoData *id;
+#endif
+    struct InfoData *id=0;
 
     if (!term_console)	/* not an amiga window */
-	return FAIL;
+	goto out;
 
     /* insure longword alignment */
+#ifdef __amigaos4__
+    if(!(id = AllocDosObject(DOS_INFODATA, 0)))
+	goto out;
+#else
     id = (struct InfoData *)(((long)id_a + 3L) & ~3L);
+#endif
 
     /*
      * Should make console aware of real window size, not the one we set.
@@ -983,7 +1052,7 @@
 	/* it's not an amiga window, maybe aux device */
 	/* terminal type should be set */
 	term_console = FALSE;
-	return FAIL;
+	goto out;
     }
     if (oldwindowtitle == NULL)
 	oldwindowtitle = (char_u *)wb_window->Title;
@@ -1006,6 +1075,12 @@
     }
 
     return OK;
+out:
+#ifdef __amigaos4__
+    FreeDosObject(DOS_INFODATA, id); /* Safe to pass NULL */
+#endif
+
+    return FAIL;
 }
 
 /*
@@ -1046,7 +1121,7 @@
     OUT_STR_NF(tltoa((unsigned long)n));
 }
 
-#if !defined(AZTEC_C) && !defined(__AROS__)
+#if !defined(AZTEC_C) && !defined(__AROS__) && !defined(__amigaos4__)
 /*
  * Sendpacket.c
  *
@@ -1371,8 +1446,12 @@
  *	Use and abuse as you please.
  */
 
-#define ANCHOR_BUF_SIZE (512)
-#define ANCHOR_SIZE (sizeof(struct AnchorPath) + ANCHOR_BUF_SIZE)
+#ifdef __amigaos4__
+# define	ANCHOR_BUF_SIZE	1024
+#else
+# define ANCHOR_BUF_SIZE (512)
+# define ANCHOR_SIZE (sizeof(struct AnchorPath) + ANCHOR_BUF_SIZE)
+#endif
 
     int
 mch_expandpath(gap, pat, flags)
@@ -1385,19 +1464,32 @@
     char_u		*starbuf, *sp, *dp;
     int			start_len;
     int			matches;
+#ifdef __amigaos4__
+    struct TagItem	AnchorTags[] = {
+	{ADO_Strlen, ANCHOR_BUF_SIZE},
+	{ADO_Flags, APF_DODOT|APF_DOWILD|APF_MultiAssigns},
+	{TAG_DONE, 0L}
+    };
+#endif
 
     start_len = gap->ga_len;
 
     /* Get our AnchorBase */
+#ifdef __amigaos4__
+    Anchor = AllocDosObject(DOS_ANCHORPATH, AnchorTags);
+#else
     Anchor = (struct AnchorPath *)alloc_clear((unsigned)ANCHOR_SIZE);
+#endif
     if (Anchor == NULL)
 	return 0;
 
+#ifndef __amigaos4__
     Anchor->ap_Strlen = ANCHOR_BUF_SIZE;  /* ap_Length not supported anymore */
-#ifdef APF_DODOT
+# ifdef APF_DODOT
     Anchor->ap_Flags = APF_DODOT | APF_DOWILD;	/* allow '.' for current dir */
-#else
+# else
     Anchor->ap_Flags = APF_DoDot | APF_DoWild;	/* allow '.' for current dir */
+# endif
 #endif
 
 #ifdef FEAT_ARP
@@ -1432,7 +1524,11 @@
      */
     while (Result == 0)
     {
+#ifdef __amigaos4__
+	addfile(gap, (char_u *)Anchor->ap_Buffer, flags);
+#else
 	addfile(gap, (char_u *)Anchor->ap_Buf, flags);
+#endif
 #ifdef FEAT_ARP
 	if (dos2)
 #endif
@@ -1469,7 +1565,11 @@
 #endif
 
 Return:
+#ifdef __amigaos4__
+    FreeDosObject(DOS_ANCHORPATH, Anchor);
+#else
     vim_free(Anchor);
+#endif
 
     return matches;
 }
diff --git a/src/os_amiga.h b/src/os_amiga.h
index 06e4d1c..0395bce 100644
--- a/src/os_amiga.h
+++ b/src/os_amiga.h
@@ -17,9 +17,12 @@
 #define HAVE_AVAIL_MEM
 
 #ifndef HAVE_CONFIG_H
-# ifdef AZTEC_C
+# if defined(AZTEC_C) || defined(__amigaos4__)
 #  define HAVE_STAT_H
 # endif
+# ifdef __amigaos4__
+#  define HAVE_STDARG_H
+# endif
 # define HAVE_STDLIB_H
 # define HAVE_STRING_H
 # define HAVE_FCNTL_H
@@ -34,16 +37,25 @@
 #  define HAVE_DATE_TIME
 # endif
 
-#define DFLT_ERRORFILE		"AztecC.Err"
-#define DFLT_RUNTIMEPATH "home:vimfiles,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,home:vimfiles/after"
-
-#define BASENAMELEN	26	/* Amiga */
-
-#define TEMPNAME	"t:v?XXXXXX"
-#define TEMPNAMELEN	12
-
 #endif /* HAVE_CONFIG_H */
 
+#ifndef	DFLT_ERRORFILE
+# define DFLT_ERRORFILE		"AztecC.Err"	/* Should this change? */
+#endif
+
+#ifndef	DFLT_RUNTIMEPATH
+# define DFLT_RUNTIMEPATH "home:vimfiles,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,home:vimfiles/after"
+#endif
+
+#ifndef	BASENAMELEN
+# define BASENAMELEN	26	/* Amiga */
+#endif
+
+#ifndef	TEMPNAME
+# define TEMPNAME	"t:v?XXXXXX"
+# define TEMPNAMELEN	12
+#endif
+
 #include <exec/types.h>
 #include <libraries/dos.h>
 #include <libraries/dosextens.h>
@@ -155,9 +167,9 @@
 #endif
 
 #ifdef FEAT_VIMINFO
-#ifndef VIMINFO_FILE
-# define VIMINFO_FILE	"s:.viminfo"
-#endif
+# ifndef VIMINFO_FILE
+#  define VIMINFO_FILE	"s:.viminfo"
+# endif
 #endif /* FEAT_VIMINFO */
 
 #ifndef EXRC_FILE
diff --git a/src/pty.c b/src/pty.c
index c28d78e..8d177d7 100644
--- a/src/pty.c
+++ b/src/pty.c
@@ -51,7 +51,7 @@
 # include <sys/termios.h>
 #endif
 
-#if HAVE_SYS_IOCTL_H
+#ifdef HAVE_SYS_IOCTL_H
 # include <sys/ioctl.h>
 #endif
 
@@ -69,14 +69,14 @@
 # endif
 #endif
 
-#if HAVE_UNISTD_H
+#ifdef HAVE_UNISTD_H
 # include <unistd.h>
 #endif
 
 #if HAVE_TERMIO_H
 # include <termio.h>
 #else
-# if HAVE_TERMIOS_H
+# ifdef HAVE_TERMIOS_H
 #  include <termios.h>
 # endif
 #endif
diff --git a/src/version.c b/src/version.c
index 4965c64..b59fa77 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    156,
+/**/
     155,
 /**/
     154,
