diff --git a/Makefile b/Makefile
index 9d72deaa81308074ff22585466f8fd4a59fec8e0..8a375c70a4c9c74a3a44e509457bf7a1bd783754 100644
--- a/Makefile
+++ b/Makefile
@@ -40,8 +40,8 @@
 
 # Set default component and target.
 # Alternative possible target is RISC_OSLib
-COMPONENT .= SharedCLibrary
-TARGET    .= CLib
+COMPONENT ?= SharedCLibrary
+TARGET    ?= CLib
 
 #
 # Paths
@@ -121,6 +121,12 @@ VSFLAGS =\
 ASFLAGS =\
  ${SCL_APCS}
 
+# Setting UROM on the command-line for rlib
+UROM_DEFS =\
+ -PD "UROM SETL {FALSE}"
+UROM_ROM_DEFS =\
+ -PD "UROM SETL {TRUE}"
+
 VPATH = @ kernel clib rlib
 
 .SUFFIXES:  .o .o_rl .m_o_rl .rm_o .rm_o_rl
@@ -440,7 +446,6 @@ clean_all:
 	${RM} s.abssym
 	${RM} s.c_abssym
 	${RM} s.a_abssym
-	${RM} rlib.s.asmdefs
 	${WIPE} lib.* ${WFLAGS}
 	@echo ${COMPONENT}: cleaned
 
@@ -697,8 +702,7 @@ rm_o.clib:  clib.s.cl_obj_r
 	${OBJASM} ${AFLAGS} ${ASFLAGS} ${OPTIONS} -from clib.s.cl_obj_r -to $@
 
 rm_o.cl_modbody: clib.s.cl_mod_r
-	${CP} rlib.s.rom_defs rlib.s.asmdefs ${CPFLAGS}
-	${OBJASM} ${AFLAGS} ${ASFLAGS} ${OPTIONS} -from clib.s.cl_mod_r -to $@
+	${OBJASM} ${AFLAGS} ${ASFLAGS} ${OPTIONS} ${UROM_ROM_DEFS} -from clib.s.cl_mod_r -to $@
 
 rm_o_rl.rl_modbody: rlib.s.rl_mod_r
 	${OBJASM} ${AFLAGS} ${ASFLAGS} ${OPTIONS} -from rlib.s.rl_mod_r -to $@
@@ -739,42 +743,24 @@ rm_o.string: c.string
 #
 # Special case: use "rom_defs" for ROM library (o_rm), "defs" for the others
 # Note: New Assembler - could use -PreDefine "UROM SETL {FALSE}"
-#
+
 o_rl.swi: rlib.s.swi
-	${CP} rlib.s.defs rlib.s.asmdefs ${CPFLAGS}
-	${OBJASM} rlib.s.swi o_rl.swi ${AFLAGS}
+	${OBJASM} ${UROM_DEFS} rlib.s.swi o_rl.swi ${AFLAGS}
 
 o_rl.poll: rlib.s.poll
-	${CP} rlib.s.defs rlib.s.asmdefs ${CPFLAGS}
-	${OBJASM} rlib.s.poll o_rl.poll ${AFLAGS}
-
-o_rl.bastxt: rlib.s.bastxt
-	${CP} rlib.s.defs rlib.s.asmdefs ${CPFLAGS}
-	${OBJASM} rlib.s.bastxt o_rl.bastxt ${AFLAGS}
+	${OBJASM} ${UROM_DEFS} rlib.s.poll o_rl.poll ${AFLAGS}
 
 m_o_rl.swi: rlib.s.swi
-	${CP} rlib.s.defs rlib.s.asmdefs ${CPFLAGS}
-	${OBJASM} rlib.s.swi m_o_rl.swi ${AFLAGS}
+	${OBJASM} ${UROM_DEFS} rlib.s.swi m_o_rl.swi ${AFLAGS}
 
 m_o_rl.poll: rlib.s.poll
-	${CP} rlib.s.defs rlib.s.asmdefs ${CPFLAGS}
-	${OBJASM} rlib.s.poll m_o_rl.poll ${AFLAGS}
-
-m_o_rl.bastxt: rlib.s.bastxt
-	${CP} rlib.s.defs rlib.s.asmdefs ${CPFLAGS}
-	${OBJASM} rlib.s.bastxt m_o_rl.bastxt ${AFLAGS}
+	${OBJASM} ${UROM_DEFS} rlib.s.poll m_o_rl.poll ${AFLAGS}
 
 rm_o_rl.swi: rlib.s.swi
-	${CP} rlib.s.rom_defs rlib.s.asmdefs ${CPFLAGS}
-	${OBJASM} rlib.s.swi rm_o_rl.swi ${AFLAGS} ${OPTIONS}
+	${OBJASM} ${UROM_ROM_DEFS} rlib.s.swi rm_o_rl.swi ${AFLAGS} ${OPTIONS}
 
 rm_o_rl.poll: rlib.s.poll
-	${CP} rlib.s.rom_defs rlib.s.asmdefs ${CPFLAGS}
-	${OBJASM} rlib.s.poll rm_o_rl.poll ${AFLAGS} ${OPTIONS}
-
-rm_o_rl.bastxt: rlib.s.bastxt
-	${CP} rlib.s.rom_defs rlib.s.asmdefs ${CPFLAGS}
-	${OBJASM} rlib.s.bastxt rm_o_rl.bastxt ${AFLAGS} ${OPTIONS}
+	${OBJASM} ${UROM_ROM_DEFS} rlib.s.poll rm_o_rl.poll ${AFLAGS} ${OPTIONS}
 
 #
 # trace separated out to allow defining of TRACE
diff --git a/VersionASM b/VersionASM
index 532d2baca5a459b103bf02cf0c2ef96b21f187bc..fed78966566a1019f79146896ae5f0596f25f019 100644
--- a/VersionASM
+++ b/VersionASM
@@ -11,14 +11,14 @@
                         GBLS    Module_HelpVersion
                         GBLS    Module_ComponentName
                         GBLS    Module_ComponentPath
-Module_MajorVersion     SETS    "5.28"
-Module_Version          SETA    528
+Module_MajorVersion     SETS    "5.29"
+Module_Version          SETA    529
 Module_MinorVersion     SETS    ""
-Module_Date             SETS    "02 Mar 2001"
-Module_ApplicationDate2 SETS    "02-Mar-01"
-Module_ApplicationDate4 SETS    "02-Mar-2001"
+Module_Date             SETS    "06 Apr 2001"
+Module_ApplicationDate2 SETS    "06-Apr-01"
+Module_ApplicationDate4 SETS    "06-Apr-2001"
 Module_ComponentName    SETS    "RISC_OSLib"
 Module_ComponentPath    SETS    "RiscOS/Sources/Lib/RISC_OSLib"
-Module_FullVersion      SETS    "5.28"
-Module_HelpVersion      SETS    "5.28 (02 Mar 2001)"
+Module_FullVersion      SETS    "5.29"
+Module_HelpVersion      SETS    "5.29 (06 Apr 2001)"
                         END
diff --git a/VersionNum b/VersionNum
index 6b7b829cf6b3224edbf403dbc960c79405535380..9e4161f2e652ff1a34a5231810bf4b4f9d4c61c5 100644
--- a/VersionNum
+++ b/VersionNum
@@ -1,22 +1,22 @@
-/* (5.28)
+/* (5.29)
  *
  * This file is automatically maintained by srccommit, do not edit manually.
  *
  */
-#define Module_MajorVersion_CMHG        5.28
+#define Module_MajorVersion_CMHG        5.29
 #define Module_MinorVersion_CMHG        
-#define Module_Date_CMHG                02 Mar 2001
+#define Module_Date_CMHG                06 Apr 2001
 
-#define Module_MajorVersion             "5.28"
-#define Module_Version                  528
+#define Module_MajorVersion             "5.29"
+#define Module_Version                  529
 #define Module_MinorVersion             ""
-#define Module_Date                     "02 Mar 2001"
+#define Module_Date                     "06 Apr 2001"
 
-#define Module_ApplicationDate2         "02-Mar-01"
-#define Module_ApplicationDate4         "02-Mar-2001"
+#define Module_ApplicationDate2         "06-Apr-01"
+#define Module_ApplicationDate4         "06-Apr-2001"
 
 #define Module_ComponentName            "RISC_OSLib"
 #define Module_ComponentPath            "RiscOS/Sources/Lib/RISC_OSLib"
 
-#define Module_FullVersion              "5.28"
-#define Module_HelpVersion              "5.28 (02 Mar 2001)"
+#define Module_FullVersion              "5.29"
+#define Module_HelpVersion              "5.29 (06 Apr 2001)"
diff --git a/c/string b/c/string
index 7da4c21e1c434d3d74223d6386fe38879b4afbf3..3084dbd7bae1462240011f32da7b6581174cdd0a 100644
--- a/c/string
+++ b/c/string
@@ -226,6 +226,7 @@ int strcmp(const char *a, const char *b) /* lexical comparison on strings */
 #ifdef _copywords
 #ifdef BYTESEX_EVEN
 /* Improved little-endian ARM strcmp code by Ian Rickards, ARM Ltd. */
+/* sbrodie (06/04/01): unfortunately, it breaks strcmp() semantics required by the library definition */
     if ((((int)a | (int)b) & 3) == 0)
     {   int w1, w2, res, rc;
         nullbyte_prologue_();
@@ -239,6 +240,7 @@ int strcmp(const char *a, const char *b) /* lexical comparison on strings */
         return 0;
 
 strcmp_checkbytes:
+#  ifdef WANT_ARMS_BROKEN_STRCMP_FOR_TOP_BIT_SET_CHARACTERS
 /* carry propagation in subtract means that no subtract-per-byte is needed */
         rc = res << 24;
         if (rc != 0) return rc;
@@ -253,6 +255,23 @@ strcmp_checkbytes:
         if ((w1 & 0xff0000) == 0) return rc;
 
         return res;
+#  else  /* WANT_ARMS_BROKEN_STRCMP_FOR_TOP_BIT_SET_CHARACTERS */
+        /* res is guaranteed non-zero, so rc will not be zero, therefore the loop
+         * will find the bit eventually.  The shifting is done to ensure that if it
+         * is the top-byte that contains the difference, we don't lose the sign bit
+         * on the subtraction.  Right-shift on signed integers implementation defined,
+         * but because we mask w1 and w2 with res, whether ASL or LSL is used is irrelevant.
+         */
+        rc = res & -res;
+        res = 0xFF;
+        for (;;) {
+          if (rc & res) return (w1 & res) - (w2 & res);
+          w1 >>= 1;
+          w2 >>= 1;
+          rc >>= 1;
+          res <<= 7;
+        }
+#  endif /* WANT_ARMS_BROKEN_STRCMP_FOR_TOP_BIT_SET_CHARACTERS */
 #else
     if ((((int)a | (int)b) & 3) == 0)
     {   int w1, w2;
@@ -262,6 +281,9 @@ strcmp_checkbytes:
             w2 = *(int *)b, b += 4;
         } while (w1 == w2 && !word_has_nullbyte(w1));
 
+        /* sbrodie added note: it gets away with these implementation-defined right
+         * shifts only because of the masking with 0xff.
+         */
         for (;;)
         {   char c1 = (w1 >> 24) & 0xff, c2 = (w2 >> 24) & 0xff;
             int d = c1 - c2;
diff --git a/clib/s/cl_body b/clib/s/cl_body
index a8fc54b6b041b6e46b5e7c3b076aae5451394349..5a0f957b9703b01060847d4a9547f0924498fae7 100644
--- a/clib/s/cl_body
+++ b/clib/s/cl_body
@@ -22,7 +22,6 @@
 ;
 
         GET     s.h_Stack
-        GET     rlib.s.asmdefs
 
         GET     Hdr:Wimp
         GET     Hdr:TaskWindow
diff --git a/rlib/c/res b/rlib/c/res
index f65d97966475db0a16bfa624953a6320d8b40eb4..baf4564b7276bd2ab836766e3d698a58522b84a3 100644
--- a/rlib/c/res
+++ b/rlib/c/res
@@ -72,8 +72,10 @@ BOOL res_findname(const char *leafname, char *buf /*out*/)
   str.action = 5;
   str.name = buf;
   e = os_file(&str);
-  if (e && e->errnum == 0xCC) {
-    /* File name 'contents of buf' not recognised - could be illegal path */
+  if (e && e->errnum == 0xCC || !e && str.action == 0) {
+    /* File name 'contents of buf' not recognised - could be illegal path,
+     * or file not found, so try using $Dir instead.
+     */
     sprintf(buf, "<%s$Dir>.%s", progname, leafname);
   }
 
diff --git a/rlib/s/bastxt b/rlib/s/bastxt
index efe017f13d2e6806d1b3cac1cb247aaf2bf1c47e..d09fd55c8c9a92f6538095d7b4709b5bc346f58c 100644
--- a/rlib/s/bastxt
+++ b/rlib/s/bastxt
@@ -24,7 +24,6 @@
 
         GBLL    ModeMayBeNonUser
 ModeMayBeNonUser   SETL  {FALSE}
-        GET     rlib.s.asmdefs
         GET     s.h_Brazil
 
         AREA    |C$$code|, CODE, READONLY
diff --git a/rlib/s/defs b/rlib/s/defs
deleted file mode 100644
index 2c23dd2fddd81afefd3aad23f92b87b9f217fa77..0000000000000000000000000000000000000000
--- a/rlib/s/defs
+++ /dev/null
@@ -1,18 +0,0 @@
-; Copyright 1996 Acorn Computers Ltd
-;
-; Licensed under the Apache License, Version 2.0 (the "License");
-; you may not use this file except in compliance with the License.
-; You may obtain a copy of the License at
-;
-;     http://www.apache.org/licenses/LICENSE-2.0
-;
-; Unless required by applicable law or agreed to in writing, software
-; distributed under the License is distributed on an "AS IS" BASIS,
-; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-; See the License for the specific language governing permissions and
-; limitations under the License.
-;
-                GBLL    UROM
-UROM            SETL    {FALSE}
-
-                END
diff --git a/rlib/s/rom_defs b/rlib/s/rom_defs
deleted file mode 100644
index 85580344e33a7ecd441c245836e66b75a33f8d54..0000000000000000000000000000000000000000
--- a/rlib/s/rom_defs
+++ /dev/null
@@ -1,18 +0,0 @@
-; Copyright 1996 Acorn Computers Ltd
-;
-; Licensed under the Apache License, Version 2.0 (the "License");
-; you may not use this file except in compliance with the License.
-; You may obtain a copy of the License at
-;
-;     http://www.apache.org/licenses/LICENSE-2.0
-;
-; Unless required by applicable law or agreed to in writing, software
-; distributed under the License is distributed on an "AS IS" BASIS,
-; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-; See the License for the specific language governing permissions and
-; limitations under the License.
-;
-                GBLL    UROM
-UROM            SETL    {TRUE}
-
-                END
diff --git a/rlib/s/swi b/rlib/s/swi
index 3c6e663cc9546c6c9ad17383937a1c68a882a70e..bfbf5a43b2c73f96f172fafce8cb17aaaed82dce 100644
--- a/rlib/s/swi
+++ b/rlib/s/swi
@@ -52,8 +52,6 @@ XOS_MASK      * &00020000 ; mask to make a swi a RISC OS V-error SWI
 ; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 ; Register names
 
-        GET     rlib.s.asmdefs
-
 ;whether to avoid dynamic code for swi veneers
         GBLL    StaticSWIVeneer
 StaticSWIVeneer  SETL StrongARM :LAND: {TRUE}