--- openjade-1.3.2-orig//jade/TeXFOTBuilder.cxx	2011-05-02 22:08:49.274006803 +0000
+++ openjade-1.3.2-orig//jade/TeXFOTBuilder.cxx	2011-05-02 22:14:09.849006939 +0000
@@ -88,6 +88,8 @@ 
       value.convertString(nic_.placement);
       }
     ExtensionFlowObj *copy() const { return new PageFloatFlowObj(*this); }
+  public:
+    PageFloatFlowObj() {}
   private:
     PageFloatNIC nic_;
     StringC name_;
@@ -101,6 +103,8 @@ 
       fotb.endPageFootnote();
     }
     ExtensionFlowObj *copy() const { return new PageFootnoteFlowObj(*this); }
+  public:
+    PageFootnoteFlowObj() {}
   private:
   };
   //////////////////////////////////////////////////////////////////////
--- openjade-1.3.2-orig//jade/TransformFOTBuilder.cxx	2011-05-02 22:08:49.275006803 +0000
+++ openjade-1.3.2-orig//jade/TransformFOTBuilder.cxx	2011-05-02 22:18:31.614007052 +0000
@@ -41,6 +41,7 @@ 
   };
   class EntityRefFlowObj : public TransformExtensionFlowObj {
   public:
+    EntityRefFlowObj() {}
     void atomic(TransformFOTBuilder &fotb, const NodePtr &) const {
       fotb.entityRef(name_);
     }
@@ -56,6 +57,7 @@ 
   };
   class ProcessingInstructionFlowObj : public TransformExtensionFlowObj {
   public:
+    ProcessingInstructionFlowObj() {}
     void atomic(TransformFOTBuilder &fotb, const NodePtr &) const {
       fotb.processingInstruction(data_);
     }
@@ -98,6 +100,8 @@ 
       }
     }
     ExtensionFlowObj *copy() const { return new EmptyElementFlowObj(*this); }
+  public:
+    EmptyElementFlowObj() {}
   private:
     ElementNIC nic_;
   };
@@ -133,6 +137,8 @@ 
       }
     }
     ExtensionFlowObj *copy() const { return new ElementFlowObj(*this); }
+  public:
+    ElementFlowObj() {}
   private:
     ElementNIC nic_;
   };
@@ -150,6 +156,8 @@ 
       value.convertString(systemId_);
     }
     ExtensionFlowObj *copy() const { return new EntityFlowObj(*this); }
+  public:
+    EntityFlowObj() {};
   private:
     StringC systemId_;
   };
@@ -174,6 +182,8 @@ 
       }
     }
     ExtensionFlowObj *copy() const { return new DocumentTypeFlowObj(*this); }
+  public:
+    DocumentTypeFlowObj() {}
   private:
     DocumentTypeNIC nic_;
   };
