diff --git a/.travis.yml b/.travis.yml
index ab636ea..c5f7fd2 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,14 +9,20 @@ script:
 scala:
   - 2.10.7
   - 2.11.12
-  - 2.12.4
-  - 2.13.0-M2
+  - 2.12.6
+  - 2.13.0-M3
+  - 2.13.0-M4
 jdk:
   - oraclejdk8
 env:
-  - SCALAJS_VERSION=0.6.21
-  - SCALAJS_VERSION=1.0.0-M1
-  - SCALAJS_VERSION=1.0.0-M2
+  - SCALAJS_VERSION=0.6.23
+  - SCALAJS_VERSION=1.0.0-M3
+matrix:
+  exclude:
+    - scala: 2.10.7
+      env: SCALAJS_VERSION=1.0.0-M3
+    - scala: 2.13.0-M4
+      env: SCALAJS_VERSION=1.0.0-M3
 
 cache:
   directories:
diff --git a/build.sbt b/build.sbt
index 9bb40fa..cf0ab55 100644
--- a/build.sbt
+++ b/build.sbt
@@ -1,6 +1,6 @@
 import sbtcrossproject.crossProject
 
-crossScalaVersions in ThisBuild := Seq("2.12.4", "2.11.12", "2.10.7", "2.13.0-M2")
+crossScalaVersions in ThisBuild := Seq("2.12.6", "2.11.12", "2.10.7", "2.13.0-M3", "2.13.0-M4")
 scalaVersion in ThisBuild := (crossScalaVersions in ThisBuild).value.head
 
 val commonSettings: Seq[Setting[_]] = Seq(
diff --git a/project/build.properties b/project/build.properties
index c091b86..133a8f1 100644
--- a/project/build.properties
+++ b/project/build.properties
@@ -1 +1 @@
-sbt.version=0.13.16
+sbt.version=0.13.17
diff --git a/project/build.sbt b/project/build.sbt
index 53b957d..bfb11fe 100644
--- a/project/build.sbt
+++ b/project/build.sbt
@@ -1,13 +1,7 @@
 val scalaJSVersion =
-  Option(System.getenv("SCALAJS_VERSION")).getOrElse("0.6.21")
+  Option(System.getenv("SCALAJS_VERSION")).getOrElse("0.6.23")
 
 addSbtPlugin("org.scala-js" % "sbt-scalajs" % scalaJSVersion)
-
-{
-  if (scalaJSVersion != "1.0.0-M1")
-    addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "0.3.0")
-  else
-    Nil
-}
+addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "0.3.0")
 
 addSbtPlugin("org.scalastyle" % "scalastyle-sbt-plugin" % "0.8.0")
diff --git a/src/main/scala/java/util/logging/Formatter.scala b/src/main/scala/java/util/logging/Formatter.scala
index c2c00bb..80cfaad 100644
--- a/src/main/scala/java/util/logging/Formatter.scala
+++ b/src/main/scala/java/util/logging/Formatter.scala
@@ -1,5 +1,7 @@
 package java.util.logging
 
+import java.lang.StringBuilder
+
 abstract class Formatter protected () {
 
   def format(record: LogRecord): String
@@ -17,7 +19,7 @@ abstract class Formatter protected () {
       // Instead we'll do simple text replacement, very imperative
       var msgAccumulator = new StringBuilder()
       var inParam = false
-      var paramInFlight:StringBuilder = null
+      var paramInFlight: StringBuilder = null
       var substitutionFailure = false // track failure to break the loop
       var i = 0
 
@@ -31,13 +33,13 @@ abstract class Formatter protected () {
           paramInFlight = new StringBuilder()
         } else if (inParam && currentChar != '}') {
           // accumulate the param
-          paramInFlight += currentChar
+          paramInFlight.append(currentChar)
         } else if (currentChar == '}') {
           // end of param, replace placeholder by value if possible
           inParam = false
           val (failed, replacement) = {
             try {
-              val index = paramInFlight.toInt
+              val index = paramInFlight.toString().toInt
               if (index >= 0 && index < params.length) {
                 (false, params(index).toString)
               } else if (index > 0) {
@@ -55,15 +57,17 @@ abstract class Formatter protected () {
 
           // The JVM will fail if e.g. there are bogus params and would not replace
           // any parameter
-          if (failed) substitutionFailure = failed
-          else msgAccumulator ++= replacement
+          if (failed)
+            substitutionFailure = failed
+          else
+            msgAccumulator.append(replacement)
         } else {
-          msgAccumulator += currentChar
+          msgAccumulator.append(currentChar)
         }
       }
 
       if (substitutionFailure || inParam) msg
-      else msgAccumulator.result()
+      else msgAccumulator.toString()
     } else {
       msg
     }
