diff --git a/jackson-bom-pom.xml b/jackson-bom-pom.xml
new file mode 100644
index 000000000..1214dc73b
--- /dev/null
+++ b/jackson-bom-pom.xml
@@ -0,0 +1,288 @@
+
+
+ 4.0.0
+
+
+ com.fasterxml.jackson
+ jackson-parent
+ 2.9.pr1b
+
+
+ jackson-bom
+ 2.9.0.pr2-SNAPSHOT
+ pom
+
+ https://github.com/FasterXML/jackson-bom
+
+ scm:git:git@github.com:FasterXML/jackson-bom.git
+ scm:git:git@github.com:FasterXML/jackson-bom.git
+ http://github.com/FasterXML/jackson-bom
+ HEAD
+
+
+
+ 2.9.0.pr2-SNAPSHOT
+
+ 2.9.0.pr1
+ ${jackson.version}
+ ${jackson.version}
+
+ ${jackson.version}
+ ${jackson.version}
+ ${jackson.version}
+ ${jackson.version}
+
+ ${jackson.version}
+ ${jackson.version.module}
+ ${jackson.version.module}
+
+
+
+
+
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+ ${jackson.version.annotations}
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+ ${jackson.version.core}
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+ ${jackson.version.databind}
+
+
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-avro
+ ${jackson.version.dataformat}
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-cbor
+ ${jackson.version.dataformat}
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-csv
+ ${jackson.version.dataformat}
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-properties
+ ${jackson.version.dataformat}
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-protobuf
+ ${jackson.version.dataformat}
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-smile
+ ${jackson.version.dataformat}
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-xml
+ ${jackson.version.dataformat}
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-yaml
+ ${jackson.version.dataformat}
+
+
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-guava
+ ${jackson.version.datatype}
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-hibernate3
+ ${jackson.version.datatype}
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-hibernate4
+ ${jackson.version.datatype}
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-hibernate5
+ ${jackson.version.datatype}
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-hppc
+ ${jackson.version.datatype}
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jaxrs
+
+ ${jackson.version.datatype}
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-joda
+ ${jackson.version.datatype}
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jdk8
+ ${jackson.version.datatype}
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-json-org
+ ${jackson.version.datatype}
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr310
+ ${jackson.version.datatype}
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-jsr353
+ ${jackson.version.datatype}
+
+
+ com.fasterxml.jackson.datatype
+ jackson-datatype-pcollections
+ ${jackson.version.datatype}
+
+
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-base
+ ${jackson.version.jaxrs}
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-cbor-provider
+ ${jackson.version.jaxrs}
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-json-provider
+ ${jackson.version.jaxrs}
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-smile-provider
+ ${jackson.version.jaxrs}
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-xml-provider
+ ${jackson.version.jaxrs}
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-yaml-provider
+ ${jackson.version.jaxrs}
+
+
+
+
+ com.fasterxml.jackson.jr
+ jackson-jr-all
+ ${jackson.version.jacksonjr}
+
+
+ com.fasterxml.jackson.jr
+ jackson-jr-objects
+ ${jackson.version.jacksonjr}
+
+
+ com.fasterxml.jackson.jr
+ jackson-jr-retrofit2
+ ${jackson.version.jacksonjr}
+
+
+ com.fasterxml.jackson.jr
+ jackson-jr-stree
+ ${jackson.version.jacksonjr}
+
+
+
+
+ com.fasterxml.jackson.module
+ jackson-module-afterburner
+ ${jackson.version.module}
+
+
+ com.fasterxml.jackson.module
+ jackson-module-guice
+ ${jackson.version.module}
+
+
+ com.fasterxml.jackson.module
+ jackson-module-jaxb-annotations
+ ${jackson.version.module}
+
+
+ com.fasterxml.jackson.module
+ jackson-module-jsonSchema
+ ${jackson.version.module}
+
+
+ com.fasterxml.jackson.module
+ jackson-module-kotlin
+ ${jackson.version.module.kotlin}
+
+
+ com.fasterxml.jackson.module
+ jackson-module-mrbean
+ ${jackson.version.module}
+
+
+ com.fasterxml.jackson.module
+ jackson-module-osgi
+ ${jackson.version.module}
+
+
+ com.fasterxml.jackson.module
+ jackson-module-parameter-names
+ ${jackson.version.module}
+
+
+ com.fasterxml.jackson.module
+ jackson-module-paranamer
+ ${jackson.version.module}
+
+
+
+
+
+ com.fasterxml.jackson.module
+ jackson-module-scala_2.10
+ ${jackson.version.module.scala}
+
+
+ com.fasterxml.jackson.module
+ jackson-module-scala_2.11
+ ${jackson.version.module.scala}
+
+
+ com.fasterxml.jackson.module
+ jackson-module-scala_2.12
+ ${jackson.version.module.scala}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index a776c7d22..2166b1195 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,6 +4,7 @@
com.fasterxml.jackson
jackson-bom
2.9.0.pr2-SNAPSHOT
+ ./jackson-bom-pom.xml
com.fasterxml.jackson.dataformat
jackson-dataformats-binary
diff --git a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileFactory.java b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileFactory.java
index 649d6f532..25d2269b8 100644
--- a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileFactory.java
+++ b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileFactory.java
@@ -7,6 +7,7 @@
import com.fasterxml.jackson.core.format.InputAccessor;
import com.fasterxml.jackson.core.format.MatchStrength;
import com.fasterxml.jackson.core.io.IOContext;
+import com.fasterxml.jackson.core.json.PackageVersion;
/**
* Factory used for constructing {@link SmileParser} and {@link SmileGenerator}
diff --git a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileGenerator.java b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileGenerator.java
index f95b0e5a1..7d713828a 100644
--- a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileGenerator.java
+++ b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileGenerator.java
@@ -10,6 +10,7 @@
import com.fasterxml.jackson.core.io.*;
import com.fasterxml.jackson.core.json.JsonWriteContext;
import com.fasterxml.jackson.core.base.GeneratorBase;
+import com.fasterxml.jackson.core.json.PackageVersion;
import static com.fasterxml.jackson.dataformat.smile.SmileConstants.*;
diff --git a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java
index c2f2b2dd9..665d26cd6 100644
--- a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java
+++ b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/SmileParser.java
@@ -9,6 +9,7 @@
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.base.ParserBase;
import com.fasterxml.jackson.core.io.IOContext;
+import com.fasterxml.jackson.core.json.PackageVersion;
import com.fasterxml.jackson.core.sym.ByteQuadsCanonicalizer;
import static com.fasterxml.jackson.dataformat.smile.SmileConstants.BYTE_MARKER_END_OF_STRING;
diff --git a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingParserImpl.java b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingParserImpl.java
index d4008f1f1..8a1d64f43 100644
--- a/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingParserImpl.java
+++ b/smile/src/main/java/com/fasterxml/jackson/dataformat/smile/async/NonBlockingParserImpl.java
@@ -9,6 +9,7 @@
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.base.ParserBase;
import com.fasterxml.jackson.core.io.IOContext;
+import com.fasterxml.jackson.core.json.PackageVersion;
import com.fasterxml.jackson.core.sym.ByteQuadsCanonicalizer;
import com.fasterxml.jackson.dataformat.smile.*;
diff --git a/smile/src/test/java/com/fasterxml/jackson/dataformat/smile/BrokenSurrogatePair.java b/smile/src/test/java/com/fasterxml/jackson/dataformat/smile/BrokenSurrogatePair.java
new file mode 100644
index 000000000..032832f57
--- /dev/null
+++ b/smile/src/test/java/com/fasterxml/jackson/dataformat/smile/BrokenSurrogatePair.java
@@ -0,0 +1,24 @@
+package com.fasterxml.jackson.dataformat.smile;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SequenceWriter;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+
+public class BrokenSurrogatePair {
+ @Test
+ public void brokenSurrogatePair() throws IOException {
+ // The string '{"val":"conclu e"}' written as bytes to avoid any encoding issues, etc
+ byte[] bytes = {123, 34, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 34, 58, 34, 99, 111, 110, 99, 108, 117, -19, -92, -81, 32, 101, 34, 125, 10};
+ ObjectMapper objectMapper = new ObjectMapper();
+ JsonNode response = objectMapper.readValue(bytes, JsonNode.class);
+
+ ObjectMapper smileMapper = new ObjectMapper(new SmileFactory());
+ SequenceWriter sequenceWriter = smileMapper.writerFor(JsonNode.class)
+ .writeValuesAsArray(new File("./temp.txt"));
+ sequenceWriter.write(response);
+ }
+}
diff --git a/smile/src/test/java/com/fasterxml/jackson/dataformat/smile/VersionsTest.java b/smile/src/test/java/com/fasterxml/jackson/dataformat/smile/VersionsTest.java
index 67f44350d..882467047 100644
--- a/smile/src/test/java/com/fasterxml/jackson/dataformat/smile/VersionsTest.java
+++ b/smile/src/test/java/com/fasterxml/jackson/dataformat/smile/VersionsTest.java
@@ -3,6 +3,7 @@
import java.io.*;
import com.fasterxml.jackson.core.Versioned;
+import com.fasterxml.jackson.core.json.PackageVersion;
/**
* Tests to verify [JACKSON-278]