diff --git a/src/libregexp/regaux.c b/src/libregexp/regaux.c
index 956c1eb..b854b5a 100644
--- a/src/libregexp/regaux.c
+++ b/src/libregexp/regaux.c
@@ -30,19 +30,27 @@
 extern Relist*
 _renewthread(Relist *lp,	/* _relist to add to */
 	Reinst *ip,		/* instruction to add */
+	int ms,
 	Resublist *sep)		/* pointers to subexpressions */
 {
 	Relist *p;
 
 	for(p=lp; p->inst; p++){
 		if(p->inst == ip){
-			if((sep)->m[0].s.sp < p->se.m[0].s.sp)
-				p->se = *sep;
+			if(sep->m[0].s.sp < p->se.m[0].s.sp){
+				if(ms > 1)
+					p->se = *sep;
+				else
+					p->se.m[0] = sep->m[0];
+			}
 			return 0;
 		}
 	}
 	p->inst = ip;
-	p->se = *sep;
+	if(ms > 1)
+		p->se = *sep;
+	else
+		p->se.m[0] = sep->m[0];
 	(++p)->inst = 0;
 	return p;
 }
@@ -54,6 +62,7 @@
 extern Relist*
 _renewemptythread(Relist *lp,	/* _relist to add to */
 	Reinst *ip,		/* instruction to add */
+	int ms,
 	char *sp)		/* pointers to subexpressions */
 {
 	Relist *p;
@@ -61,16 +70,43 @@
 	for(p=lp; p->inst; p++){
 		if(p->inst == ip){
 			if(sp < p->se.m[0].s.sp) {
-				memset((void *)&p->se, 0, sizeof(p->se));
+				if(ms > 1)
+					memset(&p->se, 0, sizeof(p->se));
 				p->se.m[0].s.sp = sp;
 			}
 			return 0;
 		}
 	}
 	p->inst = ip;
-	memset((void *)&p->se, 0, sizeof(p->se));
+	if(ms > 1)
+		memset(&p->se, 0, sizeof(p->se));
 	p->se.m[0].s.sp = sp;
 	(++p)->inst = 0;
 	return p;
 }
 
+extern Relist*
+_rrenewemptythread(Relist *lp,	/* _relist to add to */
+	Reinst *ip,		/* instruction to add */
+	int ms,
+	Rune *rsp)		/* pointers to subexpressions */
+{
+	Relist *p;
+
+	for(p=lp; p->inst; p++){
+		if(p->inst == ip){
+			if(rsp < p->se.m[0].s.rsp) {
+				if(ms > 1)
+					memset(&p->se, 0, sizeof(p->se));
+				p->se.m[0].s.rsp = rsp;
+			}
+			return 0;
+		}
+	}
+	p->inst = ip;
+	if(ms > 1)
+		memset(&p->se, 0, sizeof(p->se));
+	p->se.m[0].s.rsp = rsp;
+	(++p)->inst = 0;
+	return p;
+}
