diff --git a/NEWS b/NEWS
index 79dc0bd..b45c966 100644
--- a/NEWS
+++ b/NEWS
@@ -39,6 +39,7 @@
   https://bugs.kde.org/show_bug.cgi?id=XXXXXX
 where XXXXXX is the bug number as listed below.
 
+116002  VG_(printf): Problems with justification of strings and integers
 155125  avoid cutting away file:lineno after long function name
 211926  Avoid compilation warnings in valgrind.h with -pedantic
 269360  s390x: Fix addressing mode selection for compare-and-swap
diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c
index 1e7958b..4be1762 100644
--- a/coregrind/m_debuginfo/readdwarf3.c
+++ b/coregrind/m_debuginfo/readdwarf3.c
@@ -2018,7 +2018,7 @@
       DW_FORM form = (DW_FORM)abbv->nf[nf_i].at_form;
       nf_i++;
       if (attr == 0 && form == 0) break;
-      VG_(printf)("     %18s: ", ML_(pp_DW_AT)(attr));
+      VG_(printf)("     %-18s: ", ML_(pp_DW_AT)(attr));
       /* Get the form contents, so as to print them */
       get_Form_contents( &cts, cc, &c, True, form );
       if (attr == DW_AT_sibling && cts.szB > 0) {
@@ -4451,7 +4451,7 @@
                ULong at_name = get_ULEB128( &abbv );
                ULong at_form = get_ULEB128( &abbv );
                if (at_name == 0 && at_form == 0) break;
-               TRACE_D3("    %18s %s\n", 
+               TRACE_D3("    %-18s %s\n", 
                         ML_(pp_DW_AT)(at_name), ML_(pp_DW_FORM)(at_form));
             }
          }
diff --git a/coregrind/m_debuginfo/readelf.c b/coregrind/m_debuginfo/readelf.c
index 09cd033..95e4bb0 100644
--- a/coregrind/m_debuginfo/readelf.c
+++ b/coregrind/m_debuginfo/readelf.c
@@ -2383,7 +2383,7 @@
                nobits         = a_shdr.sh_type == SHT_NOBITS; \
                vg_assert(_sec_escn.img  != NULL); \
                vg_assert(_sec_escn.ioff != DiOffT_INVALID); \
-               TRACE_SYMTAB( "%18s:  ioff %llu .. %llu\n", \
+               TRACE_SYMTAB( "%-18s:  ioff %llu .. %llu\n", \
                              _sec_name, (ULong)_sec_escn.ioff, \
                              ((ULong)_sec_escn.ioff) + _sec_escn.szB - 1); \
                /* SHT_NOBITS sections have zero size in the file. */ \
@@ -2677,7 +2677,7 @@
                   nobits         = a_shdr.sh_type == SHT_NOBITS; \
                   vg_assert(_sec_escn.img  != NULL); \
                   vg_assert(_sec_escn.ioff != DiOffT_INVALID); \
-                  TRACE_SYMTAB( "%18s: dioff %llu .. %llu\n", \
+                  TRACE_SYMTAB( "%-18s: dioff %llu .. %llu\n", \
                                 _sec_name, \
                                 (ULong)_sec_escn.ioff, \
                                 ((ULong)_sec_escn.ioff) + _sec_escn.szB - 1); \
@@ -2820,7 +2820,7 @@
                   _sec_escn.szB  = a_shdr.sh_size; \
                   vg_assert(_sec_escn.img  != NULL); \
                   vg_assert(_sec_escn.ioff != DiOffT_INVALID); \
-                  TRACE_SYMTAB( "%18s: aioff %llu .. %llu\n", \
+                  TRACE_SYMTAB( "%-18s: aioff %llu .. %llu\n", \
                                 _sec_name, \
                                 (ULong)_sec_escn.ioff, \
                                 ((ULong)_sec_escn.ioff) + _sec_escn.szB - 1); \
diff --git a/coregrind/m_debuginfo/readexidx.c b/coregrind/m_debuginfo/readexidx.c
index ab34367..727deb3 100644
--- a/coregrind/m_debuginfo/readexidx.c
+++ b/coregrind/m_debuginfo/readexidx.c
@@ -388,7 +388,7 @@
    ExtabData;
 
 static void ppExtabData ( const ExtabData* etd ) {
-   VG_(printf)("ExtabData{%12s 0x%08x}", showExtabCmd(etd->cmd), etd->data);
+   VG_(printf)("ExtabData{%-12s 0x%08x}", showExtabCmd(etd->cmd), etd->data);
 }
 
 
diff --git a/coregrind/m_debuglog.c b/coregrind/m_debuglog.c
index 47a2750..7cb1ee5 100644
--- a/coregrind/m_debuglog.c
+++ b/coregrind/m_debuglog.c
@@ -589,7 +589,7 @@
    }
 
    extra = width - len;
-   if (flags & VG_MSG_LJUSTIFY) {
+   if (! (flags & VG_MSG_LJUSTIFY)) {
       ret += extra;
       for (i = 0; i < extra; i++)
          send(' ', send_arg2);
@@ -597,7 +597,7 @@
    ret += len;
    for (i = 0; i < len; i++)
       send(MAYBE_TOUPPER(str[i]), send_arg2);
-   if (!(flags & VG_MSG_LJUSTIFY)) {
+   if (flags & VG_MSG_LJUSTIFY) {
       ret += extra;
       for (i = 0; i < extra; i++)
          send(' ', send_arg2);
@@ -658,7 +658,10 @@
                        Bool capitalised,
                        ULong p )
 {
-   HChar  buf[40];
+   /* To print an ULong base 2 needs 64 characters. If commas are requested,
+      add 21. Plus 1 for a possible sign plus 1 for \0. Makes 87 -- so let's
+      say 90. The size of BUF needs to be max(90, WIDTH + 1) */
+   HChar  buf[width + 1 > 90 ? width + 1 : 90];
    Int    ind = 0;
    Int    i, nc = 0;
    Bool   neg = False;
@@ -693,11 +696,6 @@
 
    if (width > 0 && !(flags & VG_MSG_LJUSTIFY)) {
       for(; ind < width; ind++) {
-         /* vg_assert(ind < 39); */
-         if (ind > 39) {
-            buf[39] = 0;
-            break;
-         }
          buf[ind] = (flags & VG_MSG_ZJUSTIFY) ? '0': ' ';
       }
    }
diff --git a/coregrind/m_gdbserver/target.c b/coregrind/m_gdbserver/target.c
index 1f6117c..e248228 100644
--- a/coregrind/m_gdbserver/target.c
+++ b/coregrind/m_gdbserver/target.c
@@ -116,7 +116,7 @@
          new_regs[i*n + r].offset = i*reg_set_len + reg_defs[r].offset;
          new_regs[i*n + r].size = reg_defs[r].size;
          dlog(1,
-              "%10s Nr %d offset(bit) %d offset(byte) %d  size(bit) %d\n",
+              "%-10s Nr %d offset(bit) %d offset(byte) %d  size(bit) %d\n",
               new_regs[i*n + r].name, i*n + r, new_regs[i*n + r].offset,
               (new_regs[i*n + r].offset) / 8, new_regs[i*n + r].size);
       }  
diff --git a/coregrind/m_mallocfree.c b/coregrind/m_mallocfree.c
index a6a6705..7349849 100644
--- a/coregrind/m_mallocfree.c
+++ b/coregrind/m_mallocfree.c
@@ -626,7 +626,7 @@
    for (i = 0; i < VG_N_ARENAS; i++) {
       Arena* a = arenaId_to_ArenaP(i);
       VG_(message)(Vg_DebugMsg,
-                   "%8s: %8lu/%8lu  max/curr mmap'd, "
+                   "%-8s: %8lu/%8lu  max/curr mmap'd, "
                    "%llu/%llu unsplit/split sb unmmap'd,  "
                    "%8lu/%8lu max/curr,  "
                    "%10llu/%10llu totalloc-blocks/bytes,"
@@ -1358,7 +1358,7 @@
 
    if (VG_(clo_verbosity) > 2) 
       VG_(message)(Vg_DebugMsg,
-                   "%8s: %2d sbs, %5d bs, %2d/%-2d free bs, "
+                   "%-8s: %2d sbs, %5d bs, %2d/%-2d free bs, "
                    "%7ld mmap, %7ld loan\n",
                    a->name,
                    superblockctr,
diff --git a/coregrind/m_redir.c b/coregrind/m_redir.c
index 8f7a4e0..a4738e2 100644
--- a/coregrind/m_redir.c
+++ b/coregrind/m_redir.c
@@ -1694,7 +1694,7 @@
 static void show_spec ( const HChar* left, const Spec* spec )
 {
    VG_(message)( Vg_DebugMsg, 
-                 "%s%25s %30s %s-> (%04d.%d) 0x%08llx\n",
+                 "%s%-25s %-30s %s-> (%04d.%d) 0x%08llx\n",
                  left,
                  spec->from_sopatt, spec->from_fnpatt,
                  spec->isWrap ? "W" : "R",
@@ -1717,7 +1717,7 @@
    ok = VG_(get_fnname_w_offset)(act->to_addr, &name2);
    if (!ok) name2 = "???";
 
-   VG_(message)(Vg_DebugMsg, "%s0x%08llx (%20s) %s-> (%04d.%d) 0x%08llx %s\n", 
+   VG_(message)(Vg_DebugMsg, "%s0x%08llx (%-20s) %s-> (%04d.%d) 0x%08llx %s\n", 
                              left, 
                              (ULong)act->from_addr, name1,
                              act->isWrap ? "W" : "R",
diff --git a/coregrind/m_seqmatch.c b/coregrind/m_seqmatch.c
index ac4277b..57ca3b0 100644
--- a/coregrind/m_seqmatch.c
+++ b/coregrind/m_seqmatch.c
@@ -227,7 +227,7 @@
 //{
 //   Test* t;
 //   for (t = tests; t->patt; t++) {
-//     printf("%10s %6s  %s\n",
+//     printf("%-10s %-6s  %s\n",
 //            t->patt, t->input, 
 //            match_string_all((UChar*)t->patt,(UChar*)t->input,True) 
 //            == t->xres
diff --git a/lackey/lk_main.c b/lackey/lk_main.c
index b2ca1ff..bbd4983 100644
--- a/lackey/lk_main.c
+++ b/lackey/lk_main.c
@@ -388,7 +388,7 @@
    VG_(umsg)("   Type        Loads       Stores       AluOps\n");
    VG_(umsg)("   -------------------------------------------\n");
    for (typeIx = 0; typeIx < N_TYPES; typeIx++) {
-      VG_(umsg)("   %4s %'12llu %'12llu %'12llu\n",
+      VG_(umsg)("   %-4s %'12llu %'12llu %'12llu\n",
                 nameOfTypeIndex( typeIx ),
                 detailCounts[OpLoad ][typeIx],
                 detailCounts[OpStore][typeIx],
diff --git a/memcheck/mc_leakcheck.c b/memcheck/mc_leakcheck.c
index f02e75c..6b5e844 100644
--- a/memcheck/mc_leakcheck.c
+++ b/memcheck/mc_leakcheck.c
@@ -1467,7 +1467,7 @@
       for (i = 0; i < N_LEAK_CHECK_HEURISTICS; i++)
          if (old_blocks_heuristically_reachable[i] > 0 
              || MC_(blocks_heuristically_reachable)[i] > 0)
-            VG_(umsg)("                        %19s: "
+            VG_(umsg)("                        %-19s: "
                       "%'lu%s bytes in %'lu%s blocks\n",
                       pp_heuristic(i),
                       MC_(bytes_heuristically_reachable)[i], 
diff --git a/none/tests/unit_debuglog.c b/none/tests/unit_debuglog.c
index 1fecb30..1bd1d2a 100644
--- a/none/tests/unit_debuglog.c
+++ b/none/tests/unit_debuglog.c
@@ -18,7 +18,7 @@
 
 void run(const char *format, ...)
 {
-  int n, num_stars, i1, i2;
+  int n, num_stars;
   const char *p;
   printf_buf buf;
   va_list vargs;
@@ -30,20 +30,7 @@
 
   va_start(vargs, format);
   fprintf(stderr, "%s\tprintf =   ", format);
-  switch (num_stars) {
-  case 0:
-    n = fprintf(stderr, format, va_arg(vargs, Double));
-    break;
-  case 1:
-    i1 = va_arg(vargs, int);
-    n = fprintf(stderr, format, i1, va_arg(vargs, Double));
-    break;
-  case 2:
-    i1 = va_arg(vargs, int);
-    i2 = va_arg(vargs, int);
-    n = fprintf(stderr, format, i1, i2, va_arg(vargs, Double));
-    break;
-  }
+  n = vfprintf(stderr, format, vargs);
   fprintf(stderr, "\twrote %3d chars\n", n);
   va_end(vargs);
 
@@ -59,7 +46,6 @@
   fprintf(stderr, "\twrote %3d chars\n", n);
 }
 
-
 int main(int argc, char *argv[])
 {
   double value;
@@ -138,11 +124,30 @@
   run("|%*.*f|", 20, 5, value);
   run("|%*.*f|", 1, 4, value);
 
-
   fprintf(stderr, "\n");
   fprintf(stderr, "...testing left justification\n");
   value = 3.1415;
   run("|%10f|", value);
   run("|%-10f|", value);
+
+  fprintf(stderr, "\n");
+  fprintf(stderr, "...testing strings\n");
+  const char *str = "abcd";
+  run("|%s|", str);
+  run("|%9s|", str);
+  run("|%-9s|", str);
+  run("|%*s|", 6, str);
+  
+  fprintf(stderr, "\n");
+  fprintf(stderr, "...testing integers\n");
+  long long ival = -1004005;
+  run("|%lld|", ival);
+  //  runint("|%'lld|", ival);     // locale specific (LC_NUMERIC)
+  run("|%15lld|", ival);
+  run("|%-15lld|", ival);
+  //  runint("|%'-15lld|", ival);  // locale specific (LC_NUMERIC)
+  run("|%100lld|", ival);
+  run("|%*lld|", 13, ival);
+
   return 0;
 }
diff --git a/none/tests/unit_debuglog.stderr.exp b/none/tests/unit_debuglog.stderr.exp
index 7e8e87a..c8dc03f 100644
--- a/none/tests/unit_debuglog.stderr.exp
+++ b/none/tests/unit_debuglog.stderr.exp
@@ -105,3 +105,25 @@
 |%10f|	debuglog = |  3.141500|	wrote  12 chars
 |%-10f|	printf =   |3.141500  |	wrote  12 chars
 |%-10f|	debuglog = |3.141500  |	wrote  12 chars
+
+...testing strings
+|%s|	printf =   |abcd|	wrote   6 chars
+|%s|	debuglog = |abcd|	wrote   6 chars
+|%9s|	printf =   |     abcd|	wrote  11 chars
+|%9s|	debuglog = |     abcd|	wrote  11 chars
+|%-9s|	printf =   |abcd     |	wrote  11 chars
+|%-9s|	debuglog = |abcd     |	wrote  11 chars
+|%*s|	printf =   |  abcd|	wrote   8 chars
+|%*s|	debuglog = |  abcd|	wrote   8 chars
+
+...testing integers
+|%lld|	printf =   |-1004005|	wrote  10 chars
+|%lld|	debuglog = |-1004005|	wrote  10 chars
+|%15lld|	printf =   |       -1004005|	wrote  17 chars
+|%15lld|	debuglog = |       -1004005|	wrote  17 chars
+|%-15lld|	printf =   |-1004005       |	wrote  17 chars
+|%-15lld|	debuglog = |-1004005       |	wrote  17 chars
+|%100lld|	printf =   |                                                                                            -1004005|	wrote 102 chars
+|%100lld|	debuglog = |                                                                                            -1004005|	wrote 102 chars
+|%*lld|	printf =   |     -1004005|	wrote  15 chars
+|%*lld|	debuglog = |     -1004005|	wrote  15 chars
