diff --git a/fpdfsdk/src/fpdfview.cpp b/fpdfsdk/src/fpdfview.cpp
index 6a8f890..db19124 100644
--- a/fpdfsdk/src/fpdfview.cpp
+++ b/fpdfsdk/src/fpdfview.cpp
@@ -303,43 +303,40 @@
 	return pDocument;
 }
 
-DLLEXPORT FX_BOOL STDCALL FPDF_HasXFAField(FPDF_DOCUMENT document, int& docType)
-{
-	if (!document)
-		return FALSE;
-
-	CPDF_Dictionary* pRoot = ((CPDF_Document*)document)->GetRoot();
-	if (!pRoot)
-		return FALSE;
-
-	CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm");
-	if (!pAcroForm)
-		return FALSE;
-
-	CPDF_Object* pXFA = pAcroForm->GetElement("XFA");
-	if (!pXFA)
-		return FALSE;
-
-	FX_BOOL bDynamicXFA = pRoot->GetBoolean("NeedsRendering", FALSE);
-
-	if (bDynamicXFA)
-		docType = DOCTYPE_DYNIMIC_XFA;
-	else
-		docType = DOCTYPE_STATIC_XFA;
-
-	return TRUE;
+DLLEXPORT FX_BOOL STDCALL FPDF_HasXFAField(FPDF_DOCUMENT document, int& docType)
+{
+	if (!document)
+		return FALSE;
+
+	CPDF_Document *pdfDoc = (static_cast<CPDFXFA_Document *>(document))->GetPDFDoc();
+	if (!pdfDoc)
+		return FALSE;
+
+	CPDF_Dictionary* pRoot = pdfDoc->GetRoot();
+	if (!pRoot)
+		return FALSE;
+
+	CPDF_Dictionary* pAcroForm = pRoot->GetDict("AcroForm");
+	if (!pAcroForm)
+		return FALSE;
+
+	CPDF_Object* pXFA = pAcroForm->GetElement("XFA");
+	if (!pXFA)
+		return FALSE;
+
+	FX_BOOL bDynamicXFA = pRoot->GetBoolean("NeedsRendering", FALSE);
+
+	if (bDynamicXFA)
+		docType = DOCTYPE_DYNIMIC_XFA;
+	else
+		docType = DOCTYPE_STATIC_XFA;
+
+	return TRUE;
 }
 
 DLLEXPORT  FPDF_BOOL STDCALL FPDF_LoadXFA(FPDF_DOCUMENT document)
 {
-	if (!document) 
-		return FALSE;
-
-	int iDocType = DOCTYPE_PDF;
-	FX_BOOL hasXFAField = FPDF_HasXFAField(document, iDocType);
-	if (!hasXFAField)
-		return FALSE;
-	return ((CPDFXFA_Document*)document)->LoadXFADoc();
+	return document && (static_cast<CPDFXFA_Document *>(document))->LoadXFADoc();
 }
 
 
diff --git a/samples/pdfium_test.cc b/samples/pdfium_test.cc
index d861f2f..e4a55f2 100644
--- a/samples/pdfium_test.cc
+++ b/samples/pdfium_test.cc
@@ -468,12 +468,21 @@
     doc = FPDFAvail_GetDocument(pdf_avail, NULL);
   }
 
+  if (!doc)
+  {
+    fprintf(stderr, "Load pdf docs unsuccessful.\n");
+    return;
+  }
+
   (void) FPDF_GetDocPermissions(doc);
   (void) FPDFAvail_IsFormAvail(pdf_avail, &hints);
 
   FPDF_FORMHANDLE form = FPDFDOC_InitFormFillEnvironment(doc, &form_callbacks);
-  if (!FPDF_LoadXFA(doc)) {
-    fprintf(stderr, "LoadXFA unsuccessful, continuing anyway.\n");
+  int docType = DOCTYPE_PDF;
+  if (FPDF_HasXFAField(doc, docType))
+  {
+      if (docType != DOCTYPE_PDF && !FPDF_LoadXFA(doc))
+          fprintf(stderr, "LoadXFA unsuccessful, continuing anyway.\n");
   }
   FPDF_SetFormFieldHighlightColor(form, 0, 0xFFE4DD);
   FPDF_SetFormFieldHighlightAlpha(form, 100);
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp
index cf0bdf8..563dec8 100644
--- a/testing/embedder_test.cpp
+++ b/testing/embedder_test.cpp
@@ -261,7 +261,12 @@
   if (!document_) {
     return false;
   }
-  (void) FPDF_LoadXFA(document_);
+  int docType = DOCTYPE_PDF;
+  if (FPDF_HasXFAField(document_, docType))
+  {
+    if (docType != DOCTYPE_PDF)
+      (void) FPDF_LoadXFA(document_);
+  }
   (void) FPDF_GetDocPermissions(document_);
   (void) FPDFAvail_IsFormAvail(avail_, &hints_);
 
