diff --git a/substrate/core/sr-primitives/src/lib.rs b/substrate/core/sr-primitives/src/lib.rs
index 2deb05c90f57784e37b7381cd260fe9d3c82a732..5c87782b04802536061b84de320129f1efd455e0 100644
--- a/substrate/core/sr-primitives/src/lib.rs
+++ b/substrate/core/sr-primitives/src/lib.rs
@@ -534,7 +534,7 @@ pub struct OpaqueExtrinsic(pub Vec<u8>);
 #[cfg(feature = "std")]
 impl ::serde::Serialize for OpaqueExtrinsic {
 	fn serialize<S>(&self, seq: S) -> Result<S::Ok, S::Error> where S: ::serde::Serializer {
-		::codec::Encode::using_encoded(&self.0, |bytes| seq.serialize_bytes(bytes))
+		::codec::Encode::using_encoded(&self.0, |bytes| ::substrate_primitives::bytes::serialize(bytes, seq))
 	}
 }
 
@@ -617,4 +617,10 @@ mod tests {
 		// check that as-style methods are not working with regular items
 		assert!(b1.as_authorities_change().is_none());
 	}
+
+	#[test]
+	fn opaque_extrinsic_serialization() {
+		let ex = super::OpaqueExtrinsic(vec![1, 2, 3, 4]);
+		assert_eq!(serde_json::to_string(&ex).unwrap(), "\"0x1001020304\"".to_owned());
+	}
 }
diff --git a/substrate/node/primitives/src/lib.rs b/substrate/node/primitives/src/lib.rs
index 027330613468e581f5c2c7cf687148e3b91ba8fc..504ac5db953dc9a59741a800b175c2607b0ae221 100644
--- a/substrate/node/primitives/src/lib.rs
+++ b/substrate/node/primitives/src/lib.rs
@@ -31,8 +31,6 @@ extern crate sr_primitives as runtime_primitives;
 extern crate substrate_primitives as primitives;
 
 use runtime_primitives::generic;
-#[cfg(feature = "std")]
-use primitives::bytes;
 use runtime_primitives::{OpaqueExtrinsic, traits::BlakeTwo256};
 
 pub use runtime_primitives::BasicInherentData as InherentData;