diff --git a/modules/db/pymod/export_linear_db.cc b/modules/db/pymod/export_linear_db.cc
index 2908bdb8c6eea57c988bd11c9605b2825ab0891b..6ee2d2f0191be3b4a78a3652d0edf3da2ca33483 100644
--- a/modules/db/pymod/export_linear_db.cc
+++ b/modules/db/pymod/export_linear_db.cc
@@ -166,32 +166,23 @@ struct DisCoDataContainers {
   LinearPositionContainerPtr position_container;
 };
 
-// helper struct to wrap output
 
-struct ExtractedDisCoData{
-  std::vector<int> residue_numbers;
-  geom::Vec3List ca_positions;
-};
-typedef boost::shared_ptr<ExtractedDisCoData> ExtractedDisCoDataPtr;
-list WrapExtractedDisCoDataGetResNums(ExtractedDisCoDataPtr ptr) {
-  list residue_numbers;
-  VecToList(ptr->residue_numbers, residue_numbers); 
-  return residue_numbers;
-}
+void WrapExtractTemplateDataDisCo(const String& entry_name, const String& chain_name,
+                                  const ost::seq::AlignmentHandle& aln,
+                                  DisCoDataContainers& data_containers,
+                                  boost::python::list& residue_numbers,
+                                  geom::Vec3List& positions) {
 
-ExtractedDisCoDataPtr WrapExtractTemplateDataDisCo(const String& entry_name, 
-                                                   const String& chain_name,
-                                                   const ost::seq::AlignmentHandle& aln,
-                                                   DisCoDataContainers& data_containers) {
-  ExtractedDisCoDataPtr ptr(new ExtractedDisCoData);
+  std::vector<int> v_residue_numbers;
   ost::db::ExtractTemplateDataDisCo(entry_name, chain_name, aln, 
                                     data_containers.indexer, 
                                     data_containers.seqres_container, 
                                     data_containers.atomseq_container, 
                                     data_containers.position_container, 
-                                    ptr->residue_numbers,
-                                    ptr->ca_positions);
-  return ptr;
+                                    v_residue_numbers,
+                                    positions);
+  residue_numbers = boost::python::list();
+  VecToList(v_residue_numbers, residue_numbers);
 } 
 
 
@@ -226,27 +217,19 @@ struct GMQEDataContainers {
   LinearPositionContainerPtr cb_position_container;
 };
 
-// helper struct to wrap output
-struct ExtractedGMQEData{
-  std::vector<int> residue_numbers;
-  String dssp;
-  geom::Vec3List n_positions;
-  geom::Vec3List ca_positions;
-  geom::Vec3List c_positions;
-  geom::Vec3List cb_positions; 
-};
-typedef boost::shared_ptr<ExtractedGMQEData> ExtractedGMQEDataPtr;
-list WrapExtractedGMQEDataGetResNums(ExtractedGMQEDataPtr ptr) {
-  list residue_numbers;
-  VecToList(ptr->residue_numbers, residue_numbers);
-  return residue_numbers;
-}
 
-ExtractedGMQEDataPtr WrapExtractTemplateDataGMQE(const String& entry_name, 
-                                                 const String& chain_name,
-                                                 const ost::seq::AlignmentHandle& aln,
-                                                 GMQEDataContainers& data_containers) {
-  ExtractedGMQEDataPtr ptr(new ExtractedGMQEData);
+void WrapExtractTemplateDataGMQE(const String& entry_name, 
+                                                const String& chain_name,
+                                                const ost::seq::AlignmentHandle& aln,
+                                                GMQEDataContainers& data_containers,
+                                                boost::python::list& residue_numbers,
+                                                String& dssp,
+                                                geom::Vec3List& n_positions,
+                                                geom::Vec3List& ca_positions,
+                                                geom::Vec3List& c_positions,
+                                                geom::Vec3List& cb_positions) {
+
+  std::vector<int> v_residue_numbers;
   ost::db::ExtractTemplateDataGMQE(entry_name, chain_name, aln, 
                                    data_containers.indexer, 
                                    data_containers.seqres_container, 
@@ -256,10 +239,9 @@ ExtractedGMQEDataPtr WrapExtractTemplateDataGMQE(const String& entry_name,
                                    data_containers.ca_position_container, 
                                    data_containers.c_position_container,
                                    data_containers.cb_position_container, 
-                                   ptr->residue_numbers, ptr->dssp, 
-                                   ptr->n_positions, ptr->ca_positions, 
-                                   ptr->c_positions, ptr->cb_positions);
-  return ptr;
+                                   v_residue_numbers, dssp, n_positions, 
+                                   ca_positions, c_positions, cb_positions);
+  VecToList(v_residue_numbers, residue_numbers);
 }
 
 }
@@ -327,18 +309,15 @@ void export_linear_db() {
     .def_readonly("indexer", &DisCoDataContainers::indexer)
     .def_readonly("seqres_container", &DisCoDataContainers::seqres_container)
     .def_readonly("atomseq_container", &DisCoDataContainers::atomseq_container)
-    .def_readonly("ca_position_container", &DisCoDataContainers::position_container)
-  ;
-
-  class_<ExtractedDisCoData, ExtractedDisCoDataPtr>("ExtractedDisCoData", no_init)
-    .add_property("residue_numbers", &WrapExtractedDisCoDataGetResNums)
-    .def_readonly("ca_positions", &ExtractedDisCoData::ca_positions)
+    .def_readonly("position_container", &DisCoDataContainers::position_container)
   ;
 
   def("ExtractTemplateDataDisCo", &WrapExtractTemplateDataDisCo, (arg("entry_name"),
                                                                   arg("chain_name"),
                                                                   arg("aln"),
-                                                                  arg("data_containers")));
+                                                                  arg("data_containers"),
+                                                                  arg("residue_numbers"),
+                                                                  arg("positions")));
 
   class_<GMQEDataContainers>("GMQEDataContainers", init<const String&, 
                                                         const String&, 
@@ -358,18 +337,16 @@ void export_linear_db() {
     .def_readonly("cb_position_container", &GMQEDataContainers::cb_position_container)
   ;
 
-  class_<ExtractedGMQEData, ExtractedGMQEDataPtr>("ExtractedGMQEData", no_init)
-    .add_property("residue_numbers", &WrapExtractedGMQEDataGetResNums)
-    .def_readonly("dssp", &ExtractedGMQEData::dssp)
-    .def_readonly("n_positions", &ExtractedGMQEData::n_positions)
-    .def_readonly("ca_positions", &ExtractedGMQEData::ca_positions)
-    .def_readonly("c_positions", &ExtractedGMQEData::c_positions)
-    .def_readonly("cb_positions", &ExtractedGMQEData::cb_positions)
-  ;
-
   def("ExtractTemplateDataGMQE", &WrapExtractTemplateDataGMQE, (arg("entry_name"),
                                                                 arg("chain_name"),
                                                                 arg("aln"),
-                                                                arg("data_containers")));
+                                                                arg("data_containers"),
+                                                                arg("residue_numbers"),
+                                                                arg("dssp"),
+                                                                arg("n_positions"),
+                                                                arg("ca_positions"),
+                                                                arg("c_positions"),
+                                                                arg("cb_positions")));
+
 }