diff --git a/xfa/src/fdp/src/css/fde_cssstyleselector.cpp b/xfa/src/fdp/src/css/fde_cssstyleselector.cpp
index 8a832b4..b2fa5c6 100644
--- a/xfa/src/fdp/src/css/fde_cssstyleselector.cpp
+++ b/xfa/src/fdp/src/css/fde_cssstyleselector.cpp
@@ -597,10 +597,6 @@
     FDE_CSSPROPERTY eProperty,
     IFDE_CSSValue* pValue,
     CFDE_CSSComputedStyle* pComputedStyle) {
-  if (pComputedStyle->m_InheritedData.m_pFontFamily &&
-      *(FX_DWORD*)pComputedStyle->m_InheritedData.m_pFontFamily == 0xcdcdcdcd) {
-    pComputedStyle = pComputedStyle;  // FIXME: likely a real bug.
-  }
   if (pValue->GetType() == FDE_CSSVALUETYPE_Primitive) {
     IFDE_CSSPrimitiveValue* pPrimitive = (IFDE_CSSPrimitiveValue*)pValue;
     FDE_CSSPRIMITIVETYPE eType = pPrimitive->GetPrimitiveType();
diff --git a/xfa/src/fxbarcode/BC_BarCode.cpp b/xfa/src/fxbarcode/BC_BarCode.cpp
index 82af104..bb5787b 100644
--- a/xfa/src/fxbarcode/BC_BarCode.cpp
+++ b/xfa/src/fxbarcode/BC_BarCode.cpp
@@ -212,8 +212,8 @@
       ((CBC_OnedCode39Writer*)m_pBCWriter)->RenderTextContents(contents);
   m_renderContents = renderContents;
   CFX_ByteString byteString = filtercontents.UTF8Encode();
-  uint8_t* data =
-      m_pBCWriter->Encode(byteString, format, outWidth, outHeight, e);
+  uint8_t* data = static_cast<CBC_OnedCode39Writer*>(m_pBCWriter)
+                      ->Encode(byteString, format, outWidth, outHeight, e);
   BC_EXCEPTION_CHECK_ReturnValue(e, FALSE);
   ((CBC_OneDimWriter*)m_pBCWriter)
       ->RenderResult(renderContents, data, outWidth, isDevice, e);
@@ -315,8 +315,8 @@
       ((CBC_OneDimWriter*)m_pBCWriter)->FilterContents(contents);
   CFX_ByteString byteString = filtercontents.UTF8Encode();
   m_renderContents = filtercontents;
-  uint8_t* data =
-      m_pBCWriter->Encode(byteString, format, outWidth, outHeight, e);
+  uint8_t* data = static_cast<CBC_OnedCodaBarWriter*>(m_pBCWriter)
+                      ->Encode(byteString, format, outWidth, outHeight, e);
   BC_EXCEPTION_CHECK_ReturnValue(e, FALSE);
   ((CBC_OneDimWriter*)m_pBCWriter)
       ->RenderResult(filtercontents, data, outWidth, isDevice, e);
@@ -396,8 +396,8 @@
       ((CBC_OnedCode128Writer*)m_pBCWriter)->FilterContents(content);
   m_renderContents = encodeContents;
   CFX_ByteString byteString = encodeContents.UTF8Encode();
-  uint8_t* data =
-      m_pBCWriter->Encode(byteString, format, outWidth, outHeight, e);
+  uint8_t* data = static_cast<CBC_OnedCode128Writer*>(m_pBCWriter)
+                      ->Encode(byteString, format, outWidth, outHeight, e);
   BC_EXCEPTION_CHECK_ReturnValue(e, FALSE);
   ((CBC_OneDimWriter*)m_pBCWriter)
       ->RenderResult(encodeContents, data, outWidth, isDevice, e);
@@ -479,8 +479,8 @@
   CFX_WideString encodeContents = Preprocess(contents);
   CFX_ByteString byteString = encodeContents.UTF8Encode();
   m_renderContents = encodeContents;
-  uint8_t* data =
-      m_pBCWriter->Encode(byteString, format, outWidth, outHeight, e);
+  uint8_t* data = static_cast<CBC_OnedEAN8Writer*>(m_pBCWriter)
+                      ->Encode(byteString, format, outWidth, outHeight, e);
   BC_EXCEPTION_CHECK_ReturnValue(e, FALSE);
   ((CBC_OneDimWriter*)m_pBCWriter)
       ->RenderResult(encodeContents, data, outWidth, isDevice, e);
@@ -563,8 +563,8 @@
   CFX_WideString encodeContents = Preprocess(contents);
   CFX_ByteString byteString = encodeContents.UTF8Encode();
   m_renderContents = encodeContents;
-  uint8_t* data =
-      m_pBCWriter->Encode(byteString, format, outWidth, outHeight, e);
+  uint8_t* data = static_cast<CBC_OnedEAN13Writer*>(m_pBCWriter)
+                      ->Encode(byteString, format, outWidth, outHeight, e);
   BC_EXCEPTION_CHECK_ReturnValue(e, FALSE);
   ((CBC_OneDimWriter*)m_pBCWriter)
       ->RenderResult(encodeContents, data, outWidth, isDevice, e);
@@ -649,8 +649,8 @@
   CFX_ByteString byteString = encodeContents.UTF8Encode();
   m_renderContents = encodeContents;
   ((CBC_OnedUPCAWriter*)m_pBCWriter)->Init();
-  uint8_t* data =
-      m_pBCWriter->Encode(byteString, format, outWidth, outHeight, e);
+  uint8_t* data = static_cast<CBC_OnedUPCAWriter*>(m_pBCWriter)
+                      ->Encode(byteString, format, outWidth, outHeight, e);
   BC_EXCEPTION_CHECK_ReturnValue(e, FALSE);
   ((CBC_OneDimWriter*)m_pBCWriter)
       ->RenderResult(encodeContents, data, outWidth, isDevice, e);
diff --git a/xfa/src/fxbarcode/BC_TwoDimWriter.h b/xfa/src/fxbarcode/BC_TwoDimWriter.h
index 6a9866b..dfbd980 100644
--- a/xfa/src/fxbarcode/BC_TwoDimWriter.h
+++ b/xfa/src/fxbarcode/BC_TwoDimWriter.h
@@ -15,28 +15,6 @@
  public:
   CBC_TwoDimWriter();
   virtual ~CBC_TwoDimWriter();
-  virtual uint8_t* Encode(const CFX_WideString& contents,
-                          int32_t ecLevel,
-                          int32_t& outWidth,
-                          int32_t& outHeight,
-                          int32_t& e) {
-    return nullptr;
-  };
-  virtual uint8_t* Encode(const CFX_ByteString& contents,
-                          BCFORMAT format,
-                          int32_t& outWidth,
-                          int32_t& outHeight,
-                          int32_t hints,
-                          int32_t& e) {
-    return nullptr;
-  };
-  virtual uint8_t* Encode(const CFX_ByteString& contents,
-                          BCFORMAT format,
-                          int32_t& outWidth,
-                          int32_t& outHeight,
-                          int32_t& e) {
-    return nullptr;
-  };
   virtual void RenderResult(uint8_t* code,
                             int32_t codeWidth,
                             int32_t codeHeight,
diff --git a/xfa/src/fxbarcode/BC_Writer.h b/xfa/src/fxbarcode/BC_Writer.h
index b895b81..00cb975 100644
--- a/xfa/src/fxbarcode/BC_Writer.h
+++ b/xfa/src/fxbarcode/BC_Writer.h
@@ -15,17 +15,6 @@
  public:
   CBC_Writer();
   virtual ~CBC_Writer();
-  virtual uint8_t* Encode(const CFX_ByteString& contents,
-                          BCFORMAT format,
-                          int32_t& outWidth,
-                          int32_t& outHeight,
-                          int32_t& e) = 0;
-  virtual uint8_t* Encode(const CFX_ByteString& contents,
-                          BCFORMAT format,
-                          int32_t& outWidth,
-                          int32_t& outHeight,
-                          int32_t hints,
-                          int32_t& e) = 0;
   virtual FX_BOOL SetCharEncoding(int32_t encoding);
   virtual FX_BOOL SetModuleHeight(int32_t moduleHeight);
   virtual FX_BOOL SetModuleWidth(int32_t moduleWidth);
diff --git a/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h b/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h
index 886164c..cf89972 100644
--- a/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h
+++ b/xfa/src/fxbarcode/oned/BC_OnedUPCAWriter.h
@@ -28,6 +28,11 @@
                   int32_t& outHeight,
                   int32_t hints,
                   int32_t& e);
+  uint8_t* Encode(const CFX_ByteString& contents,
+                  int32_t& outLength,
+                  int32_t& e) {
+    return nullptr;
+  }
   void RenderResult(const CFX_WideStringC& contents,
                     uint8_t* code,
                     int32_t codeLength,
