diff --git a/src/modules/sprintf/sprintf.c b/src/modules/sprintf/sprintf.c
index b65f852714c18ab3b8807168b22107e6e9ea7e60..60525b2e352e372548eef244ee2bc924144c4a30 100644
--- a/src/modules/sprintf/sprintf.c
+++ b/src/modules/sprintf/sprintf.c
@@ -320,9 +320,15 @@ INLINE static int do_one(struct format_info *f)
     rest=f->b;
     for(d=0;rest[d] && e;d++)
     {
+#if 0
+      if(rest != f->b)
+	fix_field(" ",1,0,1," ",1,0);
+#endif
+
       while(rest[d] && rest[d]!='\n') d++;
       fix_field(rest,d,f->flags,f->column_width,f->pad_string,
 		f->pad_length,f->pos_pad);
+
       e--;
       rest+=d;
       d=-1;
@@ -340,6 +346,11 @@ INLINE static int do_one(struct format_info *f)
     rest=f->b;
     for(d=0;*rest && d<col;d++)
     {
+#if 0
+      if(rest != f->b)
+	fix_field(" ",1,0,1," ",1,0);
+#endif
+
       for(e=0;rest[e] && rest[e]!='\n';e++);
       fix_field(rest,e,f->flags,f->column_width,
 		f->pad_string,f->pad_length,f->pos_pad);
@@ -718,11 +729,13 @@ static string low_pike_sprintf(char *format,
   for(f=fsp;f>start;f--)
   {
     if(f->flags & WIDTH_OF_DATA) f->width=f->len;
+
     if(((f->flags & INVERSE_COLUMN_MODE) && !f->column_width) ||
        (f->flags & COLUMN_MODE))
     {
       int max_len,nr,columns;
-      for(max_len=nr=tmp=e=0;e<f->len;e++)
+      tmp=1;
+      for(max_len=nr=e=0;e<f->len;e++)
       {
 	if(f->b[e]=='\n')
 	{
diff --git a/src/modules/sprintf/testsuite.in b/src/modules/sprintf/testsuite.in
index cb17979af2d684f43a425ad71f1a8c74b42b34d1..a1681e4b011a12d19411892211843f0b0fb89a70 100644
--- a/src/modules/sprintf/testsuite.in
+++ b/src/modules/sprintf/testsuite.in
@@ -39,8 +39,10 @@ test_eq(sprintf("%-2d",2),"2 ")
 test_eq(sprintf("%|3d",2)," 2 ")
 test_eq(sprintf("%-=3s","f o bar gaz"),"f o\nbar\ngaz")
 dnl test_eq(sprintf("%/3s","f o bargaz"),"f o\nbar\ngaz")
-dnl test_true(stringp(sprintf("%3#s","f\no\nbargaz\nonk")))
-dnl test_true(stringp(sprintf("%3$s","f\no\nbargaz\nonk")))
+test_true(stringp(sprintf("%3#s","f\no\nbargaz\nonk")))
+test_true(stringp(sprintf("%3$s","f\no\nbargaz\nonk")))
+test_eq(sprintf("%-$79s\n","foo\nbar\ngazonk"),"foo    bar    gazonk\n")
+
 test_eq(sprintf("%*d",3,3),"  3")
 test_eq(sprintf("%'FOO'10s","BAR"),"FOOFOOFBAR")
 test_eq(sprintf("%d %<d %<d",2),"2 2 2")