[cgma-dev] r1253 - in cgm/trunk: cgm_apps/examples/driverc++ geom geom/ACIS_SRC geom/facet

kraftche at mcs.anl.gov kraftche at mcs.anl.gov
Fri Aug 24 15:43:29 CDT 2007


Author: kraftche
Date: 2007-08-24 15:43:22 -0500 (Fri, 24 Aug 2007)
New Revision: 1253

Modified:
   cgm/trunk/cgm_apps/examples/driverc++/Makefile
   cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.cpp
   cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.hpp
   cgm/trunk/geom/ACIS_SRC/AcisQueryEngine.cpp
   cgm/trunk/geom/GeometryModifyEngine.cpp
   cgm/trunk/geom/GeometryModifyEngine.hpp
   cgm/trunk/geom/GeometryModifyTool.cpp
   cgm/trunk/geom/facet/FacetModifyEngine.cpp
   cgm/trunk/geom/facet/FacetModifyEngine.hpp
Log:
o Add additional sweep termiantion options to GeometryModifyEngine::sweep*
o Reduce abstract webcut methods provided by engines to a single
  webcut with tool-body function.
o Move old webcut_* methods to common implementation for all engines in
  GeometryModifyEngine
o Add tests for webcut functions


Modified: cgm/trunk/cgm_apps/examples/driverc++/Makefile
===================================================================
--- cgm/trunk/cgm_apps/examples/driverc++/Makefile	2007-08-24 20:05:52 UTC (rev 1252)
+++ cgm/trunk/cgm_apps/examples/driverc++/Makefile	2007-08-24 20:43:22 UTC (rev 1253)
@@ -1,10 +1,10 @@
 CGM_DIR = ../../..
 include ${CGM_DIR}/lib/cgm.make
 
-all: mergechk
+all: webcut
 
-mergechk: mergechk.o ${CGM_LIBS_FILES}
-	$(CGM_CXX) -o mergechk $(LDFLAGS) mergechk.o $(CGM_LIBS_LINK)
+webcut: webcut.o ${CGM_LIBS_FILES}
+	$(CGM_CXX) -o webcut $(LDFLAGS) webcut.o $(CGM_LIBS_LINK)
 
 .cpp.o:
 	$(CGM_CXX) ${CGM_CXXFLAGS} ${CGM_INCLUDES} -c -o $@ $<

Modified: cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.cpp
===================================================================
--- cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.cpp	2007-08-24 20:05:52 UTC (rev 1252)
+++ cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.cpp	2007-08-24 20:43:22 UTC (rev 1253)
@@ -1,5 +1,4 @@
-//-------------------------------------------------------------------------
-// Filename      : AcisModifyEngine.cpp
+
 //
 // Purpose       : Performs all acis-based geometry modification or creation
 //
@@ -234,13 +233,13 @@
 
 #ifdef ACIS_IGES_TRANSLATOR
 #if CUBIT_ACIS_VERSION < 1100
-   #include "igeshusk/igs_api/routines.hxx"
+#include "igeshusk/igs_api/routines.hxx"
 #else
 #include "acisiges_api.hxx"
 #endif
 #endif
 #ifdef ACIS_PROE_TRANSLATOR
-   #include "proe/proehusk/api/proeapi.hxx"
+#include "proe/proehusk/api/proeapi.hxx"
 #endif
 
 #ifdef ACIS_LOCAL_OPS
@@ -253,13 +252,13 @@
 
 #ifdef ACIS_STEP_TRANSLATOR
 #if CUBIT_ACIS_VERSION < 1100
-   #include "stephusk/include/acis_inc.hxx"
-   #include "stephusk/include/stpapi.hxx"
-   #include "stephusk/util/apiinit.hxx"
-   #include "stephusk/stepwrit/api/apiwrite.hxx"
-   #include "stephusk/stepread/api/apiread.hxx"
-   #include "stephusk/util/stphead.hxx"
-   #include "stephusk/util/stp_res.hxx"
+#include "stephusk/include/acis_inc.hxx"
+#include "stephusk/include/stpapi.hxx"
+#include "stephusk/util/apiinit.hxx"
+#include "stephusk/stepwrit/api/apiwrite.hxx"
+#include "stephusk/stepread/api/apiread.hxx"
+#include "stephusk/util/stphead.hxx"
+#include "stephusk/util/stp_res.hxx"
 #else
 #include "acisstep_api.hxx"
 #endif
@@ -335,51 +334,51 @@
 
 AcisModifyEngine::~AcisModifyEngine()
 {
-   api_terminate_booleans();
-   api_terminate_covering();
-   api_terminate_sweeping();
-   api_terminate_skinning();
-   api_terminate_offsetting();
-   api_terminate_shelling ();
+  api_terminate_booleans();
+  api_terminate_covering();
+  api_terminate_sweeping();
+  api_terminate_skinning();
+  api_terminate_offsetting();
+  api_terminate_shelling ();
 #ifdef ACIS_LOCAL_OPS
-   api_terminate_face_removal();
+  api_terminate_face_removal();
 #endif
 
-   instance_ = 0;
+  instance_ = 0;
 }
 
 AcisModifyEngine::AcisModifyEngine()
 {
   assert( !instance_ );
 
-    // add this modify engine to geometrymodifytool
+  // add this modify engine to geometrymodifytool
   GeometryModifyTool::instance()->add_gme(this);
 
-   API_BEGIN;
-     //initialize the correct modules
-   api_initialize_booleans();
-   api_initialize_covering();
-   api_initialize_sweeping();
-   api_initialize_skinning();
-   api_initialize_offsetting();
-   api_initialize_shelling ();
+  API_BEGIN;
+  //initialize the correct modules
+  api_initialize_booleans();
+  api_initialize_covering();
+  api_initialize_sweeping();
+  api_initialize_skinning();
+  api_initialize_offsetting();
+  api_initialize_shelling ();
 #ifdef ACIS_LOCAL_OPS
-   api_initialize_face_removal();
+  api_initialize_face_removal();
 #endif
 
-   API_END;
+  API_END;
 }
 
 CubitString AcisModifyEngine::identify()
 {
-   CubitString number_string = get_major_version();
-   number_string += ".";
-   number_string += CubitString(get_minor_version());
-   number_string += ".";
-   number_string += CubitString(get_point_version());
-   CubitString version_string = "ACIS Version ";
-   version_string += number_string;
-   return version_string;
+  CubitString number_string = get_major_version();
+  number_string += ".";
+  number_string += CubitString(get_minor_version());
+  number_string += ".";
+  number_string += CubitString(get_point_version());
+  CubitString version_string = "ACIS Version ";
+  version_string += number_string;
+  return version_string;
 }
 
 //-------------------------------------------------------------------------
@@ -394,7 +393,7 @@
 
 const type_info& AcisModifyEngine::entity_type_info() const
 {
-   return typeid(AcisModifyEngine);
+  return typeid(AcisModifyEngine);
 }
 
 //-------------------------------------------------------------------------
@@ -409,20 +408,20 @@
 
 BodySM* AcisModifyEngine::sphere(double radius) const
 {
-   BODY* BODYPtr = NULL;
+  BODY* BODYPtr = NULL;
 
-     // Create a BODY that represents the cuboid
-   outcome result = api_make_sphere ( radius, BODYPtr );
-   if (!result.ok())
-   {
+  // Create a BODY that represents the cuboid
+  outcome result = api_make_sphere ( radius, BODYPtr );
+  if (!result.ok())
+    {
       PRINT_ERROR("In AcisModifyEngine::sphere, Line# %d\n"
                   "       Problems creating a sphere\n", __LINE__ );
       return NULL ;
-   }
+    }
 
-     // Build a Body from the BODY and return it.
-   BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr);
-   return this_bodysm;
+  // Build a Body from the BODY and return it.
+  BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr);
+  return this_bodysm;
 }
 
 //-------------------------------------------------------------------------
@@ -437,31 +436,31 @@
 BodySM* AcisModifyEngine::brick(double width, double depth,
                                 double height) const
 {
-   BODY* BODYPtr = NULL;
+  BODY* BODYPtr = NULL;
 
-     // Create a BODY that represents the cuboid
-   outcome result = api_make_cuboid ( width, depth, height, BODYPtr );
-   if (!result.ok())
-   {
+  // Create a BODY that represents the cuboid
+  outcome result = api_make_cuboid ( width, depth, height, BODYPtr );
+  if (!result.ok())
+    {
       PRINT_ERROR("In AcisModifyEngine::brick, Line# %d\n"
                   "       Problems creating a brick\n", __LINE__);
       return NULL ;
-   }
+    }
 
-   BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr);
-   return this_bodysm;
+  BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr);
+  return this_bodysm;
 }
 
 BodySM* AcisModifyEngine::brick( const CubitVector &center,
                                  const CubitVector axes[3],
                                  const CubitVector &extension ) const
 {
-   BODY* BODY_ptr;
+  BODY* BODY_ptr;
 
-   BODY_ptr = make_brick_BODY( center, axes, extension );
+  BODY_ptr = make_brick_BODY( center, axes, extension );
 
-   BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges( BODY_ptr );
-   return this_bodysm;
+  BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges( BODY_ptr );
+  return this_bodysm;
 }
 
 //-------------------------------------------------------------------------
@@ -477,20 +476,20 @@
 BodySM* AcisModifyEngine::prism( double height, int sides,
                                  double major, double minor) const
 {
-   BODY* BODYPtr = NULL;
+  BODY* BODYPtr = NULL;
 
-     // Create a BODY that represents the prism
-   outcome result = api_make_prism ( height, major, minor, sides, BODYPtr );
-   if (!result.ok())
-   {
+  // Create a BODY that represents the prism
+  outcome result = api_make_prism ( height, major, minor, sides, BODYPtr );
+  if (!result.ok())
+    {
       PRINT_ERROR("In AcisModifyEngine::prism, Line# %d\n"
                   "       Problems creating a prism\n", __LINE__);
       return NULL ;
-   }
+    }
 
-     // Build a Body from the BODY and return it.
-   BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr);
-   return this_bodysm;
+  // Build a Body from the BODY and return it.
+  BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr);
+  return this_bodysm;
 }
 
 //-------------------------------------------------------------------------
@@ -506,19 +505,19 @@
 BodySM* AcisModifyEngine::pyramid( double height, int sides, double major,
                                    double minor, double top ) const
 {
-   BODY* BODYPtr = NULL;
-     // Create a BODY that represents the pyramid
-   outcome result = api_make_pyramid ( height, major, minor, top,
-                                       sides, BODYPtr );
-   if (!result.ok())
-   {
+  BODY* BODYPtr = NULL;
+  // Create a BODY that represents the pyramid
+  outcome result = api_make_pyramid ( height, major, minor, top,
+				      sides, BODYPtr );
+  if (!result.ok())
+    {
       PRINT_ERROR("In AcisModifyEngine::pyramid, Line# %d\n"
                   "       Problems creating a pyramid\n", __LINE__);
       return NULL ;
-   }
-     // Build a Body from the BODY and return it.
-   BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr);
-   return this_bodysm;
+    }
+  // Build a Body from the BODY and return it.
+  BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr);
+  return this_bodysm;
 }
 
 //-------------------------------------------------------------------------
@@ -534,21 +533,23 @@
 BodySM* AcisModifyEngine::cylinder( double hi, double r1, double r2,
                                     double r3 ) const
 {
-   BODY* BODYPtr = NULL;
-     // Create a BODY that represents the cylinder
-   outcome result = api_make_frustum ( hi, r1, r2, r3, BODYPtr );
-   if (!result.ok())
-   {
+  BODY* BODYPtr = NULL;
+  // Create a BODY that represents the cylinder
+  outcome result = api_make_frustum ( hi, r1, r2, r3, BODYPtr );
+  if (!result.ok())
+    {
       PRINT_ERROR("In AcisModifyEngine::cylinder, Line# %d\n"
                   "       Problems creating a cylinder\n", __LINE__);
       return NULL ;
-   }
+    }
 
-     // Build a Body from the BODY and return it.
-   BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr);
-   return this_bodysm;
+  // Build a Body from the BODY and return it.
+
+  BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr);
+  return this_bodysm;
 }
 
+
 //-------------------------------------------------------------------------
 // Purpose       : Create a torus and return a pointer to the Body.
 //
@@ -561,18 +562,18 @@
 
 BodySM* AcisModifyEngine::torus( double r1, double r2 ) const
 {
-   BODY* BODYPtr = NULL;
-     // Create a BODY that represents the torus
-   outcome result = api_make_torus ( r1, r2, BODYPtr );
-   if (!result.ok())
-   {
+  BODY* BODYPtr = NULL;
+  // Create a BODY that represents the torus
+  outcome result = api_make_torus ( r1, r2, BODYPtr );
+  if (!result.ok())
+    {
       PRINT_ERROR("In AcisModifyEngine::torus, Line# %d\n"
                   "       Problems creating a torus\n", __LINE__);
       return NULL ;
-   }
-     // Build a Body from the BODY and return it.
-   BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr);
-   return this_bodysm;
+    }
+  // Build a Body from the BODY and return it.
+  BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr);
+  return this_bodysm;
 }
 
 //-------------------------------------------------------------------------
@@ -589,13 +590,13 @@
                                         const CubitVector& p3,
                                         const CubitVector& p4 ) const
 {
-   BODY* new_BODY = make_planar_quad_BODY( p1, p2, p3, p4 );
+  BODY* new_BODY = make_planar_quad_BODY( p1, p2, p3, p4 );
 
-   // Build a VGI Body (i.e, the entire VGI structure) from this
-   // ACIS BODY.
-   BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(new_BODY);
+  // Build a VGI Body (i.e, the entire VGI structure) from this
+  // ACIS BODY.
+  BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(new_BODY);
 
-   return this_bodysm;
+  return this_bodysm;
 }
 
 //-------------------------------------------------------------------------
@@ -611,138 +612,138 @@
 
 BodySM* AcisModifyEngine::copy_body ( BodySM* OSMEPtr) const
 {
-     // Make sure that we have a valid pointer
-   assert(OSMEPtr != NULL) ;
+  // Make sure that we have a valid pointer
+  assert(OSMEPtr != NULL) ;
 
-   BodyACIS* bodyACISPtr = CAST_TO(OSMEPtr, BodyACIS) ;
+  BodyACIS* bodyACISPtr = CAST_TO(OSMEPtr, BodyACIS) ;
 
-     // Make sure that we have a valid BodyACIS
-   assert(bodyACISPtr != NULL) ;
+  // Make sure that we have a valid BodyACIS
+  assert(bodyACISPtr != NULL) ;
 
-     // Get the ACIS BODY
-   BODY* BODY_ptr = bodyACISPtr->get_BODY_ptr() ;
+  // Get the ACIS BODY
+  BODY* BODY_ptr = bodyACISPtr->get_BODY_ptr() ;
 
-     // Construct a new BODY from what we have
-   BODY* new_BODY_ptr = this->copy_BODY(BODY_ptr) ;
+  // Construct a new BODY from what we have
+  BODY* new_BODY_ptr = this->copy_BODY(BODY_ptr) ;
 
-     // Build a VGI Body and return it.
-   BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(new_BODY_ptr);
-   return this_bodysm;
+  // Build a VGI Body and return it.
+  BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(new_BODY_ptr);
+  return this_bodysm;
 }
 
 CubitStatus AcisModifyEngine::imprint_BODYs (BODY* body1_ptr,
                                              BODY* body2_ptr) const
 {
-   CpuTimer imprint_BODYs_timer;
+  CpuTimer imprint_BODYs_timer;
 
-     // Imprints the 2 input ACIS BODYs. If something goes wrong, state is
-     // restored and CUBIT_FALSE is returned.
+  // Imprints the 2 input ACIS BODYs. If something goes wrong, state is
+  // restored and CUBIT_FALSE is returned.
 
-   CubitStatus status = CUBIT_FAILURE;
+  CubitStatus status = CUBIT_FAILURE;
 
-     // Use the BEGIN/END pair so that a roll-back is done by ACIS if something
-     // goes wrong in the api_imprint or api_check_entity operations
-   if ( GeometryModifyTool::get_all_edges_imprint() )
-   {
+  // Use the BEGIN/END pair so that a roll-back is done by ACIS if something
+  // goes wrong in the api_imprint or api_check_entity operations
+  if ( GeometryModifyTool::get_all_edges_imprint() )
+    {
       api_set_int_option("all_free_edges", TRUE );
-   }
+    }
 
-   outcome result = api_imprint(body1_ptr, body2_ptr);
+  outcome result = api_imprint(body1_ptr, body2_ptr);
 
-   //Gets rid of sliver curves/surfaces that could get produced by the imprint.
-   AcisModifyEngine::instance()->cleanup_slivers( body1_ptr );
-   AcisModifyEngine::instance()->cleanup_slivers( body2_ptr );
+  //Gets rid of sliver curves/surfaces that could get produced by the imprint.
+  AcisModifyEngine::instance()->cleanup_slivers( body1_ptr );
+  AcisModifyEngine::instance()->cleanup_slivers( body2_ptr );
 
-   if ( GeometryModifyTool::get_all_edges_imprint() )
-   {
+  if ( GeometryModifyTool::get_all_edges_imprint() )
+    {
       api_set_int_option("all_free_edges", FALSE );
-   }
+    }
 
-   if (DEBUG_FLAG(18))
-   {
+  if (DEBUG_FLAG(18))
+    {
       if (result.ok())
-      {
-         status = CUBIT_SUCCESS;
+	{
+	  status = CUBIT_SUCCESS;
 
-           // Now that the imprint operation has apparently succeeded (:-)
-           // test the resulting BODYs for correctness. The output of the
-           // api_check_entity procedure is sent to the file whose pointer
-           // is debug_file_ptr (an ACIS global file pointer).
+	  // Now that the imprint operation has apparently succeeded (:-)
+	  // test the resulting BODYs for correctness. The output of the
+	  // api_check_entity procedure is sent to the file whose pointer
+	  // is debug_file_ptr (an ACIS global file pointer).
 
-           // MJP Note:
-           // I do this test here because there are bugs in the imprint
-           // operation that result in invalid BODYs even though the api_imprint
-           // call may return a successful status. I've been told that the imprint
-           // operation will be a lot more stable in Version 2 -- and where have
-           // we heard this kind of stuff before?? :-)
+	  // MJP Note:
+	  // I do this test here because there are bugs in the imprint
+	  // operation that result in invalid BODYs even though the api_imprint
+	  // call may return a successful status. I've been told that the imprint
+	  // operation will be a lot more stable in Version 2 -- and where have
+	  // we heard this kind of stuff before?? :-)
 
-         FILE* save_dfp = NULL;
+	  FILE* save_dfp = NULL;
 
-           // Save the original value of the ACIS Debug File Pointer
-         save_dfp = debug_file_ptr;
+	  // Save the original value of the ACIS Debug File Pointer
+	  save_dfp = debug_file_ptr;
 
-           // Check the first entity and save the results of the check in the file,
-           // api_check_entity_output.txt
-         debug_file_ptr = fopen ("api_check_entity_output.txt", "w");
-         result = api_check_entity (body1_ptr, (ENTITY_LIST *)NULL);
-         if (debug_file_ptr) fclose (debug_file_ptr);
+	  // Check the first entity and save the results of the check in the file,
+	  // api_check_entity_output.txt
+	  debug_file_ptr = fopen ("api_check_entity_output.txt", "w");
+	  result = api_check_entity (body1_ptr, (ENTITY_LIST *)NULL);
+	  if (debug_file_ptr) fclose (debug_file_ptr);
 
-         if (result.ok())
-         {
+	  if (result.ok())
+	    {
               // Check the second entity and save the results of the check in the
               // file, api_check_entity_output.txt
-            debug_file_ptr = fopen("api_check_entity_output.txt", "w");
-            result = api_check_entity (body2_ptr, (ENTITY_LIST *)NULL);
-            if (debug_file_ptr) fclose (debug_file_ptr);
+	      debug_file_ptr = fopen("api_check_entity_output.txt", "w");
+	      result = api_check_entity (body2_ptr, (ENTITY_LIST *)NULL);
+	      if (debug_file_ptr) fclose (debug_file_ptr);
 
-            if (result.ok())
-            {
-               status = CUBIT_SUCCESS;
-            }
+	      if (result.ok())
+		{
+		  status = CUBIT_SUCCESS;
+		}
 
-            else
-            {
-               status = CUBIT_FAILURE;
-               AcisQueryEngine::instance()->ACIS_API_error (result);
-            }
-         }
-         else
-         {
-            status = CUBIT_FAILURE;
-            AcisQueryEngine::instance()->ACIS_API_error (result);
-         }
-           // Restore the original value of the ACIS Debug File Pointer
-         debug_file_ptr = save_dfp;
-      }
+	      else
+		{
+		  status = CUBIT_FAILURE;
+		  AcisQueryEngine::instance()->ACIS_API_error (result);
+		}
+	    }
+	  else
+	    {
+	      status = CUBIT_FAILURE;
+	      AcisQueryEngine::instance()->ACIS_API_error (result);
+	    }
+	  // Restore the original value of the ACIS Debug File Pointer
+	  debug_file_ptr = save_dfp;
+	}
       else
-      {
-         status = CUBIT_FAILURE;
-         AcisQueryEngine::instance()->ACIS_API_error (result);
-      }
-   }
-   if (result.ok())
-       status = CUBIT_SUCCESS;
-   else
-   {
-       // mieht just be no overlap, check smaller boxes
-     SPAbox box1 = get_body_box(body1_ptr);
-     SPAbox box2 = get_body_box(body2_ptr);
+	{
+	  status = CUBIT_FAILURE;
+	  AcisQueryEngine::instance()->ACIS_API_error (result);
+	}
+    }
+  if (result.ok())
+    status = CUBIT_SUCCESS;
+  else
+    {
+      // mieht just be no overlap, check smaller boxes
+      SPAbox box1 = get_body_box(body1_ptr);
+      SPAbox box2 = get_body_box(body2_ptr);
 
-     if (!body1_ptr || !body2_ptr || (box1 && box2))
-     {
-       if (DEBUG_FLAG(95))
-       {
-         PRINT_DEBUG_95( "Bodies were not "
-                         "imprinted.\n");
-         AcisQueryEngine::instance()->ACIS_API_error(result, "imprint Bodies");
-       }
-       status = CUBIT_FAILURE;
-     }
-   }
-   PRINT_DEBUG_3( "CPU time taken to imprint two BODYs: "
-               "%f secs\n", imprint_BODYs_timer.cpu_secs() ) ;
+      if (!body1_ptr || !body2_ptr || (box1 && box2))
+	{
+	  if (DEBUG_FLAG(95))
+	    {
+	      PRINT_DEBUG_95( "Bodies were not "
+			      "imprinted.\n");
+	      AcisQueryEngine::instance()->ACIS_API_error(result, "imprint Bodies");
+	    }
+	  status = CUBIT_FAILURE;
+	}
+    }
+  PRINT_DEBUG_3( "CPU time taken to imprint two BODYs: "
+		 "%f secs\n", imprint_BODYs_timer.cpu_secs() ) ;
 
-   return status;
+  return status;
 }
 
 //-------------------------------------------------------------------------
@@ -759,40 +760,40 @@
 BODY* AcisModifyEngine::copy_BODY (BODY* body_ptr,
                                    bool remove_attribs ) const
 {
-     // If the input pointer is NULL, return a NULL pointer
-   if (body_ptr == NULL)
-   {
+  // If the input pointer is NULL, return a NULL pointer
+  if (body_ptr == NULL)
+    {
       PRINT_ERROR("Cannot copy ACIS BODY - input pointer is NULL.\n");
       return (BODY *) NULL;
-   }
+    }
 
-   BODY* new_body_ptr = NULL;
+  BODY* new_body_ptr = NULL;
 
-   if( remove_attribs )
-     ATTRIB_CUBIT_OWNER::set_copyable( false );
+  if( remove_attribs )
+    ATTRIB_CUBIT_OWNER::set_copyable( false );
 
-   outcome result = api_copy_body(body_ptr, new_body_ptr);
+  outcome result = api_copy_body(body_ptr, new_body_ptr);
 
-   if (!result.ok())
-   {
+  if (!result.ok())
+    {
       AcisQueryEngine::instance()->ACIS_API_error (result);
       new_body_ptr = NULL;
-   }
-     // Before returning this new BODY, first make sure that all the CUBIT
-     // OWNER attributes are cleaned out of it
-   if( remove_attribs )
-     ATTRIB_CUBIT_OWNER::set_copyable( true );
-/*
-   if ( remove_attribs )
-   {
-     AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(new_body_ptr);
-   }
-*/
-   // Also make sure that any healing attributes are removed from it
+    }
+  // Before returning this new BODY, first make sure that all the CUBIT
+  // OWNER attributes are cleaned out of it
+  if( remove_attribs )
+    ATTRIB_CUBIT_OWNER::set_copyable( true );
+  /*
+    if ( remove_attribs )
+    {
+    AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(new_body_ptr);
+    }
+  */
+  // Also make sure that any healing attributes are removed from it
 #ifdef ACIS_HEALER
-   AcisHealerTool::instance()->end_BODY_for_healing( new_body_ptr );
+  AcisHealerTool::instance()->end_BODY_for_healing( new_body_ptr );
 #endif
-   return new_body_ptr;
+  return new_body_ptr;
 }
 
 CubitStatus AcisModifyEngine::surface_intersection( Surface *surface1_ptr,
@@ -800,42 +801,42 @@
                                                     DLIList<Curve*> &intersect_graph,
                                                     const double ) const
 {
-      //First make sure the entities are ACIS.
+  //First make sure the entities are ACIS.
   SurfaceACIS *surf_ACIS_1= CAST_TO(surface1_ptr,SurfaceACIS);
   SurfaceACIS *surf_ACIS_2= CAST_TO(surface2_ptr,SurfaceACIS);
   if ( !surf_ACIS_1 || !surf_ACIS_2 )
-  {
-    PRINT_ERROR("In AcisModifyEngine::surface_intersection\n"
-                "Not all entities are from the same engine.\n");
-    return CUBIT_FAILURE;
-  }
-    //Get the original bodies.
+    {
+      PRINT_ERROR("In AcisModifyEngine::surface_intersection\n"
+		  "Not all entities are from the same engine.\n");
+      return CUBIT_FAILURE;
+    }
+  //Get the original bodies.
   FACE* FACE1_ptr =  surf_ACIS_1->get_FACE_ptr();
   FACE* FACE2_ptr =  surf_ACIS_2->get_FACE_ptr();
   BODY* intersect_BODY = NULL;
 
-    //Now get the intersection.
+  //Now get the intersection.
   CubitBoolean intersecting = CUBIT_FALSE;
   CubitStatus ret = FACE_intersection(FACE1_ptr, FACE2_ptr,
                                       intersect_BODY, intersecting);
   if ( ret != CUBIT_SUCCESS )
     return ret;
   if ( !intersecting )
-  {
+    {
       //No intersection, we should have caught this before, but
       //just return with an empty edge list.
-    return CUBIT_SUCCESS;
-  }
+      return CUBIT_SUCCESS;
+    }
   ret = convert_WIRE( intersect_BODY, intersect_graph );
   if ( ret != CUBIT_SUCCESS )
     return ret;
 
-    //Okay we should have our fill of curves.
-    //Delete the intersection graph wire, which should
-    //be fine since we copied the curves.
+  //Okay we should have our fill of curves.
+  //Delete the intersection graph wire, which should
+  //be fine since we copied the curves.
   api_del_entity(intersect_BODY);
 
-    //return sucess!
+  //return sucess!
   return CUBIT_SUCCESS;
 }
 
@@ -854,27 +855,27 @@
     return CUBIT_FAILURE;
 
   BODY *sheet_BODY = this->create_infinite_plane_cutting_tool(
-    point_1, point_2, point_3, super_box, CUBIT_TRUE);
+							      point_1, point_2, point_3, super_box, CUBIT_TRUE);
 
   BODY* BODY_to_trim_to = AcisQueryEngine::get_BODY(body_to_trim_to);
   bool delete_attribs = CUBIT_TRUE;
   BODY* BODY_copy = this->copy_BODY(BODY_to_trim_to, delete_attribs);
   if (BODY_copy == NULL)
-  {
-    PRINT_ERROR("Cannot make a copy of the parent ACIS BODY of volume.\n"
-                "       mid plane creation failed.\n" );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR("Cannot make a copy of the parent ACIS BODY of volume.\n"
+		  "       mid plane creation failed.\n" );
+      return CUBIT_FAILURE;
+    }
 
   outcome result = api_intersect( BODY_copy, sheet_BODY );
 
   if ( !result.ok() )
-  {
-    api_del_entity(BODY_copy);
-    api_del_entity(sheet_BODY);
-    PRINT_ERROR("Problems creating midplane.\n");
-    return CUBIT_FAILURE;
-  }
+    {
+      api_del_entity(BODY_copy);
+      api_del_entity(sheet_BODY);
+      PRINT_ERROR("Problems creating midplane.\n");
+      return CUBIT_FAILURE;
+    }
 
   //Create a new cubit body for the imprinted body.
   midplane_body = AcisQueryEngine::instance()->
@@ -891,48 +892,48 @@
 // Date       : 03/07/06
 //=============================================================================
 CubitStatus AcisModifyEngine::get_spheric_mid_surface( Surface *surface_ptr1,
-				  Surface *surface_ptr2,
-				  BodySM *body_to_trim_to,
-				  BodySM *&midsurface_body ) const
+						       Surface *surface_ptr2,
+						       BodySM *body_to_trim_to,
+						       BodySM *&midsurface_body ) const
 {
   SurfaceACIS *surf_ACIS1 = CAST_TO(surface_ptr1, SurfaceACIS );
   FACE* FACE1_ptr = make_FACE( surf_ACIS1->get_FACE_ptr() ); 
   int surface_type = (&(FACE1_ptr->geometry()->equation()))->type();
   if( surface_type != sphere_type )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
-		 "       The CGM sphere is not an ASIS sphere (%d %d).\n", surface_type, SPHERE_SURFACE_TYPE );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
+		   "       The CGM sphere is not an ASIS sphere (%d %d).\n", surface_type, SPHERE_SURFACE_TYPE );
+      return CUBIT_FAILURE;
+    }
   SurfaceACIS *surf_ACIS2 = CAST_TO(surface_ptr2, SurfaceACIS );
   FACE* FACE2_ptr = make_FACE( surf_ACIS2->get_FACE_ptr() ); 
   surface_type = (&(FACE2_ptr->geometry()->equation()))->type();
   if( surface_type != sphere_type )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
-		 "       The CGM sphere is not an ASIS sphere (%d %d).\n", surface_type, SPHERE_SURFACE_TYPE );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
+		   "       The CGM sphere is not an ASIS sphere (%d %d).\n", surface_type, SPHERE_SURFACE_TYPE );
+      return CUBIT_FAILURE;
+    }
 
-//   surface const* acis_surface1 = &(FACE1_ptr->geometry()->equation());
-//   sphere const* sphere_surface1 = (sphere *)acis_surface1;
+  //   surface const* acis_surface1 = &(FACE1_ptr->geometry()->equation());
+  //   sphere const* sphere_surface1 = (sphere *)acis_surface1;
 
   SURFACE const* acis_SURFACE1 = FACE1_ptr->geometry();
   SPHERE const* SPHERE_SURFACE1 = (SPHERE *)acis_SURFACE1;
   SPAposition center1 = SPHERE_SURFACE1->centre();
 
-//   surface const* acis_surface2 = &(FACE2_ptr->geometry()->equation());
-//   sphere const* sphere_surface2 = (sphere *)acis_surface2;
+  //   surface const* acis_surface2 = &(FACE2_ptr->geometry()->equation());
+  //   sphere const* sphere_surface2 = (sphere *)acis_surface2;
   SURFACE const* acis_SURFACE2 = FACE2_ptr->geometry();
   SPHERE const* SPHERE_SURFACE2 = (SPHERE *)acis_SURFACE2;
   SPAposition center2 = SPHERE_SURFACE2->centre();
 
   if ( center1 != center2 )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
- 		 "       Not supported yet: spheres do not have the same center.\n" );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
+		   "       Not supported yet: spheres do not have the same center.\n" );
+      return CUBIT_FAILURE;
+    }
   
   CubitBox bounding_box = GeometryQueryTool::instance()->model_bounding_box();
   
@@ -956,52 +957,52 @@
 				    new_FACE_ptr );
   if (!result.ok() || new_FACE_ptr == NULL ||
       new_FACE_ptr->geometry() == NULL )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
-		 "       ACIS api_make_spface function failed.\n");
-    AcisQueryEngine::instance()->ACIS_API_error (result);
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
+		   "       ACIS api_make_spface function failed.\n");
+      AcisQueryEngine::instance()->ACIS_API_error (result);
+      return CUBIT_FAILURE;
+    }
   FACE *face_list[1];
   face_list[0] = new_FACE_ptr;
   result = api_sheet_from_ff( 1, face_list, sheet_BODY );
   if ( !result.ok() || sheet_BODY == NULL || sheet_BODY->lump() == NULL
-      || sheet_BODY->lump()->shell() == NULL ||
-      sheet_BODY->lump()->shell()->first_face() == NULL )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
-		 "       ACIS api_sheet_from_ff function failed.\n");
-    AcisQueryEngine::instance()->ACIS_API_error (result);
-    return CUBIT_FAILURE;
-  }
+       || sheet_BODY->lump()->shell() == NULL ||
+       sheet_BODY->lump()->shell()->first_face() == NULL )
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
+		   "       ACIS api_sheet_from_ff function failed.\n");
+      AcisQueryEngine::instance()->ACIS_API_error (result);
+      return CUBIT_FAILURE;
+    }
   result = api_body_to_2d( sheet_BODY );
   if ( !result.ok() )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
-		 "       ACIS api_body_to_2d function failed.\n");
-    AcisQueryEngine::instance()->ACIS_API_error (result);
-    return CUBIT_FAILURE;
-  } 
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
+		   "       ACIS api_body_to_2d function failed.\n");
+      AcisQueryEngine::instance()->ACIS_API_error (result);
+      return CUBIT_FAILURE;
+    } 
 
   BODY* BODY_to_trim_to = AcisQueryEngine::get_BODY(body_to_trim_to);
   bool delete_attribs = CUBIT_TRUE;
   BODY* BODY_copy = this->copy_BODY(BODY_to_trim_to, delete_attribs);
   if ( BODY_copy == NULL )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
-		 "       Cannot make a copy of the parent ACIS BODY of volume.\n" );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
+		   "       Cannot make a copy of the parent ACIS BODY of volume.\n" );
+      return CUBIT_FAILURE;
+    }
 
   result = api_intersect( BODY_copy, sheet_BODY );
   if ( !result.ok() )
-  {
-    api_del_entity( BODY_copy );    
-    api_del_entity( sheet_BODY );    
-    PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
-		 "       ACIS api_intersect function failed.\n" );
-    return CUBIT_FAILURE;
-  }
+    {
+      api_del_entity( BODY_copy );    
+      api_del_entity( sheet_BODY );    
+      PRINT_ERROR( "In AcisModifyEngine::get_spheric_mid_surface\n"
+		   "       ACIS api_intersect function failed.\n" );
+      return CUBIT_FAILURE;
+    }
 
   midsurface_body = AcisQueryEngine::instance()->populate_topology_bridges(sheet_BODY);
 
@@ -1016,28 +1017,28 @@
 // Date       : 03/07/06
 //=============================================================================
 CubitStatus AcisModifyEngine::get_conic_mid_surface( Surface *surface_ptr1,
-				  Surface *surface_ptr2,
-				  BodySM *body_to_trim_to,
-				  BodySM *&midsurface_body ) const
+						     Surface *surface_ptr2,
+						     BodySM *body_to_trim_to,
+						     BodySM *&midsurface_body ) const
 {
   SurfaceACIS *surf_ACIS1 = CAST_TO(surface_ptr1, SurfaceACIS );
   FACE* FACE1_ptr = make_FACE( surf_ACIS1->get_FACE_ptr() ); 
   int surface_type = (&(FACE1_ptr->geometry()->equation()))->type();
   if( surface_type != cone_type )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
-		 "       The CGM cone is not an ASIS cone (%d %d).\n", surface_type, CONE_SURFACE_TYPE );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
+		   "       The CGM cone is not an ASIS cone (%d %d).\n", surface_type, CONE_SURFACE_TYPE );
+      return CUBIT_FAILURE;
+    }
   SurfaceACIS *surf_ACIS2 = CAST_TO(surface_ptr2, SurfaceACIS );
   FACE* FACE2_ptr = make_FACE( surf_ACIS2->get_FACE_ptr() ); 
   surface_type = (&(FACE2_ptr->geometry()->equation()))->type();
   if( surface_type != cone_type )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
-		 "       The CGM cone is not an ASIS cone (%d %d).\n", surface_type, CONE_SURFACE_TYPE );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
+		   "       The CGM cone is not an ASIS cone (%d %d).\n", surface_type, CONE_SURFACE_TYPE );
+      return CUBIT_FAILURE;
+    }
 
   surface const* acis_surface1 = &(FACE1_ptr->geometry()->equation());
   cone const* cone_surface1 = (cone *)acis_surface1;
@@ -1052,34 +1053,34 @@
   if ( ( sine_angle1 != 0.0 ) || ( fabs( cosine_angle1 ) != 1.0 ) 
        ||
        ( sine_angle2 != 0.0 ) || ( fabs( cosine_angle2 ) != 1.0 ) )
-  {
-    if( ( sine_angle1 != sine_angle2 ) || ( cosine_angle1 != cosine_angle2 ) )
     {
-      PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
-		   "       Not supported yet: cones do not have the same major angle.\n" );
-      return CUBIT_FAILURE;
+      if( ( sine_angle1 != sine_angle2 ) || ( cosine_angle1 != cosine_angle2 ) )
+	{
+	  PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
+		       "       Not supported yet: cones do not have the same major angle.\n" );
+	  return CUBIT_FAILURE;
+	}
     }
-  }
 
   ellipse const* base1 = &cone_surface1->base;
   double ratio1 = base1->radius_ratio;
   ellipse const* base2 = &cone_surface2->base;
   double ratio2 = base2->radius_ratio;
   if( ratio1 != ratio2 )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
-		 "       Not supported yet: cones do not have the same radius ratios.\n" );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
+		   "       Not supported yet: cones do not have the same radius ratios.\n" );
+      return CUBIT_FAILURE;
+    }
 
   SPAunit_vector normal1 = base1->normal;
   SPAunit_vector normal2 = base2->normal;
   if ( ( normal1 != normal2 ) && ( - normal1 != normal2 ) )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
-		 "       Not supported yet: cones do not have the same axis of symmetry.\n" );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
+		   "       Not supported yet: cones do not have the same axis of symmetry.\n" );
+      return CUBIT_FAILURE;
+    }
 
   SPAposition const centre1 = base1->centre;
   SPAposition const centre2 = base2->centre;
@@ -1089,72 +1090,72 @@
 			centre2.y() - centre1.y(), 
 			centre2.z() - centre1.z() );
   if ( ! c1_to_c2.about_equal( null_vec ) )
-  {
-    CubitVector comm_dir( normal1.x(), normal1.y(), normal1.z() );
-    c1_to_c2.normalize();
-    if ( ( ! c1_to_c2.about_equal( comm_dir ) ) && ( ! (-c1_to_c2).about_equal( comm_dir ) ) )
     {
-      CubitVector const point_1( ( centre1.x() + centre2.x() ) * .5, 
-				 ( centre1.y() + centre2.y() ) * .5, 
-				 ( centre1.z() + centre2.z() ) * .5 );
-      CubitVector const point_2 = point_1 + comm_dir;
-      CubitVector const point_3 = point_1 + ( comm_dir * c1_to_c2 );
-      CubitStatus ret = this->get_mid_plane( point_1, point_2, point_3, 
-					     body_to_trim_to, midsurface_body );
+      CubitVector comm_dir( normal1.x(), normal1.y(), normal1.z() );
+      c1_to_c2.normalize();
+      if ( ( ! c1_to_c2.about_equal( comm_dir ) ) && ( ! (-c1_to_c2).about_equal( comm_dir ) ) )
+	{
+	  CubitVector const point_1( ( centre1.x() + centre2.x() ) * .5, 
+				     ( centre1.y() + centre2.y() ) * .5, 
+				     ( centre1.z() + centre2.z() ) * .5 );
+	  CubitVector const point_2 = point_1 + comm_dir;
+	  CubitVector const point_3 = point_1 + ( comm_dir * c1_to_c2 );
+	  CubitStatus ret = this->get_mid_plane( point_1, point_2, point_3, 
+						 body_to_trim_to, midsurface_body );
 
-      return ret;
+	  return ret;
+	}
     }
-  }
 
   CubitBox bounding_box = GeometryQueryTool::instance()->model_bounding_box();
   
   BODY *sheet_BODY;
   CubitBoolean cylinder = CUBIT_FALSE;
   if ( ( sine_angle1 == 0.0 ) && ( fabs( cosine_angle1 ) == 1.0 ) )
-  {
-    cylinder = CUBIT_TRUE;
-  }
+    {
+      cylinder = CUBIT_TRUE;
+    }
   double const st_ang = 0.;
   double const end_ang = 2. * CUBIT_PI;
   double const height = 2. * (bounding_box.diagonal()).length();
   CubitVector center_vec;
   CubitVector temp_norm( normal1.x(), normal1.y(), normal1.z());
   if ( ! cylinder )
-  {
-    if ( sine_angle1 > 0.0 && cosine_angle1 > 0.0 )
     {
-      sine_angle1 = - sine_angle1;
-      temp_norm *= - 1.0;
+      if ( sine_angle1 > 0.0 && cosine_angle1 > 0.0 )
+	{
+	  sine_angle1 = - sine_angle1;
+	  temp_norm *= - 1.0;
+	}
+      else if ( sine_angle1 < 0.0 && cosine_angle1 < 0.0 )
+	{
+	  cosine_angle1 = - cosine_angle1;
+	  temp_norm *= - 1.0;
+	}
+      //make center of surface along axis, 1/2 height of 
+      //bounding box of entire model. 
+      CubitVector root_vec( centre1.x(), centre1.y(), centre1.z() );
+      center_vec = root_vec + ( -.5 * height) * temp_norm; 
     }
-    else if ( sine_angle1 < 0.0 && cosine_angle1 < 0.0 )
+  else
     {
-      cosine_angle1 = - cosine_angle1;
-      temp_norm *= - 1.0;
+      CubitVector root_vec( centre1.x(), centre1.y(), centre1.z() );
+      center_vec = .5 * height * temp_norm;
+      center_vec = root_vec - center_vec;
     }
-    //make center of surface along axis, 1/2 height of 
-    //bounding box of entire model. 
-    CubitVector root_vec( centre1.x(), centre1.y(), centre1.z() );
-    center_vec = root_vec + ( -.5 * height) * temp_norm; 
-   }
-  else
-  {
-    CubitVector root_vec( centre1.x(), centre1.y(), centre1.z() );
-    center_vec = .5 * height * temp_norm;
-    center_vec = root_vec - center_vec;
-  }
   SPAposition const center ( center_vec.x(), center_vec.y(), center_vec.z() );
 
   SPAvector const major_axis1 = base1->major_axis; 
   SPAvector const major_axis2 = base2->major_axis; 
   SPAvector newmajor_axis;
   if ( cosine_angle1 * cosine_angle2 < 0. )
-   {
-     newmajor_axis = ( major_axis1 - major_axis2 ) * .5;
-   }
+    {
+      newmajor_axis = ( major_axis1 - major_axis2 ) * .5;
+    }
   else
-   {
-     newmajor_axis = ( major_axis1 + major_axis2 ) * .5;
-   }
+    {
+      newmajor_axis = ( major_axis1 + major_axis2 ) * .5;
+    }
 
   FACE *new_FACE_ptr = NULL;
   outcome result = api_make_cnface( center, 
@@ -1169,52 +1170,52 @@
 				    new_FACE_ptr );
   if (!result.ok() || new_FACE_ptr == NULL ||
       new_FACE_ptr->geometry() == NULL )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
-		 "       ACIS api_make_cnface function failed.\n");
-    AcisQueryEngine::instance()->ACIS_API_error (result);
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
+		   "       ACIS api_make_cnface function failed.\n");
+      AcisQueryEngine::instance()->ACIS_API_error (result);
+      return CUBIT_FAILURE;
+    }
   FACE *face_list[1];
   face_list[0] = new_FACE_ptr;
   result = api_sheet_from_ff( 1, face_list, sheet_BODY );
   if ( !result.ok() || sheet_BODY == NULL || sheet_BODY->lump() == NULL
-      || sheet_BODY->lump()->shell() == NULL ||
-      sheet_BODY->lump()->shell()->first_face() == NULL )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
-		 "       ACIS api_sheet_from_ff function failed.\n");
-    AcisQueryEngine::instance()->ACIS_API_error (result);
-    return CUBIT_FAILURE;
-  }
+       || sheet_BODY->lump()->shell() == NULL ||
+       sheet_BODY->lump()->shell()->first_face() == NULL )
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
+		   "       ACIS api_sheet_from_ff function failed.\n");
+      AcisQueryEngine::instance()->ACIS_API_error (result);
+      return CUBIT_FAILURE;
+    }
   result = api_body_to_2d( sheet_BODY );
   if ( !result.ok() )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
-		 "       ACIS api_body_to_2d function failed.\n");
-    AcisQueryEngine::instance()->ACIS_API_error (result);
-    return CUBIT_FAILURE;
-  } 
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
+		   "       ACIS api_body_to_2d function failed.\n");
+      AcisQueryEngine::instance()->ACIS_API_error (result);
+      return CUBIT_FAILURE;
+    } 
   
   BODY* BODY_to_trim_to = AcisQueryEngine::get_BODY(body_to_trim_to);
   bool delete_attribs = CUBIT_TRUE;
   BODY* BODY_copy = this->copy_BODY(BODY_to_trim_to, delete_attribs);
   if ( BODY_copy == NULL )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
-		 "       Cannot make a copy of the parent ACIS BODY of volume.\n" );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
+		   "       Cannot make a copy of the parent ACIS BODY of volume.\n" );
+      return CUBIT_FAILURE;
+    }
 
   result = api_intersect( BODY_copy, sheet_BODY );
   if ( !result.ok() )
-  {
-    api_del_entity( BODY_copy );    
-    api_del_entity( sheet_BODY );    
-    PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
-		 "       ACIS api_intersect function failed.\n" );
-    return CUBIT_FAILURE;
-  }
+    {
+      api_del_entity( BODY_copy );    
+      api_del_entity( sheet_BODY );    
+      PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
+		   "       ACIS api_intersect function failed.\n" );
+      return CUBIT_FAILURE;
+    }
 
   midsurface_body = AcisQueryEngine::instance()->populate_topology_bridges(sheet_BODY);
 
@@ -1229,64 +1230,64 @@
 // Date       : 03/07/06
 //=============================================================================
 CubitStatus AcisModifyEngine::get_toric_mid_surface( Surface *surface_ptr1,
-				  Surface *surface_ptr2,
-				  BodySM *body_to_trim_to,
-				  BodySM *&midsurface_body ) const
+						     Surface *surface_ptr2,
+						     BodySM *body_to_trim_to,
+						     BodySM *&midsurface_body ) const
 {
   SurfaceACIS *surf_ACIS1 = CAST_TO(surface_ptr1, SurfaceACIS );
   FACE* FACE1_ptr = make_FACE( surf_ACIS1->get_FACE_ptr() ); 
   int surface_type = (&(FACE1_ptr->geometry()->equation()))->type();
   if( surface_type != torus_type )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
-		 "       The CGM cone is not an ASIS torus (%d %d).\n", surface_type, CONE_SURFACE_TYPE );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
+		   "       The CGM cone is not an ASIS torus (%d %d).\n", surface_type, CONE_SURFACE_TYPE );
+      return CUBIT_FAILURE;
+    }
   SurfaceACIS *surf_ACIS2 = CAST_TO(surface_ptr2, SurfaceACIS );
   FACE* FACE2_ptr = make_FACE( surf_ACIS2->get_FACE_ptr() ); 
   surface_type = (&(FACE2_ptr->geometry()->equation()))->type();
   if( surface_type != torus_type )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
-		 "       The CGM cone is not an ASIS torus (%d %d).\n", surface_type, CONE_SURFACE_TYPE );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
+		   "       The CGM cone is not an ASIS torus (%d %d).\n", surface_type, CONE_SURFACE_TYPE );
+      return CUBIT_FAILURE;
+    }
 
-//   surface const* acis_surface1 = &(FACE1_ptr->geometry()->equation());
-//   torus const* torus_surface1 = (torus *)acis_surface1;
+  //   surface const* acis_surface1 = &(FACE1_ptr->geometry()->equation());
+  //   torus const* torus_surface1 = (torus *)acis_surface1;
   SURFACE const* acis_SURFACE1 = FACE1_ptr->geometry();
   TORUS const* TORUS_SURFACE1 = (TORUS *)acis_SURFACE1;
   double major_radius1 = TORUS_SURFACE1->major_radius();
 
-//   surface const* acis_surface2 = &(FACE2_ptr->geometry()->equation());
-//   torus const* torus_surface2 = (torus *)acis_surface2;
+  //   surface const* acis_surface2 = &(FACE2_ptr->geometry()->equation());
+  //   torus const* torus_surface2 = (torus *)acis_surface2;
   SURFACE const* acis_SURFACE2 = FACE2_ptr->geometry();
   TORUS const* TORUS_SURFACE2 = (TORUS *)acis_SURFACE2;
   double major_radius2 = TORUS_SURFACE2->major_radius();
   if ( major_radius1 != major_radius2 )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
- 		 "       Not supported yet: torii do not have the same radii.\n" );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
+		   "       Not supported yet: torii do not have the same radii.\n" );
+      return CUBIT_FAILURE;
+    }
 
   SPAposition center1 = TORUS_SURFACE1->centre();
   SPAposition center2 = TORUS_SURFACE2->centre();
   if ( center1 != center2 )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
- 		 "       Not supported yet: torii do not have the same center.\n" );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
+		   "       Not supported yet: torii do not have the same center.\n" );
+      return CUBIT_FAILURE;
+    }
   
   SPAunit_vector normal1 = TORUS_SURFACE1->normal();
   SPAunit_vector normal2 = TORUS_SURFACE2->normal();
   if ( ( normal1 != normal2 ) && ( - normal1 != normal2 ) )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
-		 "       Not supported yet: torii do not have the same axis of symmetry.\n" );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_conic_mid_surface\n"
+		   "       Not supported yet: torii do not have the same axis of symmetry.\n" );
+      return CUBIT_FAILURE;
+    }
 
   CubitBox bounding_box = GeometryQueryTool::instance()->model_bounding_box();
 
@@ -1310,52 +1311,52 @@
 				    new_FACE_ptr );
   if (!result.ok() || new_FACE_ptr == NULL ||
       new_FACE_ptr->geometry() == NULL )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
-		 "       ACIS api_make_trface function failed.\n");
-    AcisQueryEngine::instance()->ACIS_API_error (result);
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
+		   "       ACIS api_make_trface function failed.\n");
+      AcisQueryEngine::instance()->ACIS_API_error (result);
+      return CUBIT_FAILURE;
+    }
   FACE *face_list[1];
   face_list[0] = new_FACE_ptr;
   result = api_sheet_from_ff( 1, face_list, sheet_BODY );
   if ( !result.ok() || sheet_BODY == NULL || sheet_BODY->lump() == NULL
-      || sheet_BODY->lump()->shell() == NULL ||
-      sheet_BODY->lump()->shell()->first_face() == NULL )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
-		 "       ACIS api_sheet_from_ff function failed.\n");
-    AcisQueryEngine::instance()->ACIS_API_error (result);
-    return CUBIT_FAILURE;
-  }
+       || sheet_BODY->lump()->shell() == NULL ||
+       sheet_BODY->lump()->shell()->first_face() == NULL )
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
+		   "       ACIS api_sheet_from_ff function failed.\n");
+      AcisQueryEngine::instance()->ACIS_API_error (result);
+      return CUBIT_FAILURE;
+    }
   result = api_body_to_2d( sheet_BODY );
   if ( !result.ok() )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
-		 "       ACIS api_body_to_2d function failed.\n");
-    AcisQueryEngine::instance()->ACIS_API_error (result);
-    return CUBIT_FAILURE;
-  } 
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
+		   "       ACIS api_body_to_2d function failed.\n");
+      AcisQueryEngine::instance()->ACIS_API_error (result);
+      return CUBIT_FAILURE;
+    } 
 
   BODY* BODY_to_trim_to = AcisQueryEngine::get_BODY(body_to_trim_to);
   bool delete_attribs = CUBIT_TRUE;
   BODY* BODY_copy = this->copy_BODY(BODY_to_trim_to, delete_attribs);
   if ( BODY_copy == NULL )
-  {
-    PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
-		 "       Cannot make a copy of the parent ACIS BODY of volume.\n" );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
+		   "       Cannot make a copy of the parent ACIS BODY of volume.\n" );
+      return CUBIT_FAILURE;
+    }
 
   result = api_intersect( BODY_copy, sheet_BODY );
   if ( !result.ok() )
-  {
-    api_del_entity( BODY_copy );    
-    api_del_entity( sheet_BODY );    
-    PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
-		 "       ACIS api_intersect function failed.\n" );
-    return CUBIT_FAILURE;
-  }
+    {
+      api_del_entity( BODY_copy );    
+      api_del_entity( sheet_BODY );    
+      PRINT_ERROR( "In AcisModifyEngine::get_toric_mid_surface\n"
+		   "       ACIS api_intersect function failed.\n" );
+      return CUBIT_FAILURE;
+    }
 
   midsurface_body = AcisQueryEngine::instance()->populate_topology_bridges(sheet_BODY);
 
@@ -1379,8 +1380,8 @@
                                              CubitBoolean keep_old_body,
                                              CubitBoolean preview ) const
 {
-    return AcisTweakTool::instance()->tweak_chamfer( curve_list, left_offset,
-      new_bodysm_list, right_offset, keep_old_body, preview );
+  return AcisTweakTool::instance()->tweak_chamfer( curve_list, left_offset,
+						   new_bodysm_list, right_offset, keep_old_body, preview );
 }
 
 //=============================================================================
@@ -1407,8 +1408,8 @@
                                  CubitBoolean preview ) const
 {
   return AcisTweakTool::instance()->tweak_chamfer( ref_vertex_list, offset1,
-    new_bodysm_list, edge1, offset2, edge2, offset3, edge3, keep_old_body,
-    preview );
+						   new_bodysm_list, edge1, offset2, edge2, offset3, edge3, keep_old_body,
+						   preview );
 }
 
 //=============================================================================
@@ -1425,8 +1426,8 @@
                                             CubitBoolean keep_old_body,
                                             CubitBoolean preview ) const
 {
-    return AcisTweakTool::instance()->tweak_fillet( curve_list, radius,
-      new_bodysm_list, keep_old_body, preview );
+  return AcisTweakTool::instance()->tweak_fillet( curve_list, radius,
+						  new_bodysm_list, keep_old_body, preview );
 }
 
 //=============================================================================
@@ -1446,7 +1447,7 @@
                                             CubitBoolean preview ) const
 {
   return AcisTweakTool::instance()->tweak_fillet( curve_ptr, start_radius,
-    end_radius, new_bodysm_ptr, keep_old_body, preview );
+						  end_radius, new_bodysm_ptr, keep_old_body, preview );
 }
 
 //=============================================================================
@@ -1465,7 +1466,7 @@
                                 CubitBoolean preview ) const
 {
   return AcisTweakTool::instance()->tweak_fillet( ref_vertex_list, radius,
-    new_bodysm_list, keep_old_body, preview );
+						  new_bodysm_list, keep_old_body, preview );
 }
 
 //=============================================================================
@@ -1481,8 +1482,8 @@
                                           CubitBoolean keep_old_body,
                                           CubitBoolean preview ) const
 {
-   return AcisTweakTool::instance()->tweak_move( surface_list, delta,
-     new_bodysm_list, keep_old_body, preview );
+  return AcisTweakTool::instance()->tweak_move( surface_list, delta,
+						new_bodysm_list, keep_old_body, preview );
 }
 
 //=============================================================================
@@ -1499,7 +1500,7 @@
                                           CubitBoolean preview ) const
 {
   return AcisTweakTool::instance()->tweak_move( curve_list, delta,
-     new_bodysm_list, keep_old_body, preview );
+						new_bodysm_list, keep_old_body, preview );
 }
 
 //=============================================================================
@@ -1516,8 +1517,8 @@
                                             CubitBoolean keep_old_body,
                                             CubitBoolean preview ) const
 {
-   return AcisTweakTool::instance()->tweak_offset( surface_list,
-     offset_distance, new_bodysm_list, keep_old_body, preview );
+  return AcisTweakTool::instance()->tweak_offset( surface_list,
+						  offset_distance, new_bodysm_list, keep_old_body, preview );
 }
 
 //=============================================================================
@@ -1535,7 +1536,7 @@
                                             CubitBoolean preview ) const
 {
   return AcisTweakTool::instance()->tweak_offset( curve_list, offset_distance,
-    new_bodysm_list, keep_old_body, preview );
+						  new_bodysm_list, keep_old_body, preview );
 }
 
 //=============================================================================
@@ -1553,8 +1554,8 @@
                                             CubitBoolean keep_old_body,
                                             CubitBoolean preview ) const
 {
-   return AcisTweakTool::instance()->tweak_remove( ref_face_list,
-     new_bodysm_list, extend_adjoining, keep_surface, keep_old_body, preview );
+  return AcisTweakTool::instance()->tweak_remove( ref_face_list,
+						  new_bodysm_list, extend_adjoining, keep_surface, keep_old_body, preview );
 }
 
 //================================================================================
@@ -1569,7 +1570,7 @@
                                             CubitBoolean preview ) const
 {
   return AcisTweakTool::instance()->tweak_remove( curve_list, new_bodysm_list,
-    keep_old_body, preview );
+						  keep_old_body, preview );
 }
 
 //=============================================================================
@@ -1587,8 +1588,8 @@
                                             CubitBoolean keep_old_body,
                                             CubitBoolean preview ) const
 {
-   return AcisTweakTool::instance()->tweak_target( surface_list, target_face_list,
-     new_bodysm_list, reverse_flg, keep_old_body, preview );
+  return AcisTweakTool::instance()->tweak_target( surface_list, target_face_list,
+						  new_bodysm_list, reverse_flg, keep_old_body, preview );
 }
 
 //=============================================================================
@@ -1608,7 +1609,7 @@
                                 CubitBoolean preview ) const
 {
   return AcisTweakTool::instance()->tweak_target( curve_list, target_surf_list,
-    new_body_list, reverse_flg, keep_old_bodies, preview );
+						  new_body_list, reverse_flg, keep_old_bodies, preview );
 }
 
 //=============================================================================
@@ -1630,7 +1631,7 @@
                                 CubitBoolean preview ) const
 {
   return AcisTweakTool::instance()->tweak_target( curve_list, target_curve_list,
-    new_body_list, reverse_flg, keep_old_bodies, preview );
+						  new_body_list, reverse_flg, keep_old_bodies, preview );
 }
 
 //================================================================================
@@ -1643,8 +1644,8 @@
                                                   DLIList<DLIList<CubitVector*>*> &vec_lists_v,
                                                   double net_tol, CubitBoolean heal ) const
 {
-   return AcisSurfaceTool::instance()->create_net_surface( new_body, vec_lists_u, vec_lists_v,
-                                                           net_tol, heal );
+  return AcisSurfaceTool::instance()->create_net_surface( new_body, vec_lists_u, vec_lists_v,
+							  net_tol, heal );
 }
 
 //================================================================================
@@ -1655,7 +1656,7 @@
 CubitStatus AcisModifyEngine::create_net_surface( DLIList<Curve*>& u_curves, DLIList<Curve*>& v_curves,
                                                   BodySM *& new_body, double net_tol, CubitBoolean heal ) const
 {
-   return AcisSurfaceTool::instance()->create_net_surface( u_curves, v_curves, new_body, net_tol, heal );
+  return AcisSurfaceTool::instance()->create_net_surface( u_curves, v_curves, new_body, net_tol, heal );
 }
 
 //================================================================================
@@ -1665,7 +1666,7 @@
 //================================================================================
 CubitStatus AcisModifyEngine::create_offset_surface( Surface* ref_face_ptr, BodySM*& new_body, double offset_distance ) const
 {
-   return AcisSurfaceTool::instance()->create_offset_surface( ref_face_ptr, new_body, offset_distance );
+  return AcisSurfaceTool::instance()->create_offset_surface( ref_face_ptr, new_body, offset_distance );
 }
 
 //================================================================================
@@ -1675,7 +1676,7 @@
 //================================================================================
 CubitStatus AcisModifyEngine::create_offset_body( BodySM* body_ptr, BodySM*& new_body, double offset_distance ) const
 {
-   return AcisSurfaceTool::instance()->create_offset_body( body_ptr, new_body, offset_distance );
+  return AcisSurfaceTool::instance()->create_offset_body( body_ptr, new_body, offset_distance );
 }
 
 //================================================================================
@@ -1685,7 +1686,7 @@
 //================================================================================
 CubitStatus AcisModifyEngine::create_skin_surface( DLIList<Curve*>& curves, BodySM*& new_body ) const
 {
-   return AcisSurfaceTool::instance()->create_skin_surface( curves, new_body );
+  return AcisSurfaceTool::instance()->create_skin_surface( curves, new_body );
 }
 
 //================================================================================
@@ -1700,9 +1701,9 @@
                                              CubitBoolean align_direction, CubitBoolean perpendicular,
                                              CubitBoolean simplify_option ) const
 {
-   return AcisSurfaceTool::instance()->loft_surfaces( face1, takeoff1, face2, takeoff2, new_body,
-                                                      arc_length_option, twist_option, align_direction,
-                                                      perpendicular, simplify_option );
+  return AcisSurfaceTool::instance()->loft_surfaces( face1, takeoff1, face2, takeoff2, new_body,
+						     arc_length_option, twist_option, align_direction,
+						     perpendicular, simplify_option );
 }
 
 //================================================================================
@@ -1717,9 +1718,9 @@
                                                      CubitBoolean align_direction, CubitBoolean perpendicular,
                                                      CubitBoolean simplify_option ) const
 {
-   return AcisSurfaceTool::instance()->loft_surfaces_to_body( face1, takeoff1, face2, takeoff2, new_body,
-                                                              arc_length_option, twist_option, align_direction,
-                                                              perpendicular, simplify_option );
+  return AcisSurfaceTool::instance()->loft_surfaces_to_body( face1, takeoff1, face2, takeoff2, new_body,
+							     arc_length_option, twist_option, align_direction,
+							     perpendicular, simplify_option );
 }
 
 //================================================================================
@@ -1730,7 +1731,7 @@
 CubitStatus AcisModifyEngine::create_surface( DLIList<CubitVector*>& vec_list, BodySM *&new_body, Surface *ref_face_ptr,
                                               CubitBoolean project_points ) const
 {
-   return AcisSurfaceTool::instance()->create_surface( vec_list, new_body, ref_face_ptr, project_points );
+  return AcisSurfaceTool::instance()->create_surface( vec_list, new_body, ref_face_ptr, project_points );
 }
 
 //================================================================================
@@ -1742,7 +1743,7 @@
                                                    Surface *ref_face1, double leg1, Surface *ref_face2, double leg2,
                                                    BodySM *&new_body ) const
 {
-   return AcisSurfaceTool::instance()->create_weld_surface( root, ref_face1, leg1, ref_face2, leg2, new_body );
+  return AcisSurfaceTool::instance()->create_weld_surface( root, ref_face1, leg1, ref_face2, leg2, new_body );
 }
 
 //-------------------------------------------------------------------------
@@ -1766,38 +1767,38 @@
                                                  BODY *&intersect_graph,
                                                  CubitBoolean &interfering ) const
 {
-    // Make sure we have 2 non-NULL, valid BODYs first.
+  // Make sure we have 2 non-NULL, valid BODYs first.
   if ( FACE1_ptr == NULL || !IS_ENTITY_TYPE( FACE1_ptr, FACE ) ||
        FACE2_ptr == NULL || !IS_ENTITY_TYPE( FACE2_ptr, FACE ) )
-  {
-    PRINT_ERROR("BUG: In AcisModifyEngine::BODY_intersection\n"
-                "     One or both input FACE's are NULL or invalid.\n");
-    assert(0);
-    return CUBIT_FAILURE;
-  }
-    //make copies to make sure nothing bad happens to the FACES.
+    {
+      PRINT_ERROR("BUG: In AcisModifyEngine::BODY_intersection\n"
+		  "     One or both input FACE's are NULL or invalid.\n");
+      assert(0);
+      return CUBIT_FAILURE;
+    }
+  //make copies to make sure nothing bad happens to the FACES.
   FACE* copy_1 = make_FACE(FACE1_ptr);
   FACE* copy_2 = make_FACE(FACE2_ptr);
 
   intersect_graph = NULL;
 
-    // Create the intersection graph between the given bodies
+  // Create the intersection graph between the given bodies
   outcome result = api_fafa_int(copy_1, copy_2,
                                 intersect_graph);
 
   if (!result.ok() || intersect_graph == NULL )
-  {
+    {
       // Find out if the returned "slice" is empty
-    interfering = CUBIT_FALSE;
-  }
+      interfering = CUBIT_FALSE;
+    }
   else
-  {
-    interfering = CUBIT_TRUE;
-  }
-    //now delete the copies.
+    {
+      interfering = CUBIT_TRUE;
+    }
+  //now delete the copies.
   api_delent(copy_1);
   api_delent(copy_2);
-    //return success.
+  //return success.
   return CUBIT_SUCCESS;
 }
 
@@ -1807,101 +1808,101 @@
 CubitStatus AcisModifyEngine::convert_WIRE( BODY *wire_BODY,
                                             DLIList <Curve*> &curve_list ) const
 {
-    //Now get the edges from the wire body (int_graph), and create
-    //ref edges.
-    DLIList <EDGE*> EDGE_list;
-    WIRE *cur_WIRE = NULL;
-    LUMP *cur_LUMP = NULL;
-    // Make sure the wire is OK, and get the appropriate entity
-    // Get a WIRE if it's there
-    if ( wire_BODY->wire() == NULL ||
-        wire_BODY->wire()->coedge() == NULL ||
-        wire_BODY->wire()->coedge()->edge() == NULL )
+  //Now get the edges from the wire body (int_graph), and create
+  //ref edges.
+  DLIList <EDGE*> EDGE_list;
+  WIRE *cur_WIRE = NULL;
+  LUMP *cur_LUMP = NULL;
+  // Make sure the wire is OK, and get the appropriate entity
+  // Get a WIRE if it's there
+  if ( wire_BODY->wire() == NULL ||
+       wire_BODY->wire()->coedge() == NULL ||
+       wire_BODY->wire()->coedge()->edge() == NULL )
     {
-        // If there was no WIRE, see if there's a lump
-        if(wire_BODY->lump() != NULL &&
-            wire_BODY->lump()->shell() != NULL &&
-            wire_BODY->lump()->shell()->wire() != NULL &&
-            wire_BODY->lump()->shell()->wire()->coedge() != NULL &&
-            wire_BODY->lump()->shell()->wire()->coedge()->edge() != NULL )
+      // If there was no WIRE, see if there's a lump
+      if(wire_BODY->lump() != NULL &&
+	 wire_BODY->lump()->shell() != NULL &&
+	 wire_BODY->lump()->shell()->wire() != NULL &&
+	 wire_BODY->lump()->shell()->wire()->coedge() != NULL &&
+	 wire_BODY->lump()->shell()->wire()->coedge()->edge() != NULL )
         {
-            cur_LUMP = wire_BODY->lump();
+	  cur_LUMP = wire_BODY->lump();
         }
-        else
+      else
         {
-            PRINT_ERROR("Non-existent wire body in convert_WIRE function.\n");
-            return CUBIT_FAILURE;
+	  PRINT_ERROR("Non-existent wire body in convert_WIRE function.\n");
+	  return CUBIT_FAILURE;
         }
     }
-    else
+  else
     {
-        cur_WIRE = wire_BODY->wire();
+      cur_WIRE = wire_BODY->wire();
     }
-    LUMP *start_LUMP = cur_LUMP;
-    do{
-        if((wire_BODY->wire() == NULL ||
-            wire_BODY->wire()->coedge() == NULL ||
-            wire_BODY->wire()->coedge()->edge() == NULL ) &&
-            wire_BODY->lump() != NULL &&
-            wire_BODY->lump()->shell() != NULL &&
-            wire_BODY->lump()->shell()->wire() != NULL &&
-            wire_BODY->lump()->shell()->wire()->coedge() != NULL &&
-            wire_BODY->lump()->shell()->wire()->coedge()->edge() != NULL )
-        {
-            cur_WIRE = cur_LUMP->shell()->wire();
-        }
+  LUMP *start_LUMP = cur_LUMP;
+  do{
+    if((wire_BODY->wire() == NULL ||
+	wire_BODY->wire()->coedge() == NULL ||
+	wire_BODY->wire()->coedge()->edge() == NULL ) &&
+       wire_BODY->lump() != NULL &&
+       wire_BODY->lump()->shell() != NULL &&
+       wire_BODY->lump()->shell()->wire() != NULL &&
+       wire_BODY->lump()->shell()->wire()->coedge() != NULL &&
+       wire_BODY->lump()->shell()->wire()->coedge()->edge() != NULL )
+      {
+	cur_WIRE = cur_LUMP->shell()->wire();
+      }
 
-        WIRE *start_WIRE = cur_WIRE;
+    WIRE *start_WIRE = cur_WIRE;
 
-        if (cur_WIRE != NULL){
-            do {
-                COEDGE *start_COEDGE = cur_WIRE->coedge();
-                COEDGE *cur_COEDGE = start_COEDGE;
-                do{
-                    EDGE *cur_EDGE = cur_COEDGE->edge();
-                    //Just get one of the edges.  Often you have two coedges
-                    //for the same edge.
-                    if ( EDGE_list.move_to(cur_EDGE) )
-                    {
-                        // additional check to avoid an infinite loop
-                        if(cur_COEDGE == cur_COEDGE->next())
-                            break;
+    if (cur_WIRE != NULL){
+      do {
+	COEDGE *start_COEDGE = cur_WIRE->coedge();
+	COEDGE *cur_COEDGE = start_COEDGE;
+	do{
+	  EDGE *cur_EDGE = cur_COEDGE->edge();
+	  //Just get one of the edges.  Often you have two coedges
+	  //for the same edge.
+	  if ( EDGE_list.move_to(cur_EDGE) )
+	    {
+	      // additional check to avoid an infinite loop
+	      if(cur_COEDGE == cur_COEDGE->next())
+		break;
 
-                        cur_COEDGE = cur_COEDGE->next();
-                        continue;
-                    }
-                    else
-                    {
-                        EDGE_list.append(cur_EDGE);
-                    }
-                    EDGE *new_EDGE_ptr = NULL;
-                    outcome result = api_edge(cur_EDGE, new_EDGE_ptr);
-                    if ( !result.ok() || new_EDGE_ptr == NULL )
-                    {
-                        PRINT_ERROR("In AcisModifyEngine::body_intersection\n"
-                            "       Cannot copy curve in intersection graph.\n");
-                        return CUBIT_FAILURE;
-                    }
-                    // Create a new CurveACIS object
-                    // Use the new EDGE to create a new CurveACIS
-                    Curve *new_curve =
-                        AcisQueryEngine::instance()->populate_topology_bridges(new_EDGE_ptr);
-                    curve_list.append(new_curve);
-                    cur_COEDGE = cur_COEDGE->next();
-                } while (cur_COEDGE && (cur_COEDGE != start_COEDGE));
-                cur_WIRE = cur_WIRE->next();
-            } while (cur_WIRE && (cur_WIRE != start_WIRE));
-        }
+	      cur_COEDGE = cur_COEDGE->next();
+	      continue;
+	    }
+	  else
+	    {
+	      EDGE_list.append(cur_EDGE);
+	    }
+	  EDGE *new_EDGE_ptr = NULL;
+	  outcome result = api_edge(cur_EDGE, new_EDGE_ptr);
+	  if ( !result.ok() || new_EDGE_ptr == NULL )
+	    {
+	      PRINT_ERROR("In AcisModifyEngine::body_intersection\n"
+			  "       Cannot copy curve in intersection graph.\n");
+	      return CUBIT_FAILURE;
+	    }
+	  // Create a new CurveACIS object
+	  // Use the new EDGE to create a new CurveACIS
+	  Curve *new_curve =
+	    AcisQueryEngine::instance()->populate_topology_bridges(new_EDGE_ptr);
+	  curve_list.append(new_curve);
+	  cur_COEDGE = cur_COEDGE->next();
+	} while (cur_COEDGE && (cur_COEDGE != start_COEDGE));
+	cur_WIRE = cur_WIRE->next();
+      } while (cur_WIRE && (cur_WIRE != start_WIRE));
+    }
 
-        //we may not have a lump, ACIS sometimes will return a wire
-        //as the intersection and other times a LUMP...
-        if (cur_LUMP)
-        {
-            cur_LUMP = cur_LUMP->next();
-        }
-    }while (cur_LUMP && (start_LUMP != cur_LUMP));
-    //At this point we are done!
-    return CUBIT_SUCCESS;
+    //we may not have a lump, ACIS sometimes will return a wire
+    //as the intersection and other times a LUMP...
+    if (cur_LUMP)
+      {
+	cur_LUMP = cur_LUMP->next();
+      }
+  }while (cur_LUMP && (start_LUMP != cur_LUMP));
+  //At this point we are done!
+  return CUBIT_SUCCESS;
 }
 
 //-------------------------------------------------------------------------
@@ -1915,62 +1916,62 @@
 //
 //-------------------------------------------------------------------------
 CubitBoolean AcisModifyEngine::BODYs_interfering (
-    BODY* body1_ptr,
-    BODY* body2_ptr) const
+						  BODY* body1_ptr,
+						  BODY* body2_ptr) const
 {
 
-   CpuTimer timer;
+  CpuTimer timer;
 
-     // Efficient algorithm to test interference between 2 ACIS BODYs. The
-     // entire intersection boolean operation is *not* performed if api_slice
-     // is used.
+  // Efficient algorithm to test interference between 2 ACIS BODYs. The
+  // entire intersection boolean operation is *not* performed if api_slice
+  // is used.
 
-   CubitBoolean interfering = CUBIT_TRUE;
+  CubitBoolean interfering = CUBIT_TRUE;
 
-     // Use the NOP pair to ensure that the roll-back is done by ACIS after
-     // the test, so that the input BODYs are unaffected by this operation.
-   API_NOP_BEGIN;
+  // Use the NOP pair to ensure that the roll-back is done by ACIS after
+  // the test, so that the input BODYs are unaffected by this operation.
+  API_NOP_BEGIN;
 
-   BODY* slice = NULL;
+  BODY* slice = NULL;
 
-     // Make sure we have 2 non-NULL, valid BODYs first.
-   if ( body1_ptr == NULL || !IS_ENTITY_TYPE( body1_ptr, BODY ) ||
-        body2_ptr == NULL || !IS_ENTITY_TYPE( body2_ptr, BODY ) )
-   {
+  // Make sure we have 2 non-NULL, valid BODYs first.
+  if ( body1_ptr == NULL || !IS_ENTITY_TYPE( body1_ptr, BODY ) ||
+       body2_ptr == NULL || !IS_ENTITY_TYPE( body2_ptr, BODY ) )
+    {
       PRINT_ERROR("BUG: In AcisModifyEngine::BODYs_interfering\n"
                   "     One or both input BODYs are NULL or invalid.\n");
       assert(0);
       return CUBIT_FALSE;
-   }
+    }
 
-     // Create the intersection graph between the given bodies
-   outcome status = api_slice(body1_ptr, body2_ptr,
-                              *(SPAunit_vector *)NULL_REF, slice);
+  // Create the intersection graph between the given bodies
+  outcome status = api_slice(body1_ptr, body2_ptr,
+			     *(SPAunit_vector *)NULL_REF, slice);
 
-   if (!status.ok() || slice == NULL )
-       interfering = CUBIT_FALSE;
-   else
-     interfering = CUBIT_TRUE;
+  if (!status.ok() || slice == NULL )
+    interfering = CUBIT_FALSE;
+  else
+    interfering = CUBIT_TRUE;
 
-     // Set the result variable to true so that the API_NOP_END
-     // can roll back the bulletin board to ensure that the
-     // ENTITYs that were modified within this NOP block will be
-     // returned to their original state.
-   result = outcome(0);
+  // Set the result variable to true so that the API_NOP_END
+  // can roll back the bulletin board to ensure that the
+  // ENTITYs that were modified within this NOP block will be
+  // returned to their original state.
+  result = outcome(0);
 
-   API_NOP_END;
+  API_NOP_END;
 
 
-   PRINT_DEBUG_3( "CPU time taken to check if two BODYs are "
-               "interfering: %f secs\n", timer.cpu_secs());
+  PRINT_DEBUG_3( "CPU time taken to check if two BODYs are "
+		 "interfering: %f secs\n", timer.cpu_secs());
 
-     // Return the interference status
-   return interfering;
+  // Return the interference status
+  return interfering;
 }
 
 CubitStatus AcisModifyEngine::stitch_FACEs( DLIList<FACE*> &faces,
-                                                    FACE *&result_FACE,
-                                                    BODY *&stitched_BODY )
+					    FACE *&result_FACE,
+					    BODY *&stitched_BODY )const
 {
   //Make copies of each FACE
   ENTITY_LIST copied_FACES;
@@ -1980,62 +1981,62 @@
 
   BODY *master = NULL;
   for( i=faces.size(); i--;)
-  {
-    FACE *tmp_FACE = faces.get_and_step();
-    ENTITY *new_FACE = NULL;
-    result = api_copy_entity( (ENTITY*)tmp_FACE, new_FACE );
+    {
+      FACE *tmp_FACE = faces.get_and_step();
+      ENTITY *new_FACE = NULL;
+      result = api_copy_entity( (ENTITY*)tmp_FACE, new_FACE );
 
-    FACE *face_list[1];
-    face_list[0] = (FACE*)new_FACE;
-    result = api_sheet_from_ff( 1, face_list, sheet_BODY_ptr );
-    result = api_body_to_2d( sheet_BODY_ptr );
+      FACE *face_list[1];
+      face_list[0] = (FACE*)new_FACE;
+      result = api_sheet_from_ff( 1, face_list, sheet_BODY_ptr );
+      result = api_body_to_2d( sheet_BODY_ptr );
 
-    if( !result.ok() )
-    {
-      PRINT_ERROR("Problems copying surface(s)\n");
-      //delete all other surface
-      for(i=0; i<copied_FACES.count(); i++)
-        api_delent( copied_FACES[i]);
-      return CUBIT_FAILURE;
-    }
-    else
-    {
-      if( master == NULL )
-        master = sheet_BODY_ptr;
+      if( !result.ok() )
+	{
+	  PRINT_ERROR("Problems copying surface(s)\n");
+	  //delete all other surface
+	  for(i=0; i<copied_FACES.count(); i++)
+	    api_delent( copied_FACES[i]);
+	  return CUBIT_FAILURE;
+	}
       else
-        copied_FACES.add( sheet_BODY_ptr );
+	{
+	  if( master == NULL )
+	    master = sheet_BODY_ptr;
+	  else
+	    copied_FACES.add( sheet_BODY_ptr );
+	}
     }
-  }
 
   //stitch together to form a sheet body.
 #if CUBIT_ACIS_VERSION < 1100
 
   for( i=0; i<copied_FACES.count(); i++ )
-  {
-    result = api_unite((BODY*)copied_FACES[i], master );
-    if( !result.ok() )
     {
-      PRINT_ERROR("Problems stitching surfaces\n");
-      //delete all other surface
-      for(; i<copied_FACES.count(); i++)
-        api_delent( copied_FACES[i]);
-      return CUBIT_FAILURE;
+      result = api_unite((BODY*)copied_FACES[i], master );
+      if( !result.ok() )
+	{
+	  PRINT_ERROR("Problems stitching surfaces\n");
+	  //delete all other surface
+	  for(; i<copied_FACES.count(); i++)
+	    api_delent( copied_FACES[i]);
+	  return CUBIT_FAILURE;
+	}
     }
-  }
 #else
   exact_stitch_options stitch_opts;
   result = api_stitch( master, copied_FACES, &stitch_opts );
 #endif
 
   if( !result.ok() )
-  {
-    api_delent( master );
-    stitched_BODY = NULL;
-    for(i=0; i<copied_FACES.count(); i++)
-      api_delent( copied_FACES[i]);
-    result_FACE = NULL;
-    return CUBIT_FAILURE;
-  }
+    {
+      api_delent( master );
+      stitched_BODY = NULL;
+      for(i=0; i<copied_FACES.count(); i++)
+	api_delent( copied_FACES[i]);
+      result_FACE = NULL;
+      return CUBIT_FAILURE;
+    }
 
   copied_FACES.clear();
   stitched_BODY = master;
@@ -2045,693 +2046,16 @@
   api_get_faces( master, copied_FACES );
 
   if( copied_FACES.count() != 1 )
-  {
-    result_FACE = NULL;
-    return CUBIT_SUCCESS;
-  }
+    {
+      result_FACE = NULL;
+      return CUBIT_SUCCESS;
+    }
   else
     result_FACE = (FACE*)copied_FACES[0];
 
   return CUBIT_SUCCESS;
 }
 
-CubitStatus AcisModifyEngine::webcut_with_sweep_curves_rotated(
-                              DLIList<BodySM*> &blank_bodies,
-                              DLIList<Curve*> &curves,
-                              const CubitVector& point,
-                              const CubitVector& sweep_axis,
-                              double angle,
-                              Surface *stop_surf,
-                              DLIList<BodySM*> &results_list,
-                              CubitBoolean imprint)
-{
-  if(curves.size() == 0 )
-    return CUBIT_FAILURE;
-
-  //see if surface-where-sweep-is-to-stop has been specified
-  EDGE *EDGE_to_sweep = NULL;
-  FACE *stop_FACE= NULL;
-  if( stop_surf )
-  {
-    SurfaceACIS *surf_ACIS = CAST_TO(stop_surf, SurfaceACIS );
-    stop_FACE = surf_ACIS->get_FACE_ptr();
-  }
-
-  //sweep each curve about the specified axis
-  int i,j;
-  DLIList<FACE*> FACES_for_cutting;
-  for(i=curves.size(); i--; )
-  {
-    Curve *curve = curves.get_and_step();
-
-    CurveACIS *curve_ACIS = CAST_TO(curve, CurveACIS);
-    EDGE *EDGE_ptr = curve_ACIS->get_EDGE_ptr();
-
-    if (!EDGE_ptr)
-    {
-      PRINT_ERROR("Unable to get ACIS EDGE from Curve\n" );
-      for( j=FACES_for_cutting.size(); j--; )
-        api_delent( FACES_for_cutting.get_and_step() );
-      return CUBIT_FAILURE;
-    }
-
-    outcome result = api_edge( EDGE_ptr, EDGE_to_sweep);
-    if (!result.ok() || EDGE_to_sweep == NULL )
-    {
-      AcisQueryEngine::instance()->ACIS_API_error (result);
-      for( j=FACES_for_cutting.size(); j--; )
-        api_delent( FACES_for_cutting.get_and_step() );
-      PRINT_ERROR( "Unable to copy ACIS curve\n" );
-      return CUBIT_FAILURE;
-    }
-
-    BODY *BODY_of_swept_EDGE = NULL;
-    CubitStatus status;
-
-    status = sweep_EDGE_about_axis( EDGE_to_sweep, BODY_of_swept_EDGE,
-                                    sweep_axis, point, angle, 0, 0.0, 0,
-                                    false, false, stop_FACE );
-
-    if( status == CUBIT_FAILURE )
-    {
-      api_delent( EDGE_to_sweep );
-      int j;
-      for( j=FACES_for_cutting.size(); j--; )
-        api_delent( FACES_for_cutting.get_and_step() );
-      return CUBIT_FAILURE;
-    }
-
-    FACE *FACE_ptr = BODY_of_swept_EDGE->lump()->shell()->first_face();
-    FACES_for_cutting.append( FACE_ptr );
-  }
-
-  //stitch FACEs together into one BODY
-  //they may not stitch into on single FACE... a sheet-body
-  //with multiple FACEs will still webcut though
-  BODY *tool_BODY = NULL;
-  if( FACES_for_cutting.size() > 1 )
-  {
-    FACE *dummy_FACE = NULL;
-    CubitStatus status;
-    status = stitch_FACEs( FACES_for_cutting, dummy_FACE, tool_BODY );
-
-    if( status == CUBIT_FAILURE )
-    {
-      PRINT_ERROR("Swept curves produce surfaces that cannot be stitched together.\n");
-      for( i=FACES_for_cutting.size(); i--; )
-        api_delent( FACES_for_cutting.get_and_step() );
-      return CUBIT_FAILURE;
-    }
-  }
-  else
-    tool_BODY = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACES_for_cutting.get() );
-
-  //get rid of any unnecessary edges
-  api_clean_entity( (ENTITY*)tool_BODY);
-
-  //webcut each blank BODY with the tool BODY
-  int num_cut=0;
-  DLIList<BodySM*> temp_new_bodies;
-
-  for ( i = blank_bodies.size(); i > 0; i-- )
-  {
-     BodySM *blank_body = blank_bodies.get_and_step();
-     BODY *blank_BODY = AcisQueryEngine::get_BODY(blank_body );
-      //now webcut it.
-     BODY *new_BODY_1, *new_BODY_2;
-
-     CubitStatus status = webcut_with_sheet( blank_BODY,
-                                             tool_BODY,
-                                             new_BODY_1,
-                                             new_BODY_2,
-                                             imprint );
-     if ( status == CUBIT_SUCCESS )
-     {
-       DLIList<BODY*> new_BODY_list;
-       new_BODY_list.append(new_BODY_1);
-       new_BODY_list.append(new_BODY_2);
-       temp_new_bodies.clean_out();
-
-       CubitStatus result = get_new_Body(blank_body, blank_BODY,
-                                         new_BODY_list, temp_new_bodies,
-                                         CUBIT_FALSE);
-       if ( result != CUBIT_SUCCESS )
-       {
-         api_delent( tool_BODY );
-         PRINT_ERROR("Problems with building volume.\n");
-         num_cut = 0;
-         return CUBIT_FAILURE;
-       }
-       else
-       {
-         results_list += temp_new_bodies;
-         num_cut++;
-       }
-     }
-   }
-
-  return num_cut > 0 ? CUBIT_SUCCESS : CUBIT_FAILURE;
-}
-
-CubitStatus AcisModifyEngine::webcut_with_sweep_surfaces_rotated(
-                              DLIList<BodySM*> &blank_bodies,
-                              DLIList<Surface*> &surfaces,
-                              const CubitVector& point,
-                              const CubitVector& sweep_vector,
-                              double angle,
-                              Surface *stop_surf,
-                              bool up_to_next,
-                              DLIList<BodySM*> &results_list,
-                              CubitBoolean imprint )
-{
-  FACE *FACE_to_sweep = NULL;
-
-  int i;
-  CubitStatus status;
-  DLIList<FACE*> FACES_to_sweep;
-  if( surfaces.size() > 1 )
-  {
-    DLIList<FACE*> faces;
-    for(i=surfaces.size(); i--;)
-    {
-      SurfaceACIS *surf_ACIS = CAST_TO(surfaces.get_and_step(), SurfaceACIS );
-      faces.append( surf_ACIS->get_FACE_ptr() );
-    }
-
-    //attempt to stitch FACEs together, to get a single FACE
-    BODY *stitched_BODY = NULL;
-    status = stitch_FACEs( faces, FACE_to_sweep, stitched_BODY );
-
-    //can't stitch surfaces together, so we'll sweep them separately
-    if( status == CUBIT_FAILURE )
-    {
-      PRINT_ERROR("Input surfaces could not be stitched together to form a single surface.\n");
-      PRINT_INFO("       Input surfaces must share coinsident curves to be stitchable.\n");
-      return CUBIT_FAILURE;
-    }
-    else if( !FACE_to_sweep ) //couldn't stitch into one FACE....will sweep surfaces individually
-    {
-      if( stitched_BODY ) api_delent( stitched_BODY );
-      for(i=surfaces.size(); i--;)
-      {
-        SurfaceACIS *surf_ACIS = CAST_TO(surfaces.get_and_step(), SurfaceACIS );
-        FACE_to_sweep = make_FACE( surf_ACIS->get_FACE_ptr() );
-        FACES_to_sweep.append( FACE_to_sweep );
-      }
-    }
-    else
-      FACES_to_sweep.append( FACE_to_sweep );
-  }
-  else
-  {
-    Surface *surface = surfaces.get();
-    SurfaceACIS *surf_ACIS = CAST_TO(surface, SurfaceACIS );
-    FACE_to_sweep = make_FACE( surf_ACIS->get_FACE_ptr() );
-    FACES_to_sweep.append( FACE_to_sweep );
-  }
-
-  //see if surface-where-sweep-is-to-stop has been specified
-  FACE *stop_FACE = NULL;
-  if( stop_surf )
-  {
-    SurfaceACIS *surf_ACIS = CAST_TO(stop_surf, SurfaceACIS );
-    stop_FACE = surf_ACIS->get_FACE_ptr();
-  }
-
-  //sweep each surface about the specified axis
-  bool volume_is_negative;
-  DLIList<BODY*> swept_BODYs;
-  for( i=FACES_to_sweep.size(); i--; )
-  {
-    FACE_to_sweep = FACES_to_sweep.get_and_step();
-
-    status = sweep_FACE_about_axis( FACE_to_sweep, sweep_vector, point, angle,
-                                    volume_is_negative, true, 0, 0.0, 0, false, stop_FACE );
-
-    if( status == CUBIT_FAILURE )
-    {
-      api_delent( FACE_to_sweep );
-      for(i=swept_BODYs.size(); i--;)
-        api_delent( swept_BODYs.get_and_step() );
-      return CUBIT_FAILURE;
-    }
-
-    BODY *swept_BODY = AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_to_sweep);
-    swept_BODYs.append( swept_BODY );
-  }
-
-  //if there are more than 1, unite them all
-  BODY *tool_BODY = swept_BODYs.get_and_step();
-  if( swept_BODYs.size() > 1 )
-  {
-    for(i=swept_BODYs.size()-1; i--;)
-    {
-      outcome result = api_unite( swept_BODYs.get_and_step(), tool_BODY );
-      if( !result.ok() )
-      {
-        api_delent( tool_BODY );
-        for(; i--;  )
-          api_delent( swept_BODYs.get_and_step() );
-        return CUBIT_FAILURE;
-      }
-    }
-  }
-
-  //get rid of any unnecessary edges
-  api_clean_entity( (ENTITY*)tool_BODY);
-
-  //trim tool_body if 'up_to_next_surface' option is specified
-  if( up_to_next)
-  {
-    //get a vertex on the original face that we're sweeping
-    SurfaceACIS *surf_ACIS = CAST_TO(surfaces.get(), SurfaceACIS );
-
-    ENTITY_LIST vertices;
-    api_get_vertices( surf_ACIS->get_FACE_ptr(), vertices );
-
-    VERTEX *surf_VERT = NULL;
-    if( vertices.count() )
-      surf_VERT = static_cast<VERTEX*>( vertices[0] );
-
-    if( !trim_up_to_next_surface( tool_BODY, blank_bodies, surf_VERT ) )
-    {
-      api_delent( tool_BODY );
-      PRINT_ERROR("Cannot use 'up_to_next' option with specified geometry\n");
-      PRINT_INFO("Try the 'stop surface <id>' option instead\n");
-      return CUBIT_FAILURE;
-    }
-  }
-
-  return webcut( blank_bodies, tool_BODY, results_list, imprint );
-
-}
-
-CubitStatus AcisModifyEngine::webcut_with_sweep_curves(
-                              DLIList<BodySM*> &blank_bodies,
-                              DLIList<Curve*> &curves,
-                              const CubitVector& sweep_vector,
-                              bool through_all,
-                              Surface *stop_surf,
-                              Curve *curve_to_sweep_along,
-                              DLIList<BodySM*> &results_list,
-                              CubitBoolean imprint )
-{
-  EDGE *EDGE_to_sweep = NULL;
-  if(curves.size() == 0 )
-    return CUBIT_FAILURE;
-
-  CubitVector tmp_sweep_vector = sweep_vector;
-
-  //get model bbox info...will scale sweep vector by its diagonal
-  //so that we go far enough
-  FACE *stop_FACE= NULL;
-  if( through_all || stop_surf )
-  {
-    CubitBox bounding_box = GeometryQueryTool::instance()->model_bounding_box();
-    tmp_sweep_vector.normalize();
-    tmp_sweep_vector*=(2*bounding_box.diagonal().length());
-  }
-
-  //see if surface-where-sweep-is-to-stop has been specified
-  if( stop_surf )
-  {
-    SurfaceACIS *surf_ACIS = CAST_TO(stop_surf, SurfaceACIS );
-    stop_FACE = surf_ACIS->get_FACE_ptr();
-  }
-
-  //see if we're sweeping along a specified curve
-  BODY *WIRE_ptr = NULL;
-  if( curve_to_sweep_along )
-  {
-    CurveACIS *curve_ACIS = CAST_TO(curve_to_sweep_along, CurveACIS);
-    EDGE *EDGE_ptr = curve_ACIS->get_EDGE_ptr();
-
-    if (!EDGE_ptr)
-    {
-      PRINT_ERROR("Unable to get ACIS EDGE from Curve\n" );
-      return CUBIT_FAILURE;
-    }
-
-    EDGE *EDGE_to_sweep_along = NULL;
-    outcome result = api_edge( EDGE_ptr, EDGE_to_sweep_along );
-    if (!result.ok() || EDGE_to_sweep_along  == NULL )
-    {
-      AcisQueryEngine::instance()->ACIS_API_error (result);
-      PRINT_ERROR( "Unable to copy ACIS curve\n" );
-      return CUBIT_FAILURE;
-    }
-
-    EDGE* EDGES[1];
-    EDGES[0] = EDGE_to_sweep_along;
-    result = api_make_ewire( 1, EDGES, WIRE_ptr);
-    if (!result.ok())
-    {
-      AcisQueryEngine::instance()->ACIS_API_error (result);
-      PRINT_ERROR( "Unable to make ACIS wire body from curve to sweep along\n" );
-    }
-  }
-
-  //sweep each curve
-  int i,j;
-  DLIList<FACE*> FACES_for_cutting;
-  for(i=curves.size(); i--; )
-  {
-    Curve *curve = curves.get_and_step();
-
-    CurveACIS *curve_ACIS = CAST_TO(curve, CurveACIS);
-    EDGE *EDGE_ptr = curve_ACIS->get_EDGE_ptr();
-
-    if (!EDGE_ptr)
-    {
-      PRINT_ERROR("Unable to get ACIS EDGE from Curve\n" );
-      return CUBIT_FAILURE;
-    }
-
-    outcome result = api_edge( EDGE_ptr, EDGE_to_sweep);
-    if (!result.ok() || EDGE_to_sweep == NULL )
-    {
-      AcisQueryEngine::instance()->ACIS_API_error (result);
-      PRINT_ERROR( "Unable to copy ACIS curve\n" );
-      for( j=FACES_for_cutting.size(); j--; )
-        api_delent( FACES_for_cutting.get_and_step() );
-      if( WIRE_ptr )
-        api_delent( WIRE_ptr );
-      return CUBIT_FAILURE;
-    }
-
-    BODY *BODY_of_swept_EDGE = NULL;
-    CubitStatus status;
-
-    if( WIRE_ptr )
-      status = sweep_EDGE_along_WIRE( EDGE_to_sweep, WIRE_ptr, BODY_of_swept_EDGE,
-                                      0.0, 0, false, stop_FACE );
-    else
-      status = sweep_EDGE_along_vector( EDGE_to_sweep, BODY_of_swept_EDGE,
-                                        tmp_sweep_vector, 0.0, 0, false, stop_FACE );
-
-    if( status == CUBIT_FAILURE )
-    {
-      api_delent( EDGE_to_sweep );
-      for( j=FACES_for_cutting.size(); j--; )
-        api_delent( FACES_for_cutting.get_and_step() );
-      if( WIRE_ptr )
-        api_delent( WIRE_ptr );
-      return CUBIT_FAILURE;
-    }
-
-    FACE *FACE_ptr = BODY_of_swept_EDGE->lump()->shell()->first_face();
-    FACES_for_cutting.append( FACE_ptr );
-  }
-
-  if( WIRE_ptr )
-    api_delent( WIRE_ptr );
-
-  //stitch FACEs together into one BODY
-  //they may not stitch into on single FACE... a sheet-body
-  //with multiple FACEs will still webcut though
-  BODY *tool_BODY = NULL;
-  if( FACES_for_cutting.size() > 1 )
-  {
-    FACE *dummy_FACE = NULL;
-    CubitStatus status;
-    status = stitch_FACEs( FACES_for_cutting, dummy_FACE, tool_BODY );
-
-    if( status == CUBIT_FAILURE )
-    {
-      PRINT_ERROR("Swept curves produce surfaces that cannot be stitched together.\n");
-      for( i=FACES_for_cutting.size(); i--; )
-        api_delent( FACES_for_cutting.get_and_step() );
-      return CUBIT_FAILURE;
-    }
-  }
-  else
-    tool_BODY = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACES_for_cutting.get() );
-
-  //get rid of any unnecessary edges
-  api_clean_entity( (ENTITY*)tool_BODY);
-
-  //webcut each blank BODY with the tool BODY
-  int num_cut=0;
-  DLIList<BodySM*> temp_new_bodies;
-  for ( i = blank_bodies.size(); i > 0; i-- )
-  {
-     BodySM *blank_body = blank_bodies.get_and_step();
-     BODY *blank_BODY = AcisQueryEngine::get_BODY(blank_body );
-     BODY *new_BODY_1, *new_BODY_2;
-
-     CubitStatus status = webcut_with_sheet( blank_BODY,
-                                             tool_BODY,
-                                             new_BODY_1,
-                                             new_BODY_2,
-                                             imprint );
-     if ( status == CUBIT_SUCCESS )
-     {
-       DLIList<BODY*> new_BODY_list;
-       new_BODY_list.append(new_BODY_1);
-       new_BODY_list.append(new_BODY_2);
-       temp_new_bodies.clean_out();
-
-       CubitStatus result = get_new_Body(blank_body, blank_BODY,
-                                         new_BODY_list, temp_new_bodies,
-                                         CUBIT_FALSE);
-       if ( result != CUBIT_SUCCESS )
-       {
-         PRINT_ERROR("Problems with building volume.\n");
-         num_cut = 0;
-         return CUBIT_FAILURE;
-       }
-       else
-       {
-         results_list += temp_new_bodies;
-         num_cut++;
-       }
-     }
-   }
-
-  return num_cut > 0 ? CUBIT_SUCCESS : CUBIT_FAILURE;
-}
-
-
-CubitStatus AcisModifyEngine::webcut_with_sweep_surfaces(
-                              DLIList<BodySM*> &blank_bodies,
-                              DLIList<Surface*> &surfaces,
-                              const CubitVector& sweep_vector,
-                              bool sweep_perp,
-                              bool through_all,
-                              bool outward,
-                              bool up_to_next,
-                              Surface *stop_surf,
-                              Curve *curve_to_sweep_along,
-                              DLIList<BodySM*> &results_list,
-                              CubitBoolean imprint )
-{
-  FACE *FACE_to_sweep = NULL;
-  SurfaceACIS *surf_ACIS = NULL;
-
-  CubitVector tmp_sweep_vector = sweep_vector;
-
-  int i,j;
-  DLIList<FACE*> FACES_to_sweep;
-
-  //if multiple FACEs stitch, them together into one BODY,
-  //they may not stitch into on single FACE... a sheet-body
-  //with multiple FACEs will still webcut though
-  if( surfaces.size() > 1 )
-  {
-    DLIList<FACE*> faces;
-    for(i=surfaces.size(); i--;)
-    {
-      SurfaceACIS *surf_ACIS = CAST_TO(surfaces.get_and_step(), SurfaceACIS );
-      faces.append( surf_ACIS->get_FACE_ptr() );
-    }
-
-    //attempt to stitch FACEs together, to get a single FACE
-    BODY *dummy_BODY = NULL;
-    CubitStatus status;
-    status = stitch_FACEs( faces, FACE_to_sweep, dummy_BODY );
-
-    if( status == CUBIT_FAILURE )
-    {
-      PRINT_ERROR("Input surfaces could not be stitched together.\n");
-      PRINT_INFO("       Input surfaces must share coinsident curves to be stitchable.\n");
-      return CUBIT_FAILURE;
-    }
-    else if( !FACE_to_sweep )
-    {
-      //can't stitch surfaces into single FACE, so we'll sweep them separately
-      if( dummy_BODY ) api_delent( dummy_BODY );
-      for(i=surfaces.size(); i--;)
-      {
-        surf_ACIS = CAST_TO(surfaces.get_and_step(), SurfaceACIS );
-        FACE_to_sweep = make_FACE( surf_ACIS->get_FACE_ptr() );
-        FACES_to_sweep.append( FACE_to_sweep );
-      }
-    }
-    else
-      FACES_to_sweep.append( FACE_to_sweep );
-  }
-  else //if only 1 surface
-  {
-    Surface *surface = surfaces.get();
-    surf_ACIS = CAST_TO(surface, SurfaceACIS );
-    FACE_to_sweep = make_FACE( surf_ACIS->get_FACE_ptr() );
-    FACES_to_sweep.append( FACE_to_sweep );
-  }
-
-  FACE *stop_FACE= NULL;
-  if( sweep_perp == true )
-  {
-    //if( !stop_surf )
-    //  tmp_sweep_vector.set( sweep_vector.x(),0,0);
-    if( through_all || stop_surf )
-    {
-      CubitBox bounding_box = GeometryQueryTool::instance()->model_bounding_box();
-      tmp_sweep_vector.set(1,0,0);
-      tmp_sweep_vector = 2*(bounding_box.diagonal());
-    }
-  }
-  else if( through_all || stop_surf || up_to_next  )
-  {
-    CubitBox bounding_box = GeometryQueryTool::instance()->model_bounding_box();
-    tmp_sweep_vector.normalize();
-    tmp_sweep_vector*=(2*bounding_box.diagonal().length());
-  }
-
-  //see if surface-where-sweep-is-to-stop has been specified
-  if( stop_surf )
-  {
-    //get the SURFACE
-    SurfaceACIS *surf_ACIS = CAST_TO(stop_surf, SurfaceACIS );
-    stop_FACE = surf_ACIS->get_FACE_ptr();
-  }
-
-  //see if we're sweeping along a specified curve
-  BODY* WIRE_ptr = NULL;
-  if( curve_to_sweep_along )
-  {
-    CurveACIS *curve_ACIS = CAST_TO(curve_to_sweep_along, CurveACIS);
-    EDGE *EDGE_ptr = curve_ACIS->get_EDGE_ptr();
-
-    if (!EDGE_ptr)
-    {
-      PRINT_ERROR("Unable to get ACIS EDGE from Curve\n" );
-      for( j=FACES_to_sweep.size(); j--; )
-        api_delent( FACES_to_sweep.get_and_step() );
-      return CUBIT_FAILURE;
-    }
-
-    EDGE *EDGE_to_sweep_along = NULL;
-    outcome result = api_edge( EDGE_ptr, EDGE_to_sweep_along );
-    if (!result.ok() || EDGE_to_sweep_along  == NULL )
-    {
-      AcisQueryEngine::instance()->ACIS_API_error (result);
-      PRINT_ERROR( "Unable to copy ACIS curve\n" );
-      for( j=FACES_to_sweep.size(); j--; )
-        api_delent( FACES_to_sweep.get_and_step() );
-      return CUBIT_FAILURE;
-    }
-
-    EDGE* EDGES[1];
-    EDGES[0] = EDGE_to_sweep_along;
-    result = api_make_ewire( 1, EDGES, WIRE_ptr);
-    if (!result.ok())
-    {
-      AcisQueryEngine::instance()->ACIS_API_error (result);
-      PRINT_ERROR( "Unable to make ACIS wire body from curve to sweep along\n" );
-      for( j=FACES_to_sweep.size(); j--; )
-        api_delent( FACES_to_sweep.get_and_step() );
-      return CUBIT_FAILURE;
-    }
-  }
-
-  bool volume_neg;
-  CubitStatus status;
-
-  //sweep each surface
-  DLIList<BODY*> swept_BODYs;
-  for( i=FACES_to_sweep.size(); i--; )
-  {
-    FACE_to_sweep = FACES_to_sweep.get_and_step();
-
-    if( sweep_perp )
-      status = sweep_FACE_perpendicular( FACE_to_sweep, tmp_sweep_vector.length(), volume_neg,
-                                         outward, 0.0, 0, false, stop_FACE );
-    else if( WIRE_ptr )
-      status = sweep_FACE_along_WIRE( FACE_to_sweep, WIRE_ptr, 0.0, 0, false, stop_FACE );
-    else
-      status = sweep_FACE_along_vector( FACE_to_sweep, tmp_sweep_vector, volume_neg, true, 0.0, 0,
-                                        false, stop_FACE );
-
-    if( status == CUBIT_FAILURE )
-    {
-      api_delent( FACE_to_sweep );
-      for(i=swept_BODYs.size(); i--;)
-        api_delent( swept_BODYs.get_and_step() );
-      if( WIRE_ptr )
-        api_delent( WIRE_ptr );
-      return CUBIT_FAILURE;
-    }
-    BODY *swept_BODY = AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_to_sweep);
-    swept_BODYs.append( swept_BODY );
-  }
-
-  //clean up
-  if( WIRE_ptr )
-    api_delent( WIRE_ptr );
-
-  //if there are more than 1, unite them all
-  swept_BODYs.reset();
-  BODY *tool_BODY = swept_BODYs.extract();
-  if( swept_BODYs.size() > 0 )
-  {
-    for(i=swept_BODYs.size(); i--;)
-    {
-      outcome result = api_unite( swept_BODYs.get(), tool_BODY );
-      if( !result.ok() )
-      {
-        PRINT_ERROR( "Problems uniting swept surfaces for webcut\n" );
-        AcisQueryEngine::instance()->ACIS_API_error (result);
-        api_delent( tool_BODY );
-        for(i=swept_BODYs.size(); i--;  )
-        {
-          if( swept_BODYs.get() )
-            api_delent( swept_BODYs.get_and_step() );
-        }
-        return CUBIT_FAILURE;
-      }
-      else
-        swept_BODYs.change_to(NULL);
-      swept_BODYs.step();
-    }
-  }
-
-  //remove unnecessary edges
-  api_clean_entity( (ENTITY*)tool_BODY);
-
-  //trim tool_body if 'up_to_next_surface' option is specified
-  if( up_to_next)
-  {
-    //get a vertex on the original face that we're sweeping
-    ENTITY_LIST vertices;
-    api_get_vertices( surf_ACIS->get_FACE_ptr(), vertices );
-
-    VERTEX *surf_VERT = NULL;
-    if( vertices.count() )
-      surf_VERT = static_cast<VERTEX*>( vertices[0] );
-
-    if( !trim_up_to_next_surface( tool_BODY, blank_bodies, surf_VERT ) )
-    {
-      api_delent( tool_BODY );
-      PRINT_ERROR("Cannot use 'up_to_next' option with specified geometry\n");
-      PRINT_INFO("Try the 'stop surface <id>' option instead\n");
-      return CUBIT_FAILURE;
-    }
-  }
-
-  return webcut( blank_bodies, tool_BODY, results_list, imprint);
-
-}
-
 CubitStatus AcisModifyEngine::trim_up_to_next_surface( BODY *&tool_BODY,
                                                        DLIList<BodySM*> &blank_bodies,
                                                        VERTEX *surf_VERT )
@@ -2744,17 +2068,17 @@
 
   int i;
   for( i=blank_bodies.size()-1; i--; )
-  {
-    blank_BODY = AcisQueryEngine::get_BODY( blank_bodies.get_and_step() );
-    BODY *copy_blank_BODY = this->copy_BODY(blank_BODY, true );
-    result = api_unite( copy_blank_BODY, master_blank_BODY);
-
-    if( !result.ok() )
     {
-      PRINT_ERROR("Problems uniting blank volumes with 'up_to_next' option.\n");
-      return CUBIT_FAILURE;
+      blank_BODY = AcisQueryEngine::get_BODY( blank_bodies.get_and_step() );
+      BODY *copy_blank_BODY = this->copy_BODY(blank_BODY, true );
+      result = api_unite( copy_blank_BODY, master_blank_BODY);
+
+      if( !result.ok() )
+	{
+	  PRINT_ERROR("Problems uniting blank volumes with 'up_to_next' option.\n");
+	  return CUBIT_FAILURE;
+	}
     }
-  }
 
   //get all the cells
   generic_graph *boolean_graph;
@@ -2765,10 +2089,10 @@
   gvertex **vertex_array = boolean_graph->get_vertices( num_verts );
   ENTITY_LIST common_vertices;
   for(i=num_verts; i--; )
-  {
-    if( vertex_array[i]->is_kind(0) && vertex_array[i]->is_kind(1) )
-      common_vertices.add( vertex_array[i]->get_entity() );
-  }
+    {
+      if( vertex_array[i]->is_kind(0) && vertex_array[i]->is_kind(1) )
+	common_vertices.add( vertex_array[i]->get_entity() );
+    }
 
   ENTITY *vertex_to_keep = NULL;
 
@@ -2776,35 +2100,35 @@
   if( common_vertices.count() == 1 )
     vertex_to_keep = common_vertices[0];
   else
-  {
-    SPAposition point_on_surf = surf_VERT->geometry()->coords();
-    SPAposition dummy_pos;
-    double min_distance = -1, tmp_distance = 0;
-    for( i=common_vertices.count(); i--; )
     {
-      if( is_CELL( common_vertices[i] ) )
-      {
-        CELL *tmp_cell = NULL;
-        tmp_cell = static_cast<CELL*>( common_vertices[i] );
-        BODY *tmp_body = NULL;
-        api_ct_copy_cell( tmp_cell, tmp_body );
+      SPAposition point_on_surf = surf_VERT->geometry()->coords();
+      SPAposition dummy_pos;
+      double min_distance = -1, tmp_distance = 0;
+      for( i=common_vertices.count(); i--; )
+	{
+	  if( is_CELL( common_vertices[i] ) )
+	    {
+	      CELL *tmp_cell = NULL;
+	      tmp_cell = static_cast<CELL*>( common_vertices[i] );
+	      BODY *tmp_body = NULL;
+	      api_ct_copy_cell( tmp_cell, tmp_body );
 
-        api_entity_point_distance( tmp_body, point_on_surf, dummy_pos, tmp_distance );
-        api_delent( tmp_body );
+	      api_entity_point_distance( tmp_body, point_on_surf, dummy_pos, tmp_distance );
+	      api_delent( tmp_body );
 
-        if( min_distance < 0 )
-        {
-          min_distance = tmp_distance;
-          vertex_to_keep = common_vertices[i];
-        }
-        else if( tmp_distance < min_distance )
-        {
-          min_distance = tmp_distance;
-          vertex_to_keep = common_vertices[i];
-        }
-      }
+	      if( min_distance < 0 )
+		{
+		  min_distance = tmp_distance;
+		  vertex_to_keep = common_vertices[i];
+		}
+	      else if( tmp_distance < min_distance )
+		{
+		  min_distance = tmp_distance;
+		  vertex_to_keep = common_vertices[i];
+		}
+	    }
+	}
     }
-  }
 
   ENTITY_LIST ent_list;
   if( vertex_to_keep )
@@ -2833,472 +2157,512 @@
 // Creation Date :
 //-------------------------------------------------------------------------
 CubitStatus AcisModifyEngine::sweep_FACE_along_vector(
-    FACE *& FACE_ptr,
-    const CubitVector& sweep_vector,
-    bool& volume_is_negative,
-    bool primary_side,
-    double draft_angle,
-    int draft_type,
-    bool rigid,
-    FACE *to_FACE) const
+						      FACE *& FACE_ptr,
+						      const CubitVector& sweep_vector,
+						      bool& volume_is_negative,
+						      bool primary_side,
+						      double draft_angle,
+						      int draft_type,
+						      bool rigid,
+						      FACE *to_FACE,
+                                                      BODY *to_BODY) const
 {
-     // Make sure the distance of the sweep is not zero
-   if ( sweep_vector.length() < (1.0E5 * CUBIT_DBL_MIN) )
-   {
+  // Make sure the distance of the sweep is not zero
+  if ( sweep_vector.length() < (1.0E5 * CUBIT_DBL_MIN) )
+    {
       PRINT_WARNING("Distance of sweep is almost zero. No sweep was performed.\n");
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Make sure the draft angle is reasonable
-   if (draft_angle >= CUBIT_PI/2.0 || draft_angle <= -(CUBIT_PI/2.0))
-   {
+  // Make sure the draft angle is reasonable
+  if (draft_angle >= CUBIT_PI/2.0 || draft_angle <= -(CUBIT_PI/2.0))
+    {
       PRINT_ERROR("Draft angle cannot be greater than %e radians\n",
                   CUBIT_PI/2.0);
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Make sure the draft type is either 0 or 1 (this is an ACISism, of course!)
-   if ( !(draft_type == 0 || draft_type == 1) )
-   {
+  // Make sure the draft type is either 0 or 1 (this is an ACISism, of course!)
+  if ( !(draft_type == 0 || draft_type == 1) )
+    {
       PRINT_ERROR("Draft type must be either 0 or 1\n");
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Sweep ho!!
-   CubitStatus sweep_status = CUBIT_SUCCESS;
-   SPAvector ACIS_sweep_vector;
-   ACIS_sweep_vector.set_x(sweep_vector.x());
-   ACIS_sweep_vector.set_y(sweep_vector.y());
-   ACIS_sweep_vector.set_z(sweep_vector.z());
+  // Sweep ho!!
+  CubitStatus sweep_status = CUBIT_SUCCESS;
+  SPAvector ACIS_sweep_vector;
+  ACIS_sweep_vector.set_x(sweep_vector.x());
+  ACIS_sweep_vector.set_y(sweep_vector.y());
+  ACIS_sweep_vector.set_z(sweep_vector.z());
 
-   logical ACIS_primary_side = CUBIT_TRUE;
-   if (!primary_side)
-      ACIS_primary_side = CUBIT_FALSE;
+  logical ACIS_primary_side = CUBIT_TRUE;
+  if (!primary_side)
+    ACIS_primary_side = CUBIT_FALSE;
 
-     // Turn off the merge option in ACIS so FACEs used to sweep won't be
-     // "simplified" in their topology (i.e., 5-sided squared faces won't
-     // be reduced to 4-sided square faces) -- in other words, turn on
-     // non-regularized booleans.
-   outcome result = api_set_int_option ( "merge",
-                                 CUBIT_FALSE );
-   if (!result.ok())
-   {
+  // Turn off the merge option in ACIS so FACEs used to sweep won't be
+  // "simplified" in their topology (i.e., 5-sided squared faces won't
+  // be reduced to 4-sided square faces) -- in other words, turn on
+  // non-regularized booleans.
+  outcome result = api_set_int_option ( "merge",
+					CUBIT_FALSE );
+  if (!result.ok())
+    {
       PRINT_WARNING("In AcisModifyEngine::sweep_FACE_along_vector.\n"
                     "         Error in api_set_int_option.\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
 
-        // As the problem is not really serious, continue and make sure that
-        // the value of result is set to "OK" so no rollback occurs
+      // As the problem is not really serious, continue and make sure that
+      // the value of result is set to "OK" so no rollback occurs
       result = outcome(0);
-   }
+    }
 
-   sweep_options ACIS_sweep_options;
-   ACIS_sweep_options.set_draft_angle(draft_angle);
-   ACIS_sweep_options.set_gap_type(draft_type);
-   ACIS_sweep_options.set_which_side(ACIS_primary_side);
-   ACIS_sweep_options.set_rigid(rigid);
+  sweep_options ACIS_sweep_options;
+  ACIS_sweep_options.set_draft_angle(draft_angle);
+  ACIS_sweep_options.set_gap_type(draft_type);
+  ACIS_sweep_options.set_which_side(ACIS_primary_side);
+  ACIS_sweep_options.set_rigid(rigid);
+  
+  FACE *FACE_to_sweep_to = NULL;
+  if( to_FACE )
+    {
+      //get face type
+      SURFACE *SURFACE_ptr = to_FACE->geometry();
+      int type = SURFACE_ptr->identity();
 
-   FACE *FACE_to_sweep_to = NULL;
-   if( to_FACE )
-   {
-     //get face type
-     SURFACE *SURFACE_ptr = to_FACE->geometry();
-     int type = SURFACE_ptr->identity();
+      //if face is planar...vector must not be parallel to surf normal
+      if (type == PLANE_TYPE)
+	{
+	  FACE_to_sweep_to = make_FACE( to_FACE, true );
+	}
+      //vector must intersect surf
+      else
+	{
+	  FACE_to_sweep_to = make_FACE( to_FACE );
+	}
 
-     //if face is planar...vector must not be parallel to surf normal
-     if (type == PLANE_TYPE)
-     {
-        FACE_to_sweep_to = make_FACE( to_FACE, true );
-     }
-     //vector must intersect surf
-     else
-     {
-        FACE_to_sweep_to = make_FACE( to_FACE );
-     }
+      SPAtransf trans = get_face_trans(FACE_to_sweep_to);
+      surface *eq_surf = FACE_to_sweep_to->geometry()->trans_surface(trans );
+      ACIS_sweep_options.set_to_face( eq_surf );
+    }
 
-     SPAtransf trans = get_face_trans(FACE_to_sweep_to);
-     surface *eq_surf = FACE_to_sweep_to->geometry()->trans_surface(trans );
-     ACIS_sweep_options.set_to_face( eq_surf );
-   }
+  else if(to_BODY)
+    {
+      ACIS_sweep_options.set_sweep_to_body(to_BODY);
+      //Creates one body out of the fixed body and the result of the sweep up 
+      //to the location of the intersection between the sweep and the fixed 
+      //body.
+      ACIS_sweep_options.set_bool_type(INTERSECT);
+    }
+  BODY* BODYptr = NULL;
+  result = api_sweep_with_options (FACE_ptr, ACIS_sweep_vector,
+				   &ACIS_sweep_options, BODYptr);
 
-   BODY* BODYptr = NULL;
-   result = api_sweep_with_options (FACE_ptr, ACIS_sweep_vector,
-                                    &ACIS_sweep_options, BODYptr);
+  if (BODYptr)
+    {
+      //when setting the sweep to end at a face, result is BODYptr.
+      if( to_FACE || to_BODY)
+	{
+	  //swept body & to_FACE must intersect some
+	  BODY *tmp_body = NULL;
+          if(to_FACE)
+	    tmp_body = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACE_to_sweep_to );
+	  else
+	    tmp_body = to_BODY;
+	  if ( !BODYs_interfering( tmp_body, BODYptr ) )
+	    {
+	      PRINT_ERROR("Terminating surface must intersect swept tool volume.\n");
+	      if (to_FACE)
+		api_delent( tmp_body );
+	      return CUBIT_FAILURE;
+	    }
+	  FACE_ptr = BODYptr->lump()->shell()->first_face();
+	}
+      
+      else
+	{
+	  PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
+	  PRINT_ERROR("API wants to create a new volume.\n");
+	  api_delent( BODYptr );
+	  sweep_status = CUBIT_FAILURE;
+	}
+    }
 
-   if (BODYptr)
-   {
-     //when setting the sweep to end at a face, result is BODYptr.
-     if( to_FACE )
-     {
-       //swept body & to_FACE must intersect some
-       BODY *tmp_body = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACE_to_sweep_to );
-       if ( !BODYs_interfering( tmp_body, BODYptr ) )
-       {
-        PRINT_ERROR("Terminating surface must intersect swept tool volume.\n");
-        api_delent( tmp_body );
-        return CUBIT_FAILURE;
-       }
-       FACE_ptr = BODYptr->lump()->shell()->first_face();
-     }
-     else
-     {
-        PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
-        PRINT_ERROR("API wants to create a new volume.\n");
-        api_delent( BODYptr );
-        sweep_status = CUBIT_FAILURE;
-     }
-   }
-
-   if (!result.ok())
-   {
-     if(rigid)
+  if (!result.ok())
+    {
+      if(rigid)
         PRINT_WARNING("Because surface is not planar, the 'rigid' keyword will be ignored.\n");
 
-     PRINT_DEBUG_99("api_sweep_with_options failed, reverting to api_sw_face_vec.\n");
+      PRINT_DEBUG_99("api_sweep_with_options failed, reverting to api_sw_face_vec.\n");
 
-     result = api_sw_face_vec (FACE_ptr, ACIS_primary_side, ACIS_sweep_vector,
-                               draft_angle, draft_type);
+      result = api_sw_face_vec (FACE_ptr, ACIS_primary_side, ACIS_sweep_vector,
+				draft_angle, draft_type);
 
-     if (!result.ok())
-     {
+      if (!result.ok())
+	{
 
-       PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
-       PRINT_INFO("in sweep_FACE_along_vector\n");
-       AcisQueryEngine::instance()->ACIS_API_error(result);
-       sweep_status = CUBIT_FAILURE;
-     }
-   }
+	  PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
+	  PRINT_INFO("in sweep_FACE_along_vector\n");
+	  AcisQueryEngine::instance()->ACIS_API_error(result);
+	  sweep_status = CUBIT_FAILURE;
+	}
+    }
 
-   if( FACE_to_sweep_to )
-     api_delent( FACE_to_sweep_to );
+  if( FACE_to_sweep_to )
+    api_delent( FACE_to_sweep_to );
 
-   if (!result.ok())
-   {
-       PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
-       PRINT_INFO("in sweep_FACE_along_vector\n");
-       AcisQueryEngine::instance()->ACIS_API_error(result);
-       sweep_status = CUBIT_FAILURE;
-   }
+  if (!result.ok())
+    {
+      PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
+      PRINT_INFO("in sweep_FACE_along_vector\n");
+      AcisQueryEngine::instance()->ACIS_API_error(result);
+      sweep_status = CUBIT_FAILURE;
+    }
 
-     // Now set the option back to its default
-   result = api_set_int_option ( "merge",
-                                 CUBIT_TRUE );
-   if (!result.ok())
-   {
+  // Now set the option back to its default
+  result = api_set_int_option ( "merge",
+				CUBIT_TRUE );
+  if (!result.ok())
+    {
       PRINT_WARNING("In AcisModifyEngine::sweep_FACE_along_vector.\n"
                     "         Error in api_set_int_option.\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
 
-        // As the problem is not really serious, continue and make sure that
-        // the value of result is set to "OK" so no rollback occurs
+      // As the problem is not really serious, continue and make sure that
+      // the value of result is set to "OK" so no rollback occurs
       result = outcome(0);
-   }
+    }
 
-     // Finally, check to make sure that the volume of the swept BODY is positive.
-     // Note that ACIS allows the creation of swept solids that have
-     // negative volume (all the surface normals point inward -- i.e.,
-     // the swept solid is topologically identical to a void)
-   if ( AcisQueryEngine::instance()->volume(AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr)) < 0.0)
-   {
+  // Finally, check to make sure that the volume of the swept BODY is positive.
+  // Note that ACIS allows the creation of swept solids that have
+  // negative volume (all the surface normals point inward -- i.e.,
+  // the swept solid is topologically identical to a void)
+  if ( AcisQueryEngine::instance()->volume(AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr)) < 0.0)
+    {
       sweep_status = CUBIT_FAILURE;
       volume_is_negative = true;
 
-        // Set the value of result such that the API_END macro performs
-        // a bulletin board rollback operation to the corresponding API_BEGIN
-        //result = outcome(API_FAILED);
-   }
+      // Set the value of result such that the API_END macro performs
+      // a bulletin board rollback operation to the corresponding API_BEGIN
+      //result = outcome(API_FAILED);
+    }
 
-   return sweep_status;
+  return sweep_status;
 }
 
 CubitStatus AcisModifyEngine::sweep_FACE_perpendicular(
-    FACE *& FACE_ptr,
-    double distance,
-    bool& volume_is_negative,
-    bool primary_side,
-    double draft_angle,
-    int draft_type,
-    bool rigid,
-    FACE *to_FACE) const
+						       FACE *& FACE_ptr,
+						       double distance,
+						       bool& volume_is_negative,
+						       bool primary_side,
+						       double draft_angle,
+						       int draft_type,
+						       bool rigid,
+						       FACE *to_FACE, 
+						       BODY *to_BODY) const
 {
-     // Make sure the distance of the sweep is not zero
-   if ( distance < (1.0E5 * CUBIT_DBL_MIN) )
-   {
+  // Make sure the distance of the sweep is not zero
+  if ( distance < (1.0E5 * CUBIT_DBL_MIN) )
+    {
       PRINT_WARNING("Distance of sweep is almost zero. No sweep was performed.\n");
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Make sure the draft angle is reasonable
-   if (draft_angle >= CUBIT_PI/2.0 || draft_angle <= -(CUBIT_PI/2.0))
-   {
+  // Make sure the draft angle is reasonable
+  if (draft_angle >= CUBIT_PI/2.0 || draft_angle <= -(CUBIT_PI/2.0))
+    {
       PRINT_ERROR("Draft angle cannot be greater than %e radians\n",
                   CUBIT_PI/2.0);
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Make sure the draft type is either 0 or 1 (this is an ACISism, of course!)
-   if ( !(draft_type == 0 || draft_type == 1) )
-   {
+  // Make sure the draft type is either 0 or 1 (this is an ACISism, of course!)
+  if ( !(draft_type == 0 || draft_type == 1) )
+    {
       PRINT_ERROR("Draft type must be either 0 or 1\n");
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Sweep ho!!
-   CubitStatus sweep_status = CUBIT_SUCCESS;
+  // Sweep ho!!
+  CubitStatus sweep_status = CUBIT_SUCCESS;
 
-   logical ACIS_primary_side = CUBIT_FALSE;
-   if (!primary_side)
-      ACIS_primary_side = CUBIT_TRUE;
+  logical ACIS_primary_side = CUBIT_FALSE;
+  if (!primary_side)
+    ACIS_primary_side = CUBIT_TRUE;
 
-     // Turn off the merge option in ACIS so FACEs used to sweep won't be
-     // "simplified" in their topology (i.e., 5-sided squared faces won't
-     // be reduced to 4-sided square faces) -- in other words, turn on
-     // non-regularized booleans.
-   outcome result = api_set_int_option ( "merge",
-                                 CUBIT_FALSE );
-   if (!result.ok())
-   {
+  // Turn off the merge option in ACIS so FACEs used to sweep won't be
+  // "simplified" in their topology (i.e., 5-sided squared faces won't
+  // be reduced to 4-sided square faces) -- in other words, turn on
+  // non-regularized booleans.
+  outcome result = api_set_int_option ( "merge",
+					CUBIT_FALSE );
+  if (!result.ok())
+    {
       PRINT_WARNING("In AcisModifyEngine::sweep_FACE_perpendicular.\n"
                     "         Error in api_set_int_option.\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
 
-        // As the problem is not really serious, continue and make sure that
-        // the value of result is set to "OK" so no rollback occurs
+      // As the problem is not really serious, continue and make sure that
+      // the value of result is set to "OK" so no rollback occurs
       result = outcome(0);
-   }
+    }
 
-   sweep_options ACIS_sweep_options;
-   ACIS_sweep_options.set_draft_angle(draft_angle);
-   ACIS_sweep_options.set_gap_type(draft_type);
-   ACIS_sweep_options.set_which_side(ACIS_primary_side);
-   ACIS_sweep_options.set_rigid(rigid);
+  sweep_options ACIS_sweep_options;
+  ACIS_sweep_options.set_draft_angle(draft_angle);
+  ACIS_sweep_options.set_gap_type(draft_type);
+  ACIS_sweep_options.set_which_side(ACIS_primary_side);
+  ACIS_sweep_options.set_rigid(rigid);
 
-   FACE *FACE_to_sweep_to = NULL;
-   if( to_FACE )
-   {
-     //get face type
-     SURFACE *SURFACE_ptr = to_FACE->geometry();
-     int type = SURFACE_ptr->identity();
+  FACE *FACE_to_sweep_to = NULL;
+  if( to_FACE )//mutually exclusive with sweep_to_body
+    {
+      //get face type
+      SURFACE *SURFACE_ptr = to_FACE->geometry();
+      int type = SURFACE_ptr->identity();
 
-     //if face is planar...vector must not be parallel to surf normal
-     if (type == PLANE_TYPE)
-     {
-        FACE_to_sweep_to = make_FACE( to_FACE, true );
-     }
-     //vector must intersect surf
-     else
-     {
-        FACE_to_sweep_to = make_FACE( to_FACE );
-     }
+      //if face is planar...vector must not be parallel to surf normal
+      if (type == PLANE_TYPE)
+	{
+	  FACE_to_sweep_to = make_FACE( to_FACE, true );
+	}
+      //vector must intersect surf
+      else
+	{
+	  FACE_to_sweep_to = make_FACE( to_FACE );
+	}
 
-     SPAtransf trans = get_face_trans(FACE_to_sweep_to);
-     surface *eq_surf = FACE_to_sweep_to->geometry()->trans_surface(trans );
-     ACIS_sweep_options.set_to_face( eq_surf );
-   }
+      SPAtransf trans = get_face_trans(FACE_to_sweep_to);
+      surface *eq_surf = FACE_to_sweep_to->geometry()->trans_surface(trans );
+      ACIS_sweep_options.set_to_face( eq_surf );
+    }
 
-   BODY* BODYptr = NULL;
-   result = api_sweep_with_options (FACE_ptr, distance,
-                                    &ACIS_sweep_options, BODYptr);
+  else if(to_BODY)//mutually exclusive with to_face
+    {
+      ACIS_sweep_options.set_sweep_to_body(to_BODY);
+      //Creates one body out of the fixed body and the result of the sweep up 
+      //to the location of the intersection between the sweep and the fixed 
+      //body.
+      ACIS_sweep_options.set_bool_type(INTERSECT);
+    }
 
-   if (BODYptr)
-   {
-     //when setting the sweep to end at a face, result is BODYptr.
-     if( to_FACE)
-     {
-       //swept body & to_FACE must intersect some
-       BODY *tmp_body = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACE_to_sweep_to );
-       if ( !BODYs_interfering( tmp_body, BODYptr ) )
-       {
-        PRINT_ERROR("Terminating surface must intersect swept tool volume.\n");
-        api_delent( tmp_body );
-        return CUBIT_FAILURE;
-       }
-       FACE_ptr = BODYptr->lump()->shell()->first_face();
-     }
-     else
-     {
-        PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
-        PRINT_ERROR("API wants to create a new volume \n");
-        api_delent( BODYptr );
-        sweep_status = CUBIT_FAILURE;
-     }
-   }
+  BODY* BODYptr = NULL;
+  result = api_sweep_with_options (FACE_ptr, distance,
+				   &ACIS_sweep_options, BODYptr);
 
-   if( FACE_to_sweep_to )
-     api_delent( FACE_to_sweep_to );
+  if (BODYptr)
+    {
+      //when setting the sweep to end at a face, result is BODYptr.
+      if( to_FACE || to_BODY)
+	{
+	  BODY *tmp_body = NULL;
+	  //swept body & to_FACE must intersect some
+	  if(to_FACE)
+	    tmp_body = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACE_to_sweep_to );
+	  else
+	    tmp_body = to_BODY;
+	  if ( !BODYs_interfering( tmp_body, BODYptr ) )
+	    {
+	      PRINT_ERROR("Terminating surface must intersect swept tool volume.\n");
+	      if(to_FACE)
+		api_delent( tmp_body );
+	      return CUBIT_FAILURE;
+	    }
+	  FACE_ptr = BODYptr->lump()->shell()->first_face();
+	}
+      else
+	{
+	  PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
+	  PRINT_ERROR("API wants to create a new volume \n");
+	  api_delent( BODYptr );
+	  sweep_status = CUBIT_FAILURE;
+	}
+    }
 
-   if (!result.ok())
-   {
+  if( FACE_to_sweep_to )
+    api_delent( FACE_to_sweep_to );
+
+  if (!result.ok())
+    {
       PRINT_ERROR("Error during ACIS sweep operation,  api_sweep_with_options \n");
       PRINT_INFO("in sweep_FACE_perpendicular\n");
       PRINT_INFO("If face is not planar, perpendicular doesn't make sense.\n"
                  "Try sweeping along a vector instead.\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
       sweep_status = CUBIT_FAILURE;
-   }
+    }
 
-     // Now set the option back to its default
-   result = api_set_int_option ( "merge",
-                                 CUBIT_TRUE );
-   if (!result.ok())
-   {
+  // Now set the option back to its default
+  result = api_set_int_option ( "merge",
+				CUBIT_TRUE );
+  if (!result.ok())
+    {
       PRINT_WARNING("In AcisModifyEngine::sweep_FACE_perpendicular.\n"
                     "         Error in api_set_int_option.\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
 
-        // As the problem is not really serious, continue and make sure that
-        // the value of result is set to "OK" so no rollback occurs
+      // As the problem is not really serious, continue and make sure that
+      // the value of result is set to "OK" so no rollback occurs
       result = outcome(0);
-   }
+    }
 
-     // Finally, check to make sure that the volume of the swept BODY is positive.
-     // Note that ACIS allows the creation of swept solids that have
-     // negative volume (all the surface normals point inward -- i.e.,
-     // the swept solid is topologically identical to a void)
-   if ( AcisQueryEngine::instance()->volume(AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr)) < 0.0)
-   {
+  // Finally, check to make sure that the volume of the swept BODY is positive.
+  // Note that ACIS allows the creation of swept solids that have
+  // negative volume (all the surface normals point inward -- i.e.,
+  // the swept solid is topologically identical to a void)
+  if ( AcisQueryEngine::instance()->volume(AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr)) < 0.0)
+    {
       sweep_status = CUBIT_FAILURE;
       volume_is_negative = CUBIT_TRUE;
 
-        // Set the value of result such that the API_END macro performs
-        // a bulletin board rollback operation to the corresponding API_BEGIN
-        //result = outcome(API_FAILED);
-   }
+      // Set the value of result such that the API_END macro performs
+      // a bulletin board rollback operation to the corresponding API_BEGIN
+      //result = outcome(API_FAILED);
+    }
 
-   return sweep_status;
+  return sweep_status;
 }
 
 CubitStatus AcisModifyEngine::sweep_EDGE_along_vector(
-    EDGE* EDGE_ptr,
-    BODY *&BODYptr,
-    const CubitVector& sweep_vector,
-    double draft_angle,
-    int draft_type,
-    bool rigid,
-    FACE *to_FACE) const
+						      EDGE* EDGE_ptr,
+						      BODY *&BODYptr,
+						      const CubitVector& sweep_vector,
+						      double draft_angle,
+						      int draft_type,
+						      bool rigid,
+						      FACE *to_FACE,
+						      BODY *to_BODY) const
 {
-     // Make sure the distance of the sweep is not zero
-   if ( sweep_vector.length() < (1.0E5 * CUBIT_DBL_MIN) )
-   {
+  // Make sure the distance of the sweep is not zero
+  if ( sweep_vector.length() < (1.0E5 * CUBIT_DBL_MIN) )
+    {
       PRINT_WARNING("Distance of sweep is almost zero. No sweep was performed.\n");
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Make sure the draft angle is reasonable
-   if (draft_angle >= CUBIT_PI/2.0 || draft_angle <= -(CUBIT_PI/2.0))
-   {
+  // Make sure the draft angle is reasonable
+  if (draft_angle >= CUBIT_PI/2.0 || draft_angle <= -(CUBIT_PI/2.0))
+    {
       PRINT_ERROR("Draft angle cannot be greater than %e radians\n",
                   CUBIT_PI/2.0);
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Make sure the draft type is either 0 or 1 (this is an ACISism, of course!)
-   if ( !(draft_type == 0 || draft_type == 1) )
-   {
+  // Make sure the draft type is either 0 or 1 (this is an ACISism, of course!)
+  if ( !(draft_type == 0 || draft_type == 1) )
+    {
       PRINT_ERROR("Draft type must be either 0 or 1\n");
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Sweep ho!!
-   CubitStatus sweep_status = CUBIT_SUCCESS;
-   SPAvector ACIS_sweep_vector;
-   ACIS_sweep_vector.set_x(sweep_vector.x());
-   ACIS_sweep_vector.set_y(sweep_vector.y());
-   ACIS_sweep_vector.set_z(sweep_vector.z());
+  // Sweep ho!!
+  CubitStatus sweep_status = CUBIT_SUCCESS;
+  SPAvector ACIS_sweep_vector;
+  ACIS_sweep_vector.set_x(sweep_vector.x());
+  ACIS_sweep_vector.set_y(sweep_vector.y());
+  ACIS_sweep_vector.set_z(sweep_vector.z());
 
-     // Turn off the merge option in ACIS so EDGEs used to sweep won't be
-     // "simplified" in their topology (i.e., 5-sided squared faces won't
-     // be reduced to 4-sided square faces) -- in other words, turn on
-     // non-regularized booleans.
-   outcome result = api_set_int_option ( "merge",
-                                 CUBIT_FALSE );
-   if (!result.ok())
-   {
+  // Turn off the merge option in ACIS so EDGEs used to sweep won't be
+  // "simplified" in their topology (i.e., 5-sided squared faces won't
+  // be reduced to 4-sided square faces) -- in other words, turn on
+  // non-regularized booleans.
+  outcome result = api_set_int_option ( "merge",
+					CUBIT_FALSE );
+  if (!result.ok())
+    {
       PRINT_WARNING("In AcisModifyEngine::sweep_EDGE_along_vector.\n"
                     "         Error in api_set_int_option.\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
 
-        // As the problem is not really serious, continue and make sure that
-        // the value of result is set to "OK" so no rollback occurs
+      // As the problem is not really serious, continue and make sure that
+      // the value of result is set to "OK" so no rollback occurs
       result = outcome(0);
-   }
+    }
 
-   sweep_options ACIS_sweep_options;
-   ACIS_sweep_options.set_draft_angle(draft_angle);
-   ACIS_sweep_options.set_gap_type(draft_type);
-   ACIS_sweep_options.set_rigid(rigid);
-   EDGE *copied_EDGE_ptr = NULL;
-   result = api_edge( EDGE_ptr, copied_EDGE_ptr);
+  sweep_options ACIS_sweep_options;
+  ACIS_sweep_options.set_draft_angle(draft_angle);
+  ACIS_sweep_options.set_gap_type(draft_type);
+  ACIS_sweep_options.set_rigid(rigid);
+  EDGE *copied_EDGE_ptr = NULL;
+  result = api_edge( EDGE_ptr, copied_EDGE_ptr);
 
-   FACE *FACE_to_sweep_to = NULL;
-   if( to_FACE )
-   {
-     //get face type
-     SURFACE *SURFACE_ptr = to_FACE->geometry();
-     int type = SURFACE_ptr->identity();
+  FACE *FACE_to_sweep_to = NULL;
+  if( to_FACE )//mutually exclusive with sweep_to_body
+    {
+      //get face type
+      SURFACE *SURFACE_ptr = to_FACE->geometry();
+      int type = SURFACE_ptr->identity();
 
-     //if face is planar...vector must not be parallel to surf normal
-     if (type == PLANE_TYPE)
-     {
-        FACE_to_sweep_to = make_FACE( to_FACE, true );
-     }
-     //vector must intersect surf
-     else
-     {
-        FACE_to_sweep_to = make_FACE( to_FACE );
-     }
+      //if face is planar...vector must not be parallel to surf normal
+      if (type == PLANE_TYPE)
+	{
+	  FACE_to_sweep_to = make_FACE( to_FACE, true );
+	}
+      //vector must intersect surf
+      else
+	{
+	  FACE_to_sweep_to = make_FACE( to_FACE );
+	}
 
-     SPAtransf trans = get_face_trans(FACE_to_sweep_to);
-     surface *eq_surf = FACE_to_sweep_to->geometry()->trans_surface(trans );
-     ACIS_sweep_options.set_to_face( eq_surf );
-   }
+      SPAtransf trans = get_face_trans(FACE_to_sweep_to);
+      surface *eq_surf = FACE_to_sweep_to->geometry()->trans_surface(trans );
+      ACIS_sweep_options.set_to_face( eq_surf );
+    }
 
-   if( !result.ok() )
-   {
-     PRINT_ERROR( "Unable to copy edge\n");
-     return CUBIT_FAILURE;
-   }
-   ATTRIB_CUBIT_OWNER::remove_cubit_owner( (ENTITY *)copied_EDGE_ptr,
-                                           CUBIT_TRUE );
-   result = api_sweep_with_options (copied_EDGE_ptr, ACIS_sweep_vector,
-                                    &ACIS_sweep_options, BODYptr);
+  else if(to_BODY)//mutually exclusive with to_face
+    {
+      ACIS_sweep_options.set_sweep_to_body(to_BODY);
+      //Creates one body out of the fixed body and the result of the sweep up 
+      //to the location of the intersection between the sweep and the fixed 
+      //body.
+      ACIS_sweep_options.set_bool_type(INTERSECT);
+    }
 
-   if (BODYptr)
-   {
-       sweep_status = CUBIT_SUCCESS;
-   }
-   if (!result.ok())
-   {
+  if( !result.ok() )
+    {
+      PRINT_ERROR( "Unable to copy edge\n");
+      return CUBIT_FAILURE;
+    }
+  ATTRIB_CUBIT_OWNER::remove_cubit_owner( (ENTITY *)copied_EDGE_ptr,
+					  CUBIT_TRUE );
+  result = api_sweep_with_options (copied_EDGE_ptr, ACIS_sweep_vector,
+				   &ACIS_sweep_options, BODYptr);
+
+  if (BODYptr)
+    {
+      sweep_status = CUBIT_SUCCESS;
+    }
+  if (!result.ok())
+    {
       PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
       if ( copied_EDGE_ptr != NULL )
         api_delent(copied_EDGE_ptr);
       sweep_status = CUBIT_FAILURE;
-   }
+    }
 
-     // Now set the option back to its default
-   result = api_set_int_option ( "merge",
-                                 CUBIT_TRUE );
-   if (!result.ok())
-   {
+  // Now set the option back to its default
+  result = api_set_int_option ( "merge",
+				CUBIT_TRUE );
+  if (!result.ok())
+    {
       PRINT_WARNING("In AcisModifyEngine::sweep_EDGE_along_vector.\n"
                     "         Error in api_set_int_option.\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
 
-        // As the problem is not really serious, continue and make sure that
-        // the value of result is set to "OK" so no rollback occurs
+      // As the problem is not really serious, continue and make sure that
+      // the value of result is set to "OK" so no rollback occurs
       result = outcome(0);
-   }
+    }
 
-   if( FACE_to_sweep_to )
-     api_delent( FACE_to_sweep_to );
+  if( FACE_to_sweep_to )
+    api_delent( FACE_to_sweep_to );
 
-     // Finally, check to make sure that the volume of the swept BODY is positive.
-     // Note that ACIS allows the creation of swept solids that have
-     // negative volume (all the surface normals point inward -- i.e.,
-     // the swept solid is topologically identical to a void)
+  // Finally, check to make sure that the volume of the swept BODY is positive.
+  // Note that ACIS allows the creation of swept solids that have
+  // negative volume (all the surface normals point inward -- i.e.,
+  // the swept solid is topologically identical to a void)
 
-   return sweep_status;
+  return sweep_status;
 }
 
 
@@ -3313,269 +2677,295 @@
 // Creation Date : 8/7/98
 //-------------------------------------------------------------------------
 CubitStatus AcisModifyEngine::sweep_FACE_along_WIRE(
-    FACE *& FACE_ptr,
-    BODY* wire_BODY_ptr,
-    double draft_angle,
-    int draft_type,
-    bool rigid,
-    FACE *to_FACE ) const
+						    FACE *& FACE_ptr,
+						    BODY* wire_BODY_ptr,
+						    double draft_angle,
+						    int draft_type,
+						    bool rigid,
+						    FACE *to_FACE,
+						    BODY *to_BODY ) const
 {
-     // Make sure the draft angle is reasonable
-   if (draft_angle >= CUBIT_PI/2.0 || draft_angle <= -(CUBIT_PI/2.0))
-   {
+  // Make sure the draft angle is reasonable
+  if (draft_angle >= CUBIT_PI/2.0 || draft_angle <= -(CUBIT_PI/2.0))
+    {
       PRINT_ERROR("Draft angle cannot be greater than %e radians\n",
                   CUBIT_PI/2.0);
       return CUBIT_FAILURE;
-   }
+    }
 
-   CubitStatus sweep_status = CUBIT_SUCCESS;
+  CubitStatus sweep_status = CUBIT_SUCCESS;
 
-   sweep_options ACIS_sweep_options;
+  sweep_options ACIS_sweep_options;
 
-     // Turn off the merge option in ACIS so FACEs used to sweep won't be
-     // "simplified" in their topology (i.e., 5-sided squared faces won't
-     // be reduced to 4-sided square faces) -- in other words, turn on
-     // non-regularized booleans.
-   outcome result = api_set_int_option ( "merge", CUBIT_FALSE );
+  // Turn off the merge option in ACIS so FACEs used to sweep won't be
+  // "simplified" in their topology (i.e., 5-sided squared faces won't
+  // be reduced to 4-sided square faces) -- in other words, turn on
+  // non-regularized booleans.
+  outcome result = api_set_int_option ( "merge", CUBIT_FALSE );
 
-   if (!result.ok())
-   {
-     PRINT_WARNING("In AcisModifyEngine::sweep_FACE_along_WIRE.\n"
-                   "         Error in api_set_int_option.\n");
-     AcisQueryEngine::instance()->ACIS_API_error(result);
+  if (!result.ok())
+    {
+      PRINT_WARNING("In AcisModifyEngine::sweep_FACE_along_WIRE.\n"
+		    "         Error in api_set_int_option.\n");
+      AcisQueryEngine::instance()->ACIS_API_error(result);
 
-       // As the problem is not really serious, continue and make sure that
-       // the value of result is set to "OK" so no rollback occurs
-     result = outcome(0);
-   }
+      // As the problem is not really serious, continue and make sure that
+      // the value of result is set to "OK" so no rollback occurs
+      result = outcome(0);
+    }
 
-   ACIS_sweep_options.set_draft_angle(draft_angle);
-   ACIS_sweep_options.set_gap_type(draft_type);
-   ACIS_sweep_options.set_rigid(rigid);
+  ACIS_sweep_options.set_draft_angle(draft_angle);
+  ACIS_sweep_options.set_gap_type(draft_type);
+  ACIS_sweep_options.set_rigid(rigid);
 
-   FACE *FACE_to_sweep_to = NULL;
-   if( to_FACE )
-   {
-     //get face type
-     SURFACE *SURFACE_ptr = to_FACE->geometry();
-     int type = SURFACE_ptr->identity();
+  FACE *FACE_to_sweep_to = NULL;
+  if( to_FACE )//mutually exclusive with sweep_to_body.
+    {
+      //get face type
+      SURFACE *SURFACE_ptr = to_FACE->geometry();
+      int type = SURFACE_ptr->identity();
 
-     //if face is planar...vector must not be parallel to surf normal
-     if (type == PLANE_TYPE)
-     {
-        FACE_to_sweep_to = make_FACE( to_FACE, true );
-     }
-     //vector must intersect surf
-     else
-     {
-        FACE_to_sweep_to = make_FACE( to_FACE );
-     }
+      //if face is planar...vector must not be parallel to surf normal
+      if (type == PLANE_TYPE)
+	{
+	  FACE_to_sweep_to = make_FACE( to_FACE, true );
+	}
+      //vector must intersect surf
+      else
+	{
+	  FACE_to_sweep_to = make_FACE( to_FACE );
+	}
 
-     SPAtransf trans = get_face_trans(FACE_to_sweep_to);
-     surface *eq_surf = FACE_to_sweep_to->geometry()->trans_surface(trans );
-     ACIS_sweep_options.set_to_face( eq_surf );
-   }
+      SPAtransf trans = get_face_trans(FACE_to_sweep_to);
+      surface *eq_surf = FACE_to_sweep_to->geometry()->trans_surface(trans );
+      ACIS_sweep_options.set_to_face( eq_surf );
+    }
 
-   // Do the real work!!
-   BODY* BODYptr = NULL;
-   result = api_sweep_with_options (FACE_ptr, (EDGE*)wire_BODY_ptr, &ACIS_sweep_options, BODYptr);
+  else if(to_BODY)//mutually exclusive with to_face
+    {
+      ACIS_sweep_options.set_sweep_to_body(to_BODY);
+      //Creates one body out of the fixed body and the result of the sweep up 
+      //to the location of the intersection between the sweep and the fixed 
+      //body.
+      ACIS_sweep_options.set_bool_type(INTERSECT);
+    }
 
-   if (BODYptr)
-   {
-     //when setting the sweep to end at a face, result is BODYptr.
-     if( to_FACE )
-     {
-       //swept body & to_FACE must intersect some
-       BODY *tmp_body = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACE_to_sweep_to );
-       if ( !BODYs_interfering( tmp_body, BODYptr ) )
-       {
-        PRINT_ERROR("Terminating surface must intersect swept tool volume.\n");
-        api_delent( tmp_body );
-        return CUBIT_FAILURE;
-       }
-       FACE_ptr = BODYptr->lump()->shell()->first_face();
-     }
-     else
-     {
-        PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
-        PRINT_ERROR("API wants to create a new volume \n");
-        api_delent( BODYptr );
-        sweep_status = CUBIT_FAILURE;
-     }
-   }
+  // Do the real work!!
+  BODY* BODYptr = NULL;
+  result = api_sweep_with_options (FACE_ptr, (EDGE*)wire_BODY_ptr, &ACIS_sweep_options, BODYptr);
 
-   if( FACE_to_sweep_to )
-     api_delent( FACE_to_sweep_to );
+  if (BODYptr)
+    {
+      //when setting the sweep to end at a face, result is BODYptr.
+      if( to_FACE || to_BODY)
+	{
+	  BODY *tmp_body = NULL;
+	  //swept body & to_FACE must intersect some
+	  if(to_FACE)
+	    tmp_body = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACE_to_sweep_to );
+	  else
+	    tmp_body = to_BODY;
 
-   if (!result.ok())
-   {
+	  if ( !BODYs_interfering( tmp_body, BODYptr ) )
+	    {
+	      PRINT_ERROR("Terminating surface must intersect swept tool volume.\n");
+	      if(to_FACE)
+		api_delent( tmp_body );
+	      return CUBIT_FAILURE;
+	    }
+	  FACE_ptr = BODYptr->lump()->shell()->first_face();
+	}
+      else
+	{
+	  PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
+	  PRINT_ERROR("API wants to create a new volume \n");
+	  api_delent( BODYptr );
+	  sweep_status = CUBIT_FAILURE;
+	}
+    }
+
+  if( FACE_to_sweep_to )
+    api_delent( FACE_to_sweep_to );
+
+  if (!result.ok())
+    {
       PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
       sweep_status = CUBIT_FAILURE;
-   }
+    }
 
-     // Now set the option back to its default
-   result = api_set_int_option ( "merge", CUBIT_TRUE );
-   if (!result.ok())
-   {
+  // Now set the option back to its default
+  result = api_set_int_option ( "merge", CUBIT_TRUE );
+  if (!result.ok())
+    {
       PRINT_WARNING("In AcisModifyEngine::sweep_FACE_along_WIRE.\n"
                     "         Error in api_set_int_option.\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
 
-        // As the problem is not really serious, continue and make sure that
-        // the value of result is set to "OK" so no rollback occurs
+      // As the problem is not really serious, continue and make sure that
+      // the value of result is set to "OK" so no rollback occurs
       result = outcome(0);
-   }
+    }
 
-   return sweep_status;
+  return sweep_status;
 
 }
 
 CubitStatus AcisModifyEngine::sweep_EDGE_along_WIRE(
-    EDGE* EDGE_ptr,
-    BODY* wire_BODY_ptr,
-    BODY *&BODYptr,
-    double draft_angle,
-    int draft_type,
-    bool rigid,
-    FACE *to_FACE) const
+						    EDGE* EDGE_ptr,
+						    BODY* wire_BODY_ptr,
+						    BODY *&BODYptr,
+						    double draft_angle,
+						    int draft_type,
+						    bool rigid,
+						    FACE *to_FACE,
+						    BODY *to_BODY) const
 {
 
-     // Make sure the draft angle is reasonable
-   if (draft_angle >= CUBIT_PI/2.0 || draft_angle <= -(CUBIT_PI/2.0))
-   {
+  // Make sure the draft angle is reasonable
+  if (draft_angle >= CUBIT_PI/2.0 || draft_angle <= -(CUBIT_PI/2.0))
+    {
       PRINT_ERROR("Draft angle cannot be greater than %e radians\n",
                   CUBIT_PI/2.0);
       return CUBIT_FAILURE;
-   }
+    }
 
-   CubitStatus sweep_status = CUBIT_SUCCESS;
+  CubitStatus sweep_status = CUBIT_SUCCESS;
 
-   sweep_options ACIS_sweep_options;
+  sweep_options ACIS_sweep_options;
 
-     // Turn off the merge option in ACIS so FACEs used to sweep won't be
-     // "simplified" in their topology (i.e., 5-sided squared faces won't
-     // be reduced to 4-sided square faces) -- in other words, turn on
-     // non-regularized booleans.
-   outcome result = api_set_int_option ( "merge", CUBIT_FALSE );
-   if (!result.ok())
-   {
+  // Turn off the merge option in ACIS so FACEs used to sweep won't be
+  // "simplified" in their topology (i.e., 5-sided squared faces won't
+  // be reduced to 4-sided square faces) -- in other words, turn on
+  // non-regularized booleans.
+  outcome result = api_set_int_option ( "merge", CUBIT_FALSE );
+  if (!result.ok())
+    {
       PRINT_WARNING("In AcisModifyEngine::sweep_EDGE_along_WIRE.\n"
                     "         Error in api_set_int_option.\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
 
-        // As the problem is not really serious, continue and make sure that
-        // the value of result is set to "OK" so no rollback occurs
+      // As the problem is not really serious, continue and make sure that
+      // the value of result is set to "OK" so no rollback occurs
       result = outcome(0);
-   }
+    }
 
-   ACIS_sweep_options.set_draft_angle(draft_angle);
-   ACIS_sweep_options.set_gap_type(draft_type);
-   ACIS_sweep_options.set_rigid(rigid);
-   EDGE *copied_EDGE_ptr = NULL;
-   result = api_edge( EDGE_ptr, copied_EDGE_ptr );
-   if( !result.ok() )
-   {
-     PRINT_ERROR( "Unable to copy edge\n");
-     return CUBIT_FAILURE;
-   }
+  ACIS_sweep_options.set_draft_angle(draft_angle);
+  ACIS_sweep_options.set_gap_type(draft_type);
+  ACIS_sweep_options.set_rigid(rigid);
+  EDGE *copied_EDGE_ptr = NULL;
+  result = api_edge( EDGE_ptr, copied_EDGE_ptr );
+  if( !result.ok() )
+    {
+      PRINT_ERROR( "Unable to copy edge\n");
+      return CUBIT_FAILURE;
+    }
 
-   //if edge-to-sweep has start or end vertex coincident w/
-   //end vertex on path wire, flip all edges in path wire
-   SPAposition end_coords;
-   get_wire_end_position(wire_BODY_ptr, end_coords);
+  //if edge-to-sweep has start or end vertex coincident w/
+  //end vertex on path wire, flip all edges in path wire
+  SPAposition end_coords;
+  get_wire_end_position(wire_BODY_ptr, end_coords);
 
-   SPAposition tmp_coords = EDGE_ptr->start()->geometry()->coords();
-   CubitVector start_coord( tmp_coords.x(), tmp_coords.y(), tmp_coords.z() );
+  SPAposition tmp_coords = EDGE_ptr->start()->geometry()->coords();
+  CubitVector start_coord( tmp_coords.x(), tmp_coords.y(), tmp_coords.z() );
 
-   tmp_coords = EDGE_ptr->end()->geometry()->coords();
-   CubitVector end_coord( tmp_coords.x(), tmp_coords.y(), tmp_coords.z() );
+  tmp_coords = EDGE_ptr->end()->geometry()->coords();
+  CubitVector end_coord( tmp_coords.x(), tmp_coords.y(), tmp_coords.z() );
 
-   CubitVector wire_end_coord( end_coords.x(), end_coords.y(), end_coords.z() );
+  CubitVector wire_end_coord( end_coords.x(), end_coords.y(), end_coords.z() );
 
-   if ( (GeometryQueryTool::instance()->about_spatially_equal(start_coord, wire_end_coord,
-                                       GeometryQueryTool::get_geometry_factor())) ||
-        (GeometryQueryTool::instance()->about_spatially_equal(end_coord, wire_end_coord,
-                                       GeometryQueryTool::get_geometry_factor())) )
-   {
-     //reverse all edges in wire body
-     ENTITY_LIST EDGE_list;
-     api_get_edges( wire_BODY_ptr, EDGE_list );
+  if ( (GeometryQueryTool::instance()->about_spatially_equal(start_coord, wire_end_coord,
+							     GeometryQueryTool::get_geometry_factor())) ||
+       (GeometryQueryTool::instance()->about_spatially_equal(end_coord, wire_end_coord,
+							     GeometryQueryTool::get_geometry_factor())) )
+    {
+      //reverse all edges in wire body
+      ENTITY_LIST EDGE_list;
+      api_get_edges( wire_BODY_ptr, EDGE_list );
 
-     EDGE_list.init();
-     ENTITY *tmp_ent = NULL;
-     while( (tmp_ent = EDGE_list.next()) != NULL )
-     {
-       EDGE *tmp_edge = (EDGE*)tmp_ent;
-       VERTEX *old_start = tmp_edge->start();
-       VERTEX *old_end = tmp_edge->end();
-       tmp_edge->set_sense( tmp_edge->sense() == FORWARD ? REVERSED : FORWARD );
-       tmp_edge->set_start( old_end );
-       tmp_edge->set_end( old_start );
-     }
-   }
+      EDGE_list.init();
+      ENTITY *tmp_ent = NULL;
+      while( (tmp_ent = EDGE_list.next()) != NULL )
+	{
+	  EDGE *tmp_edge = (EDGE*)tmp_ent;
+	  VERTEX *old_start = tmp_edge->start();
+	  VERTEX *old_end = tmp_edge->end();
+	  tmp_edge->set_sense( tmp_edge->sense() == FORWARD ? REVERSED : FORWARD );
+	  tmp_edge->set_start( old_end );
+	  tmp_edge->set_end( old_start );
+	}
+    }
 
-   ATTRIB_CUBIT_OWNER::remove_cubit_owner( (ENTITY *)copied_EDGE_ptr,
-                                           CUBIT_TRUE );
+  ATTRIB_CUBIT_OWNER::remove_cubit_owner( (ENTITY *)copied_EDGE_ptr,
+					  CUBIT_TRUE );
 
-   FACE *FACE_to_sweep_to = NULL;
-   if( to_FACE )
-   {
-     //get face type
-     SURFACE *SURFACE_ptr = to_FACE->geometry();
-     int type = SURFACE_ptr->identity();
+  FACE *FACE_to_sweep_to = NULL;
+  if( to_FACE )//mutually exclusive with sweep_to_body
+    {
+      //get face type
+      SURFACE *SURFACE_ptr = to_FACE->geometry();
+      int type = SURFACE_ptr->identity();
 
-     //if face is planar...vector must not be parallel to surf normal
-     if (type == PLANE_TYPE)
-     {
-        FACE_to_sweep_to = make_FACE( to_FACE, true );
-     }
-     //vector must intersect surf
-     else
-     {
-        FACE_to_sweep_to = make_FACE( to_FACE );
-     }
+      //if face is planar...vector must not be parallel to surf normal
+      if (type == PLANE_TYPE)
+	{
+	  FACE_to_sweep_to = make_FACE( to_FACE, true );
+	}
+      //vector must intersect surf
+      else
+	{
+	  FACE_to_sweep_to = make_FACE( to_FACE );
+	}
 
-     SPAtransf trans = get_face_trans(FACE_to_sweep_to);
-     surface *eq_surf = FACE_to_sweep_to->geometry()->trans_surface(trans );
-     ACIS_sweep_options.set_to_face( eq_surf );
-   }
+      SPAtransf trans = get_face_trans(FACE_to_sweep_to);
+      surface *eq_surf = FACE_to_sweep_to->geometry()->trans_surface(trans );
+      ACIS_sweep_options.set_to_face( eq_surf );
+    }
 
-     // Do the real work!!
-   result = api_sweep_with_options (copied_EDGE_ptr, wire_BODY_ptr, &ACIS_sweep_options, BODYptr);
+  else if(to_BODY)//mutually exclusive with to_face
+    {
+      ACIS_sweep_options.set_sweep_to_body(to_BODY);
+      //Creates one body out of the fixed body and the result of the sweep up 
+      //to the location of the intersection between the sweep and the fixed 
+      //body.
+      ACIS_sweep_options.set_bool_type(INTERSECT);
+    }
 
-   if (BODYptr)
-   {
+  // Do the real work!!
+  result = api_sweep_with_options (copied_EDGE_ptr, wire_BODY_ptr, &ACIS_sweep_options, BODYptr);
+
+  if (BODYptr)
+    {
       sweep_status = CUBIT_SUCCESS;
-   }
+    }
 
-   if (!result.ok())
-   {
+  if (!result.ok())
+    {
       PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
       if ( copied_EDGE_ptr != NULL )
         api_delent(copied_EDGE_ptr);
 
       sweep_status = CUBIT_FAILURE;
-   }
+    }
 
-   if( FACE_to_sweep_to )
-     api_delent( FACE_to_sweep_to );
+  if( FACE_to_sweep_to )
+    api_delent( FACE_to_sweep_to );
 
-     // Now set the option back to its default
-   result = api_set_int_option ( "merge", CUBIT_TRUE );
-   if (!result.ok())
-   {
+  // Now set the option back to its default
+  result = api_set_int_option ( "merge", CUBIT_TRUE );
+  if (!result.ok())
+    {
       PRINT_WARNING("In AcisModifyEngine::sweep_EDGE_along_WIRE.\n"
                     "         Error in api_set_int_option.\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
 
-        // As the problem is not really serious, continue and make sure that
-        // the value of result is set to "OK" so no rollback occurs
+      // As the problem is not really serious, continue and make sure that
+      // the value of result is set to "OK" so no rollback occurs
       result = outcome(0);
-   }
+    }
 
-   return sweep_status;
+  return sweep_status;
 }
 
 //-------------------------------------------------------------------------
@@ -3591,363 +2981,387 @@
 // Creation Date :
 //-------------------------------------------------------------------------
 CubitStatus AcisModifyEngine::sweep_FACE_about_axis(
-    FACE *&FACE_ptr,
-    const CubitVector& axis_unit_vector,
-    const CubitVector& point,
-    double angle,
-    bool &volume_is_negative,
-    bool primary_side,
-    int steps,
-    double draft_angle,
-    int draft_type,
-    bool rigid,
-    FACE *to_FACE ) const
+						    FACE *&FACE_ptr,
+						    const CubitVector& axis_unit_vector,
+						    const CubitVector& point,
+						    double angle,
+						    bool &volume_is_negative,
+						    bool primary_side,
+						    int steps,
+						    double draft_angle,
+						    int draft_type,
+						    bool rigid,
+						    FACE *to_FACE,
+						    BODY *to_BODY ) const
 {
-     // Sweep ho!!
-   CubitStatus sweep_status = CUBIT_SUCCESS;
+  // Sweep ho!!
+  CubitStatus sweep_status = CUBIT_SUCCESS;
 
-     // Convert the Cubit point and SPAvector into an ACIS point and SPAvector
-     // before calling the member function that calls the ACIS API
-     // function.
-   SPAunit_vector ACIS_axis_unit_vector(
-       axis_unit_vector.x(),
-       axis_unit_vector.y(),
-       axis_unit_vector.z() );
-   SPAposition ACIS_point( point.x(), point.y(), point.z() );
-   logical ACIS_primary_side = CUBIT_TRUE;
-   if (!primary_side) ACIS_primary_side = CUBIT_FALSE;
+  // Convert the Cubit point and SPAvector into an ACIS point and SPAvector
+  // before calling the member function that calls the ACIS API
+  // function.
+  SPAunit_vector ACIS_axis_unit_vector(
+				       axis_unit_vector.x(),
+				       axis_unit_vector.y(),
+				       axis_unit_vector.z() );
+  SPAposition ACIS_point( point.x(), point.y(), point.z() );
+  logical ACIS_primary_side = CUBIT_TRUE;
+  if (!primary_side) ACIS_primary_side = CUBIT_FALSE;
 
-     // Make sure the distance of the sweep is not zero
-   if (angle == 0.0)
-   {
+  // Make sure the distance of the sweep is not zero
+  if (angle == 0.0)
+    {
       PRINT_ERROR("The angle of the sweep must be > 0.0. Nothing done.\n");
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Make sure the draft angle is reasonable
-   if (draft_angle >= CUBIT_PI/2.0 || draft_angle <= -(CUBIT_PI/2.0))
-   {
+  // Make sure the draft angle is reasonable
+  if (draft_angle >= CUBIT_PI/2.0 || draft_angle <= -(CUBIT_PI/2.0))
+    {
       PRINT_ERROR("Draft angle cannot be greater than %e radians\n",
                   CUBIT_PI/2.0);
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Make sure the draft type is either 0 or 1 (this is an ACISism, of course!)
-   if ( !(draft_type == 0 || draft_type == 1) )
-   {
+  // Make sure the draft type is either 0 or 1 (this is an ACISism, of course!)
+  if ( !(draft_type == 0 || draft_type == 1) )
+    {
       PRINT_ERROR("Draft type must be either 0 or 1\n");
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Make sure we have a reasonable number of steps
-   if (steps < 0)
-   {
+  // Make sure we have a reasonable number of steps
+  if (steps < 0)
+    {
       PRINT_WARNING("Number of steps must be a positive number.\n"
                     "         It is set to 0 and the sweep operation will proceed.\n");
       steps = 0;
-   }
+    }
 
-     // Turn off the merge option in ACIS so FACEs used to sweep won't be
-     // "simplified" in their topology (i.e., 5-sided squared faces won't
-     // be reduced to 4-sided square faces) -- in other words, turn on
-     // non-regularized booleans
-   outcome result = api_set_int_option ( "merge",
-                                         CUBIT_FALSE );
-   if (!result.ok())
-   {
+  // Turn off the merge option in ACIS so FACEs used to sweep won't be
+  // "simplified" in their topology (i.e., 5-sided squared faces won't
+  // be reduced to 4-sided square faces) -- in other words, turn on
+  // non-regularized booleans
+  outcome result = api_set_int_option ( "merge",
+					CUBIT_FALSE );
+  if (!result.ok())
+    {
       PRINT_WARNING("In AcisModifyEngine::sweep_FACE_about_axis.\n"
                     "         Error in api_set_int_option.\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
 
-        // As the problem is not really serious, continue and make sure that
-        // the value of result is set to "OK" so no rollback occurs
+      // As the problem is not really serious, continue and make sure that
+      // the value of result is set to "OK" so no rollback occurs
       result = outcome(0);
-   }
+    }
 
-   sweep_options ACIS_sweep_options;
-   ACIS_sweep_options.set_draft_angle(draft_angle);
-   ACIS_sweep_options.set_gap_type(draft_type);
-   ACIS_sweep_options.set_which_side(ACIS_primary_side);
-   ACIS_sweep_options.set_steps(steps);
-   ACIS_sweep_options.set_sweep_angle(angle);
-   ACIS_sweep_options.set_rigid(rigid);
+  sweep_options ACIS_sweep_options;
+  ACIS_sweep_options.set_draft_angle(draft_angle);
+  ACIS_sweep_options.set_gap_type(draft_type);
+  ACIS_sweep_options.set_which_side(ACIS_primary_side);
+  ACIS_sweep_options.set_steps(steps);
+  ACIS_sweep_options.set_sweep_angle(angle);
+  ACIS_sweep_options.set_rigid(rigid);
 
-   FACE *FACE_to_sweep_to = NULL;
-   if( to_FACE )
-   {
-     //get face type
-     SURFACE *SURFACE_ptr = to_FACE->geometry();
-     int type = SURFACE_ptr->identity();
+  FACE *FACE_to_sweep_to = NULL;
+  if( to_FACE )//mutually exclusive with sweep_to_body
+    {
+      //get face type
+      SURFACE *SURFACE_ptr = to_FACE->geometry();
+      int type = SURFACE_ptr->identity();
 
-     //if face is planar...vector must not be parallel to surf normal
-     if (type == PLANE_TYPE)
-     {
-        FACE_to_sweep_to = make_FACE( to_FACE, true );
-     }
-     //vector must intersect surf
-     else
-     {
-        FACE_to_sweep_to = make_FACE( to_FACE );
-     }
+      //if face is planar...vector must not be parallel to surf normal
+      if (type == PLANE_TYPE)
+	{
+	  FACE_to_sweep_to = make_FACE( to_FACE, true );
+	}
+      //vector must intersect surf
+      else
+	{
+	  FACE_to_sweep_to = make_FACE( to_FACE );
+	}
 
-     SPAtransf trans = get_face_trans(FACE_to_sweep_to);
-     surface *eq_surf = FACE_to_sweep_to->geometry()->trans_surface(trans );
-     ACIS_sweep_options.set_to_face( eq_surf );
-   }
+      SPAtransf trans = get_face_trans(FACE_to_sweep_to);
+      surface *eq_surf = FACE_to_sweep_to->geometry()->trans_surface(trans );
+      ACIS_sweep_options.set_to_face( eq_surf );
+    }
 
-   BODY* face_body_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr);
-   BODY* BODYptr = NULL;
-   result = api_sweep_with_options(FACE_ptr,
+  else if(to_BODY)//mutually exclusive with to_face
+    {
+      ACIS_sweep_options.set_sweep_to_body(to_BODY);
+      //Creates one body out of the fixed body and the result of the sweep up 
+      //to the location of the intersection between the sweep and the fixed 
+      //body.
+      ACIS_sweep_options.set_bool_type(INTERSECT);
+    }
+  BODY* face_body_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr);
+  BODY* BODYptr = NULL;
+  result = api_sweep_with_options(FACE_ptr,
                                   ACIS_point, ACIS_axis_unit_vector,
                                   &ACIS_sweep_options, BODYptr);
 
-   if (BODYptr)
-   {
-     //when setting the sweep to end at a face, result is BODYptr.
-     if( to_FACE )
-     {
-       //swept body & to_FACE must intersect some
-       BODY *tmp_body = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACE_to_sweep_to );
-       if ( !BODYs_interfering( tmp_body, BODYptr ) )
-       {
-        PRINT_ERROR("Terminating surface must intersect swept tool volume.\n");
-        api_delent( tmp_body );
-        return CUBIT_FAILURE;
-       }
-       FACE_ptr = BODYptr->lump()->shell()->first_face();
-     }
-     else
-     {
-        PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
-        PRINT_ERROR("API wants to create a new volume \n");
-        api_delent( BODYptr );
-        sweep_status = CUBIT_FAILURE;
-     }
-   }
+  if (BODYptr)
+    {
+      //when setting the sweep to end at a face, result is BODYptr.
+      if( to_FACE || to_BODY)
+	{
+	  BODY *tmp_body = NULL;
+	  //swept body & to_FACE must intersect some
+	  if(to_FACE)
+	    tmp_body = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACE_to_sweep_to );
+	  else
+	    tmp_body = to_BODY;
 
-   if( FACE_to_sweep_to )
-     api_delent( FACE_to_sweep_to );
+	  if ( !BODYs_interfering( tmp_body, BODYptr ) )
+	    {
+	      PRINT_ERROR("Terminating surface must intersect swept tool volume.\n");
+	      if(to_FACE)
+		api_delent( tmp_body );
+	      return CUBIT_FAILURE;
+	    }
+	  FACE_ptr = BODYptr->lump()->shell()->first_face();
+	}
+      else
+	{
+	  PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
+	  PRINT_ERROR("API wants to create a new volume \n");
+	  api_delent( BODYptr );
+	  sweep_status = CUBIT_FAILURE;
+	}
+    }
 
-   if (!result.ok())
-   {
+  if( FACE_to_sweep_to )
+    api_delent( FACE_to_sweep_to );
+
+  if (!result.ok())
+    {
       PRINT_ERROR("Error during ACIS sweep operation, api_sw_face_axis\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
       sweep_status = CUBIT_FAILURE;
-   }
+    }
 
-     // Now set the option back to its default
-   result = api_set_int_option ( "merge",
-                                 CUBIT_TRUE );
-   if (!result.ok())
-   {
+  // Now set the option back to its default
+  result = api_set_int_option ( "merge",
+				CUBIT_TRUE );
+  if (!result.ok())
+    {
       PRINT_WARNING("In AcisModifyEngine::sweep_FACE_about_axis.\n"
                     "         Error in api_set_int_option.\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
 
-        // As the problem is not really serious, continue and make sure that
-        // the value of result is set to "OK" so no rollback occurs
+      // As the problem is not really serious, continue and make sure that
+      // the value of result is set to "OK" so no rollback occurs
       result = outcome(0);
-   }
+    }
 
-     // Finally, check to make sure that the volume of the swept BODY is positive.
-     // Note that ACIS allows the creation of swept solids that have
-     // negative volume (all the surface normals point inward -- i.e.,
-     // the swept solid is topologically identical to a void)
-   BODY *new_body = NULL;
-   if(BODYptr)
-   {
+  // Finally, check to make sure that the volume of the swept BODY is positive.
+  // Note that ACIS allows the creation of swept solids that have
+  // negative volume (all the surface normals point inward -- i.e.,
+  // the swept solid is topologically identical to a void)
+  BODY *new_body = NULL;
+  if(BODYptr)
+    {
       new_body = BODYptr;
-   }
-   else if(face_body_ptr)
-   {
+    }
+  else if(face_body_ptr)
+    {
       new_body = face_body_ptr;
-   }
+    }
 
-   if(new_body)
-   {
+  if(new_body)
+    {
       if ( AcisQueryEngine::instance()->volume(new_body) < 0.0)
-      {
-         sweep_status = CUBIT_FAILURE;
-         volume_is_negative = CUBIT_SUCCESS;
+	{
+	  sweep_status = CUBIT_FAILURE;
+	  volume_is_negative = CUBIT_SUCCESS;
 
-         // Set the value of result such that the API_END macro performs
-         // a bulletin board rollback operation to the corresponding API_BEGIN
-         //result = outcome(API_FAILURE);
-      }
-   }
+	  // Set the value of result such that the API_END macro performs
+	  // a bulletin board rollback operation to the corresponding API_BEGIN
+	  //result = outcome(API_FAILURE);
+	}
+    }
 
-   return sweep_status;
+  return sweep_status;
 }
 
 CubitStatus AcisModifyEngine::sweep_EDGE_about_axis(
-    EDGE* EDGE_ptr,
-    BODY *&BODYptr,
-    const CubitVector& axis_unit_vector,
-    const CubitVector& point,
-    double angle,
-    int steps,
-    double draft_angle,
-    int draft_type,
-    bool make_solid,
-    bool rigid,
-    FACE *to_FACE) const
+						    EDGE* EDGE_ptr,
+						    BODY *&BODYptr,
+						    const CubitVector& axis_unit_vector,
+						    const CubitVector& point,
+						    double angle,
+						    int steps,
+						    double draft_angle,
+						    int draft_type,
+						    bool make_solid,
+						    bool rigid,
+						    FACE *to_FACE,
+						    BODY *to_BODY) const
 {
-     // Sweep ho!!
-   CubitStatus sweep_status = CUBIT_SUCCESS;
+  // Sweep ho!!
+  CubitStatus sweep_status = CUBIT_SUCCESS;
 
-     // Convert the Cubit point and SPAvector into an ACIS point and SPAvector
-     // before calling the member function that calls the ACIS API
-     // function.
-   SPAunit_vector ACIS_axis_unit_vector(
-       axis_unit_vector.x(),
-       axis_unit_vector.y(),
-       axis_unit_vector.z() );
-   SPAposition ACIS_point( point.x(), point.y(),  point.z() );
-   if (angle == 0.0)
-   {
+  // Convert the Cubit point and SPAvector into an ACIS point and SPAvector
+  // before calling the member function that calls the ACIS API
+  // function.
+  SPAunit_vector ACIS_axis_unit_vector(
+				       axis_unit_vector.x(),
+				       axis_unit_vector.y(),
+				       axis_unit_vector.z() );
+  SPAposition ACIS_point( point.x(), point.y(),  point.z() );
+  if (angle == 0.0)
+    {
       PRINT_ERROR("The angle of the sweep must be > 0.0. Nothing done.\n");
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Make sure the draft angle is reasonable
-   if (draft_angle >= CUBIT_PI/2.0 || draft_angle <= -(CUBIT_PI/2.0))
-   {
+  // Make sure the draft angle is reasonable
+  if (draft_angle >= CUBIT_PI/2.0 || draft_angle <= -(CUBIT_PI/2.0))
+    {
       PRINT_ERROR("Draft angle cannot be greater than %e radians\n",
                   CUBIT_PI/2.0);
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Make sure the draft type is either 0 or 1 (this is an ACISism, of course!)
-   if ( !(draft_type == 0 || draft_type == 1) )
-   {
+  // Make sure the draft type is either 0 or 1 (this is an ACISism, of course!)
+  if ( !(draft_type == 0 || draft_type == 1) )
+    {
       PRINT_ERROR("Draft type must be either 0 or 1\n");
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Make sure we have a reasonable number of steps
-   if (steps < 0)
-   {
+  // Make sure we have a reasonable number of steps
+  if (steps < 0)
+    {
       PRINT_WARNING("Number of steps must be a positive number.\n"
                     "         It is set to 0 and the sweep operation will proceed.\n");
       steps = 0;
-   }
+    }
 
-     // Turn off the merge option in ACIS so FACEs used to sweep won't be
-     // "simplified" in their topology (i.e., 5-sided squared faces won't
-     // be reduced to 4-sided square faces) -- in other words, turn on
-     // non-regularized booleans
-   outcome result = api_set_int_option ( "merge",
-                                         CUBIT_FALSE );
-   if (!result.ok())
-   {
+  // Turn off the merge option in ACIS so FACEs used to sweep won't be
+  // "simplified" in their topology (i.e., 5-sided squared faces won't
+  // be reduced to 4-sided square faces) -- in other words, turn on
+  // non-regularized booleans
+  outcome result = api_set_int_option ( "merge",
+					CUBIT_FALSE );
+  if (!result.ok())
+    {
       PRINT_WARNING("In AcisModifyEngine::sweep_EDGE_about_axis.\n"
                     "         Error in api_set_int_option.\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
 
-        // As the problem is not really serious, continue and make sure that
-        // the value of result is set to "OK" so no rollback occurs
+      // As the problem is not really serious, continue and make sure that
+      // the value of result is set to "OK" so no rollback occurs
       result = outcome(0);
-   }
+    }
 
-   sweep_options ACIS_sweep_options;
-   ACIS_sweep_options.set_draft_angle(draft_angle);
-   ACIS_sweep_options.set_gap_type(draft_type);
-   ACIS_sweep_options.set_steps(steps);
-   ACIS_sweep_options.set_sweep_angle(angle);
-   ACIS_sweep_options.set_rigid(rigid);
-   EDGE *copied_EDGE_ptr = NULL;
-   result = api_edge( EDGE_ptr, copied_EDGE_ptr );
-   if( !result.ok() )
-   {
-     PRINT_ERROR( "Unable to copy edge\n");
-     return CUBIT_FAILURE;
-   }
-   ATTRIB_CUBIT_OWNER::remove_cubit_owner( (ENTITY *)copied_EDGE_ptr,
-                                           CUBIT_TRUE );
+  sweep_options ACIS_sweep_options;
+  ACIS_sweep_options.set_draft_angle(draft_angle);
+  ACIS_sweep_options.set_gap_type(draft_type);
+  ACIS_sweep_options.set_steps(steps);
+  ACIS_sweep_options.set_sweep_angle(angle);
+  ACIS_sweep_options.set_rigid(rigid);
+  EDGE *copied_EDGE_ptr = NULL;
+  result = api_edge( EDGE_ptr, copied_EDGE_ptr );
+  if( !result.ok() )
+    {
+      PRINT_ERROR( "Unable to copy edge\n");
+      return CUBIT_FAILURE;
+    }
+  ATTRIB_CUBIT_OWNER::remove_cubit_owner( (ENTITY *)copied_EDGE_ptr,
+					  CUBIT_TRUE );
 
-   FACE *FACE_to_sweep_to = NULL;
-   if( to_FACE )
-   {
-     //get face type
-     SURFACE *SURFACE_ptr = to_FACE->geometry();
-     int type = SURFACE_ptr->identity();
+  FACE *FACE_to_sweep_to = NULL;
+  if( to_FACE )//mutually exclusive with sweep_to_body
+    {
+      //get face type
+      SURFACE *SURFACE_ptr = to_FACE->geometry();
+      int type = SURFACE_ptr->identity();
 
-     //if face is planar...vector must not be parallel to surf normal
-     if (type == PLANE_TYPE)
-     {
-        FACE_to_sweep_to = make_FACE( to_FACE, true );
-     }
-     //vector must intersect surf
-     else
-     {
-        FACE_to_sweep_to = make_FACE( to_FACE );
-     }
+      //if face is planar...vector must not be parallel to surf normal
+      if (type == PLANE_TYPE)
+	{
+	  FACE_to_sweep_to = make_FACE( to_FACE, true );
+	}
+      //vector must intersect surf
+      else
+	{
+	  FACE_to_sweep_to = make_FACE( to_FACE );
+	}
 
-     SPAtransf trans = get_face_trans(FACE_to_sweep_to);
-     surface *eq_surf = FACE_to_sweep_to->geometry()->trans_surface(trans );
-     ACIS_sweep_options.set_to_face( eq_surf );
-   }
+      SPAtransf trans = get_face_trans(FACE_to_sweep_to);
+      surface *eq_surf = FACE_to_sweep_to->geometry()->trans_surface(trans );
+      ACIS_sweep_options.set_to_face( eq_surf );
+    }
+  else if(to_BODY)//utually exclusive with to_face
+    {
+      ACIS_sweep_options.set_sweep_to_body(to_BODY);
+      //Creates one body out of the fixed body and the result of the sweep up 
+      //to the location of the intersection between the sweep and the fixed 
+      //body.
+      ACIS_sweep_options.set_bool_type(INTERSECT);
+    }
 
-   if(make_solid)
-   {
-     ACIS_sweep_options.set_close_to_axis(TRUE);
-     EDGE* EDGES[1];
-     EDGES[0] = copied_EDGE_ptr;
-     BODY* EDGE_BODY_ptr = NULL;
+  if(make_solid)
+    {
+      ACIS_sweep_options.set_close_to_axis(TRUE);
+      EDGE* EDGES[1];
+      EDGES[0] = copied_EDGE_ptr;
+      BODY* EDGE_BODY_ptr = NULL;
 
-     result = api_make_ewire(1, EDGES, EDGE_BODY_ptr);
+      result = api_make_ewire(1, EDGES, EDGE_BODY_ptr);
 
-//     WIRE* WIRE_ptr = EDGE_BODY_ptr->lump()->shell()->wire();
-     result = api_sweep_with_options(EDGE_BODY_ptr,
-                                     ACIS_point, ACIS_axis_unit_vector,
-                                     &ACIS_sweep_options, BODYptr);
-     BODYptr = EDGE_BODY_ptr;
+      //     WIRE* WIRE_ptr = EDGE_BODY_ptr->lump()->shell()->wire();
+      result = api_sweep_with_options(EDGE_BODY_ptr,
+				      ACIS_point, ACIS_axis_unit_vector,
+				      &ACIS_sweep_options, BODYptr);
+      BODYptr = EDGE_BODY_ptr;
 
-   }
-   else {
-     result = api_sweep_with_options(copied_EDGE_ptr,
-                                     ACIS_point, ACIS_axis_unit_vector,
-                                     &ACIS_sweep_options, BODYptr);
-   }
+    }
+  else {
+    result = api_sweep_with_options(copied_EDGE_ptr,
+				    ACIS_point, ACIS_axis_unit_vector,
+				    &ACIS_sweep_options, BODYptr);
+  }
 
 
-   if (BODYptr)
-   {
-       sweep_status = CUBIT_SUCCESS;
-   }
-   if (!result.ok())
-   {
+  if (BODYptr)
+    {
+      sweep_status = CUBIT_SUCCESS;
+    }
+  if (!result.ok())
+    {
       PRINT_ERROR("Error during ACIS sweep operation, api_sweep_with_options\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
       if ( copied_EDGE_ptr != NULL )
         api_delent(copied_EDGE_ptr);
 
       sweep_status = CUBIT_FAILURE;
-   }
+    }
 
-   if( FACE_to_sweep_to )
-     api_delent( FACE_to_sweep_to );
+  if( FACE_to_sweep_to )
+    api_delent( FACE_to_sweep_to );
 
-     // Now set the option back to its default
-   result = api_set_int_option ( "merge",
-                                 CUBIT_TRUE );
-   if (!result.ok())
-   {
+  // Now set the option back to its default
+  result = api_set_int_option ( "merge",
+				CUBIT_TRUE );
+  if (!result.ok())
+    {
       PRINT_WARNING("In AcisModifyEngine::sweep_EDGE_about_axis.\n"
                     "         Error in api_set_int_option.\n");
       AcisQueryEngine::instance()->ACIS_API_error(result);
 
-        // As the problem is not really serious, continue and make sure that
-        // the value of result is set to "OK" so no rollback occurs
+      // As the problem is not really serious, continue and make sure that
+      // the value of result is set to "OK" so no rollback occurs
       result = outcome(0);
-   }
+    }
 
-     // Finally, check to make sure that the volume of the swept BODY is positive.
-     // Note that ACIS allows the creation of swept solids that have
-     // negative volume (all the surface normals point inward -- i.e.,
-     // the swept solid is topologically identical to a void)
+  // Finally, check to make sure that the volume of the swept BODY is positive.
+  // Note that ACIS allows the creation of swept solids that have
+  // negative volume (all the surface normals point inward -- i.e.,
+  // the swept solid is topologically identical to a void)
 
-   return sweep_status;
+  return sweep_status;
 }
 
 //-------------------------------------------------------------------------
@@ -3964,168 +3378,168 @@
                                                 const CubitVector& V3,
                                                 const CubitVector& V4 ) const
 {
-   GeometryQueryTool* GT_ptr = GeometryQueryTool::instance();
-   BODY* Body1 = NULL;
+  GeometryQueryTool* GT_ptr = GeometryQueryTool::instance();
+  BODY* Body1 = NULL;
 
-     // Debug info
-   PRINT_DEBUG_18(
-               "Debug output from AcisModifyEngine::make_planar_quad_BODY\n");
+  // Debug info
+  PRINT_DEBUG_18(
+		 "Debug output from AcisModifyEngine::make_planar_quad_BODY\n");
 
-     // First make sure that none of the points have the same coordinates.
-   if ( (GT_ptr->about_spatially_equal(V1, V2,
-                                       GeometryQueryTool::get_geometry_factor())) ||
-        (GT_ptr->about_spatially_equal(V1, V3,
-                                       GeometryQueryTool::get_geometry_factor())) ||
-        (GT_ptr->about_spatially_equal(V1, V4,
-                                       GeometryQueryTool::get_geometry_factor())) ||
-        (GT_ptr->about_spatially_equal(V2, V3,
-                                       GeometryQueryTool::get_geometry_factor())) ||
-        (GT_ptr->about_spatially_equal(V2, V4,
-                                       GeometryQueryTool::get_geometry_factor())) ||
-        (GT_ptr->about_spatially_equal(V3, V4,
-                                       GeometryQueryTool::get_geometry_factor())) )
-   {
+  // First make sure that none of the points have the same coordinates.
+  if ( (GT_ptr->about_spatially_equal(V1, V2,
+				      GeometryQueryTool::get_geometry_factor())) ||
+       (GT_ptr->about_spatially_equal(V1, V3,
+				      GeometryQueryTool::get_geometry_factor())) ||
+       (GT_ptr->about_spatially_equal(V1, V4,
+				      GeometryQueryTool::get_geometry_factor())) ||
+       (GT_ptr->about_spatially_equal(V2, V3,
+				      GeometryQueryTool::get_geometry_factor())) ||
+       (GT_ptr->about_spatially_equal(V2, V4,
+				      GeometryQueryTool::get_geometry_factor())) ||
+       (GT_ptr->about_spatially_equal(V3, V4,
+				      GeometryQueryTool::get_geometry_factor())) )
+    {
       PRINT_ERROR("In AcisModifyEngine::make_planar_quad_BODY.\n"
                   "       Some of the input points are spatially equivalent.\n"
                   "       Cannot create a planar quadrilateral ACIS BODY.\n");
       return NULL;
-   }
+    }
 
-     // Make sure that the 4 input points are coplanar.
-     // If the 4 points are coplanar, then the scalar triple product
-     // of the 3 vectors joining points 1 and 2, 2 and 3, and 3 and 4, will
-     // equal zero.
-     //     For 4 coplanar points, Vector12 . (Vector23 * Vector34) = 0
+  // Make sure that the 4 input points are coplanar.
+  // If the 4 points are coplanar, then the scalar triple product
+  // of the 3 vectors joining points 1 and 2, 2 and 3, and 3 and 4, will
+  // equal zero.
+  //     For 4 coplanar points, Vector12 . (Vector23 * Vector34) = 0
 
-   CubitVector vector12 = V2 - V1;
-   CubitVector vector23 = V3 - V2;
-   CubitVector vector34 = V4 - V3;
+  CubitVector vector12 = V2 - V1;
+  CubitVector vector23 = V3 - V2;
+  CubitVector vector34 = V4 - V3;
 
-     // normalize the vectors
-   vector12.normalize();
-   vector23.normalize();
-   vector34.normalize();
+  // normalize the vectors
+  vector12.normalize();
+  vector23.normalize();
+  vector34.normalize();
 
-   double tripleProd = vector12 % (vector23 * vector34);
+  double tripleProd = vector12 % (vector23 * vector34);
 
-     // MJP Note:
-     // The following tests to make sure that tripleProd is "0.0". But this
-     // cannot be tested exactly, so we have to approximate the notion of zero.
-     // I have run into a case where a not-so-large (size about 2000 units)
-     // set of 4 points results in a tripleProd value of approximately
-     // -3.5E-6 whose fabs is 3.5E-6 which is larger than SPAresabs (1E-6).
-     // I have put in an arbitrary factor of 100 here!!!!!!! This raises
-     // our notion of "zero" from 1E-6 to 1E-4......:-)
-   if (fabs(tripleProd) > 100.0 * GEOMETRY_RESABS)
-   {
+  // MJP Note:
+  // The following tests to make sure that tripleProd is "0.0". But this
+  // cannot be tested exactly, so we have to approximate the notion of zero.
+  // I have run into a case where a not-so-large (size about 2000 units)
+  // set of 4 points results in a tripleProd value of approximately
+  // -3.5E-6 whose fabs is 3.5E-6 which is larger than SPAresabs (1E-6).
+  // I have put in an arbitrary factor of 100 here!!!!!!! This raises
+  // our notion of "zero" from 1E-6 to 1E-4......:-)
+  if (fabs(tripleProd) > 100.0 * GEOMETRY_RESABS)
+    {
       PRINT_ERROR("In AcisModifyEngine::make_planar_quad_BODY.\n"
                   "       The 4 input points are not coplanar.\n"
                   "       Cannot create a planar quadrilateral ACIS BODY.\n");
       return NULL;
-   }
+    }
 
-     // Initialize the bulletin board (this is done so that if there is an
-     // error while building this body, ACIS will automatically roll its
-     // state back to what it was before this next statement was executed.
-   int success = CUBIT_TRUE;
-   API_BEGIN;
+  // Initialize the bulletin board (this is done so that if there is an
+  // error while building this body, ACIS will automatically roll its
+  // state back to what it was before this next statement was executed.
+  int success = CUBIT_TRUE;
+  API_BEGIN;
 
-         // Create an ACIS Body using the direct interface (it's tons of fun :-)
+  // Create an ACIS Body using the direct interface (it's tons of fun :-)
 
-         // Create ACIS points
-   APOINT* P1 = new APOINT (V1.x(), V1.y(), V1.z());
-   APOINT* P2 = new APOINT (V2.x(), V2.y(), V2.z());
-   APOINT* P3 = new APOINT (V3.x(), V3.y(), V3.z());
-   APOINT* P4 = new APOINT (V4.x(), V4.y(), V4.z());
+  // Create ACIS points
+  APOINT* P1 = new APOINT (V1.x(), V1.y(), V1.z());
+  APOINT* P2 = new APOINT (V2.x(), V2.y(), V2.z());
+  APOINT* P3 = new APOINT (V3.x(), V3.y(), V3.z());
+  APOINT* P4 = new APOINT (V4.x(), V4.y(), V4.z());
 
-     // Create ACIS straight lines between the 4 input points
-   STRAIGHT* S1 = new STRAIGHT(      P1->coords(),
-                                     normalise(P2->coords() - P1->coords()) );
-   STRAIGHT* S2 = new STRAIGHT(      P2->coords(),
-                                     normalise(P3->coords() - P2->coords()) );
-   STRAIGHT* S3 = new STRAIGHT(      P3->coords(),
-                                     normalise(P4->coords() - P3->coords()) );
-   STRAIGHT* S4 = new STRAIGHT(      P4->coords(),
-                                     normalise(P1->coords() - P4->coords()) );
+  // Create ACIS straight lines between the 4 input points
+  STRAIGHT* S1 = new STRAIGHT(      P1->coords(),
+				    normalise(P2->coords() - P1->coords()) );
+  STRAIGHT* S2 = new STRAIGHT(      P2->coords(),
+				    normalise(P3->coords() - P2->coords()) );
+  STRAIGHT* S3 = new STRAIGHT(      P3->coords(),
+				    normalise(P4->coords() - P3->coords()) );
+  STRAIGHT* S4 = new STRAIGHT(      P4->coords(),
+				    normalise(P1->coords() - P4->coords()) );
 
-     // Compute the unit SPAvector of the plane containing the 4 points
-   CubitVector planeNormal;
-   planeNormal = (vector12 * vector23);
-   planeNormal.normalize();
+  // Compute the unit SPAvector of the plane containing the 4 points
+  CubitVector planeNormal;
+  planeNormal = (vector12 * vector23);
+  planeNormal.normalize();
 
-     // Create an ACIS surface
-   PLANE* Plane1 = new PLANE( P1->coords(),
-                              SPAunit_vector(planeNormal.x(),
-                                          planeNormal.y(),
-                                          planeNormal.z() ) );
+  // Create an ACIS surface
+  PLANE* Plane1 = new PLANE( P1->coords(),
+			     SPAunit_vector(planeNormal.x(),
+					    planeNormal.y(),
+					    planeNormal.z() ) );
 
-     // Create ACIS vertices
-   VERTEX* Vertex1 = new VERTEX (P1);
-   VERTEX* Vertex2 = new VERTEX (P2);
-   VERTEX* Vertex3 = new VERTEX (P3);
-   VERTEX* Vertex4 = new VERTEX (P4);
+  // Create ACIS vertices
+  VERTEX* Vertex1 = new VERTEX (P1);
+  VERTEX* Vertex2 = new VERTEX (P2);
+  VERTEX* Vertex3 = new VERTEX (P3);
+  VERTEX* Vertex4 = new VERTEX (P4);
 
-     // Create ACIS edges
-   EDGE* Edge1 = new EDGE (Vertex1, Vertex2, S1, FORWARD);
-   EDGE* Edge2 = new EDGE (Vertex2, Vertex3, S2, FORWARD);
-   EDGE* Edge3 = new EDGE (Vertex3, Vertex4, S3, FORWARD);
-   EDGE* Edge4 = new EDGE (Vertex4, Vertex1, S4, FORWARD);
+  // Create ACIS edges
+  EDGE* Edge1 = new EDGE (Vertex1, Vertex2, S1, FORWARD);
+  EDGE* Edge2 = new EDGE (Vertex2, Vertex3, S2, FORWARD);
+  EDGE* Edge3 = new EDGE (Vertex3, Vertex4, S3, FORWARD);
+  EDGE* Edge4 = new EDGE (Vertex4, Vertex1, S4, FORWARD);
 
-     // Create an ACIS loop of coedges
-   COEDGE* Coedge1 = new COEDGE (Edge1, FORWARD, NULL, NULL);
-   COEDGE* Coedge2 = new COEDGE (Edge2, FORWARD, Coedge1, NULL);
-   COEDGE* Coedge3 = new COEDGE (Edge3, FORWARD, Coedge2, NULL);
- /*COEDGE* Coedge4 =*/ new COEDGE (Edge4, FORWARD, Coedge3, Coedge1);
-   LOOP* Loop1 = new LOOP (Coedge1, NULL);
+  // Create an ACIS loop of coedges
+  COEDGE* Coedge1 = new COEDGE (Edge1, FORWARD, NULL, NULL);
+  COEDGE* Coedge2 = new COEDGE (Edge2, FORWARD, Coedge1, NULL);
+  COEDGE* Coedge3 = new COEDGE (Edge3, FORWARD, Coedge2, NULL);
+  /*COEDGE* Coedge4 =*/ new COEDGE (Edge4, FORWARD, Coedge3, Coedge1);
+  LOOP* Loop1 = new LOOP (Coedge1, NULL);
 
-     // Create an ACIS face
-   FACE* Face1 = new FACE (Loop1, NULL, Plane1, FORWARD);
+  // Create an ACIS face
+  FACE* Face1 = new FACE (Loop1, NULL, Plane1, FORWARD);
 
-     // Create an ACIS shell
-   SHELL* Shell1 = new SHELL (Face1, NULL, NULL);
+  // Create an ACIS shell
+  SHELL* Shell1 = new SHELL (Face1, NULL, NULL);
 
-     // Create an ACIS lump
-   LUMP* Lump1 = new LUMP (Shell1, NULL);
+  // Create an ACIS lump
+  LUMP* Lump1 = new LUMP (Shell1, NULL);
 
-     // Create the ACIS body
-   Body1 = new BODY (Lump1);
+  // Create the ACIS body
+  Body1 = new BODY (Lump1);
 
-     // Make sure all's well with this BODY and then 2D-it!
-   if (Body1 != NULL)
-   {
-        // Finally, make sure this BODY consists of a DOUBLE-SIDED,
-        // BOTH_OUTSIDE FACE
+  // Make sure all's well with this BODY and then 2D-it!
+  if (Body1 != NULL)
+    {
+      // Finally, make sure this BODY consists of a DOUBLE-SIDED,
+      // BOTH_OUTSIDE FACE
       result = api_body_to_2d(Body1);
       if (!result.ok())
-      {
-         PRINT_ERROR("In AcisModifyEngine::make_planar_quad_BODY.\n"
-                     "  Unable to convert FACE to a 2D BODY using api_body_to2d.\n");
-         success = CUBIT_FALSE;
-      }
-   }
+	{
+	  PRINT_ERROR("In AcisModifyEngine::make_planar_quad_BODY.\n"
+		      "  Unable to convert FACE to a 2D BODY using api_body_to2d.\n");
+	  success = CUBIT_FALSE;
+	}
+    }
 
-     // Scream bloody murder....only if necessary, of course :-)
-   if (Body1 == NULL)
-   {
+  // Scream bloody murder....only if necessary, of course :-)
+  if (Body1 == NULL)
+    {
       PRINT_ERROR("In AcisModifyEngine::make_planar_quad_BODY.\n"
                   "       Problem creating a Planar Quadrilateral ACIS BODY.\n");
       success = CUBIT_FALSE;
-   }
+    }
 
-     // Terminate the bulletin board
-   API_END;
+  // Terminate the bulletin board
+  API_END;
 
-   if (success)
-   {
-       // Debug info
-     PRINT_DEBUG_18("  Successfully created a planar quadrilateral ACIS BODY.\n");
-     return Body1;
-   }
+  if (success)
+    {
+      // Debug info
+      PRINT_DEBUG_18("  Successfully created a planar quadrilateral ACIS BODY.\n");
+      return Body1;
+    }
 
-   else
-   {
-     return NULL;
-   }
+  else
+    {
+      return NULL;
+    }
 }
 
 //-------------------------------------------------------------------------
@@ -4143,55 +3557,55 @@
                                    const CubitVector axes[3],
                                    const CubitVector &extension ) const
 {
-   BODY* BODY_ptr = NULL;
+  BODY* BODY_ptr = NULL;
 
-   double width = 2.0*extension.x();
-   double depth = 2.0*extension.y();
-   double height = 2.0*extension.z();
+  double width = 2.0*extension.x();
+  double depth = 2.0*extension.y();
+  double height = 2.0*extension.z();
 
-     // Create a BODY that represents the cuboid
-   outcome result = api_make_cuboid ( width, depth, height, BODY_ptr );
-   if (!result.ok())
-   {
+  // Create a BODY that represents the cuboid
+  outcome result = api_make_cuboid ( width, depth, height, BODY_ptr );
+  if (!result.ok())
+    {
       PRINT_ERROR("In AcisGeometryEngine::make_brick_BODY, Line# %d\n"
                   "     Problems creating a brick\n", __LINE__);
       return NULL ;
-   }
+    }
 
-   // Transform the brick into SPAposition
+  // Transform the brick into SPAposition
 
-   SPAposition brick_center( center.x(), center.y(), center.z() );
-   SPAunit_vector x_axis_this( axes[0].x(), axes[0].y(), axes[0].z() );
-   SPAunit_vector y_axis_this( axes[1].x(), axes[1].y(), axes[1].z() );
+  SPAposition brick_center( center.x(), center.y(), center.z() );
+  SPAunit_vector x_axis_this( axes[0].x(), axes[0].y(), axes[0].z() );
+  SPAunit_vector y_axis_this( axes[1].x(), axes[1].y(), axes[1].z() );
 
-   SPAtransf transformation = coordinate_transf( brick_center, x_axis_this, y_axis_this );
+  SPAtransf transformation = coordinate_transf( brick_center, x_axis_this, y_axis_this );
 
-   // Concatenate the input transformation to the existing one
-   result = api_apply_transf ( BODY_ptr, transformation );
-   if (!result.ok())
-   {
+  // Concatenate the input transformation to the existing one
+  result = api_apply_transf ( BODY_ptr, transformation );
+  if (!result.ok())
+    {
       AcisQueryEngine::instance()->ACIS_API_error ( result );
       PRINT_ERROR("In AcisGeometryEngine::make_brick_BODY, Line# %d\n"
                   "     Problems creating a brick\n", __LINE__);
       return NULL;
-   }
-   TRANSFORM* identity = new TRANSFORM(scale_transf(1.0));
-   result = api_change_body_trans ( BODY_ptr, identity, FALSE );
-   identity->lose();
-   if (!result.ok())
-   {
+    }
+  TRANSFORM* identity = new TRANSFORM(scale_transf(1.0));
+  result = api_change_body_trans ( BODY_ptr, identity, FALSE );
+  identity->lose();
+  if (!result.ok())
+    {
       AcisQueryEngine::instance()->ACIS_API_error ( result );
       PRINT_ERROR("In AcisGeometryEngine::make_brick_BODY, Line# %d\n"
                   "     Problems creating a brick\n", __LINE__);
       return NULL;
 
-   }
-     //The bounding SPAbox does not get re-computed, so we need
-     //to do it.
-   AcisQueryEngine::instance()->clear_bounding_box( BODY_ptr );
-   AcisQueryEngine::instance()->bounding_box( BODY_ptr );
+    }
+  //The bounding SPAbox does not get re-computed, so we need
+  //to do it.
+  AcisQueryEngine::instance()->clear_bounding_box( BODY_ptr );
+  AcisQueryEngine::instance()->bounding_box( BODY_ptr );
 
-   return BODY_ptr;
+  return BODY_ptr;
 }
 
 //-------------------------------------------------------------------------
@@ -4209,220 +3623,270 @@
 CubitStatus AcisModifyEngine::webcut_BODY( BODY* bodyPtr,
                                            BODY* CuttingToolPtr,
                                            BODY*& webcutBody1,
-                                           BODY*& webcutBody2) const
+                                           BODY*& webcutBody2,
+					   CubitBoolean cutting_with_sheet) const
 {
-     // Algorithm for webcut of the ACIS BODY, bodyPtr, using the solid
-     // ACIS BODY, CuttingToolPtr, as the Cutting Tool:
-     // 1) Save 2 copies of bodyPtr as body1Save and body2Save
-     // 2) Save 2 copies of CuttingToolPtr as CuttingToolSave1 and CuttingToolSave2
-     // 3) Subtract CuttingToolSave1 from bodySave1 => returns Body2
-     // 4) Intersect CuttingToolSave2 with bodySave2 => returns Body3
-     // 5) Clean up and return Body2 and Body3
-     //
+  // Algorithm for webcut of the ACIS BODY, bodyPtr, using the solid
+  // ACIS BODY, CuttingToolPtr, as the Cutting Tool:
+  // 1) Save 2 copies of bodyPtr as body1Save and body2Save
+  // 2) Save 2 copies of CuttingToolPtr as CuttingToolSave1 and CuttingToolSave2
+  // 3) Subtract CuttingToolSave1 from bodySave1 => returns Body2
+  // 4) Intersect CuttingToolSave2 with bodySave2 => returns Body3
+  // 5) Clean up and return Body2 and Body3
+  //
 
-     // MJP Note:
-     // By the end of this procedure, whether the operation is successful or not,
-     // BODYs pointed to by CuttingToolPtr and bodyPtr are returned intact.
+  // MJP Note:
+  // By the end of this procedure, whether the operation is successful or not,
+  // BODYs pointed to by CuttingToolPtr and bodyPtr are returned intact.
 
-     // MJP Note:
-     // The final 2 ACIS BODYs are *not* combined into a single BODY with
-     // multiple LUMPs as Acis does not consider a BODY with multiple LUMPs some
-     // of whose FACEs overlap in space, a valid BODY. LUMPs of a BODY need
-     // to be disjoint.
+  // MJP Note:
+  // The final 2 ACIS BODYs are *not* combined into a single BODY with
+  // multiple LUMPs as Acis does not consider a BODY with multiple LUMPs some
+  // of whose FACEs overlap in space, a valid BODY. LUMPs of a BODY need
+  // to be disjoint.
 
-   int webcut_debug_flag = 18;
-   int webcut_debug_flag_on = DEBUG_FLAG(webcut_debug_flag);
+  int webcut_debug_flag = 18;
+  int webcut_debug_flag_on = DEBUG_FLAG(webcut_debug_flag);
 
-     // Debug info
-   if (webcut_debug_flag_on)
-   {
+  // Debug info
+  if (webcut_debug_flag_on)
+    {
       PRINT_DEBUG_18("\n...Performing the webcut operation on the Acis BODY\n");
-   }
+    }
 
-     // Set the output webcut BODY pointers to NULL
-   webcutBody1 = NULL;
-   webcutBody2 = NULL;
+  // Set the output webcut BODY pointers to NULL
+  webcutBody1 = NULL;
+  webcutBody2 = NULL;
 
-     // Make sure that none of the input BODY pointers are NULL.
-     // Note: webcutBody1 and webcutBody2 are "empty" Acis BODYs that were
-     //       created by the calling procedure and will probably be set to
-     //       NULL
-   if (bodyPtr == NULL)
-   {
+  // Make sure that none of the input BODY pointers are NULL.
+  // Note: webcutBody1 and webcutBody2 are "empty" Acis BODYs that were
+  //       created by the calling procedure and will probably be set to
+  //       NULL
+  if (bodyPtr == NULL)
+    {
       PRINT_ERROR("The pointer to the input volume to be webcut is NULL.\n");
       return CUBIT_FAILURE;
-   }
-   if (CuttingToolPtr == NULL)
-   {
+    }
+  if (CuttingToolPtr == NULL)
+    {
       PRINT_ERROR("The pointer to the input CuttingTool volume is NULL.\n");
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Save the BODY being cut, if debug is on
-   if (webcut_debug_flag_on)
-   {
+  //don't try to webcut a body with itself
+  if( bodyPtr == CuttingToolPtr )
+    {  
+      return CUBIT_FAILURE;
+    } 
+       
+  //first test to see if these intersect.  If they don't
+  //then continueing on will not show the error and duplicate
+  //bodies will be created.
+  if ( !BODYs_interfering( bodyPtr, CuttingToolPtr ) )
+    {
+      PRINT_WARNING("Cutting Tool does not intersect the original volume.\n"
+		    "         The original volume is restored.\n" );
+      return CUBIT_FAILURE;
+    }
+
+  // Save the BODY being cut, if debug is on
+  if (webcut_debug_flag_on)
+    {
       AcisQueryEngine::instance()->save_ENTITY_as_sat_file(bodyPtr, "OrigBody.sat", "w");
-   }
+    }
 
-     // Make a copy of the body to be decomposed as well as the
-     // CuttingTool.
-   BODY* body1Save = NULL;
-   BODY* body2Save = NULL;
-   BODY* CuttingToolSave = NULL;
-   BODY* CuttingToolSave2 = NULL;
+  // Make a copy of the body to be decomposed as well as the
+  // CuttingTool.
+  BODY* body1Save = NULL;
+  BODY* body2Save = NULL;
+  BODY* CuttingToolSave = NULL;
+  BODY* CuttingToolSave2 = NULL;
 
-   CubitBoolean copy_attribs = GeometryModifyTool::instance()->get_new_ids();
-   CubitBoolean delete_owners = CUBIT_TRUE;
-   if (copy_attribs == CUBIT_TRUE) delete_owners = CUBIT_FALSE;
+  CubitBoolean copy_attribs = GeometryModifyTool::instance()->get_new_ids();
+  CubitBoolean delete_owners = CUBIT_TRUE;
+  if (copy_attribs == CUBIT_TRUE) delete_owners = CUBIT_FALSE;
 
-   body1Save = this->copy_BODY(bodyPtr, copy_attribs);
-   if ( body1Save == NULL )
-   {
-        // If the original ACIS BODY was destroyed, then make sure that the
-        // associated Body is deactivated and removed.
+  body1Save = this->copy_BODY(bodyPtr, copy_attribs);
+  
+  if ( body1Save == NULL )
+    {
+      // If the original ACIS BODY was destroyed, then make sure that the
+      // associated Body is deactivated and removed.
       if (bodyPtr == NULL)
-      {
-         PRINT_ERROR("During the webcut operation, the original\n"
-                     "         ACIS volume was destroyed.\n"
-                     "      ...Deleting the original volume...\n");
-      }
+	{
+	  PRINT_ERROR("During the webcut operation, the original\n"
+		      "         ACIS volume was destroyed.\n"
+		      "      ...Deleting the original volume...\n");
+	}
       return CUBIT_FAILURE;
-   }
+    }
 
-   CuttingToolSave = this->copy_BODY(CuttingToolPtr);
-   if ( CuttingToolSave == NULL )
-   {
+  CuttingToolSave = this->copy_BODY(CuttingToolPtr);
+
+  if(cutting_with_sheet && CuttingToolSave)
+    {
+      //set all faces to one sided
+      API_BEGIN;
+      sg_body_to_1d( CuttingToolSave );
+      API_END;
+    }
+
+  CuttingToolSave2 = this->copy_BODY(CuttingToolSave);
+
+  if ( CuttingToolSave == NULL || CuttingToolSave2 == NULL)
+    {
       AcisQueryEngine::instance()->delete_ACIS_BODY(body1Save, delete_owners);
+      if (CuttingToolSave != NULL)
+        AcisQueryEngine::instance()->delete_ACIS_BODY(CuttingToolSave, CUBIT_TRUE);
+
+      if(CuttingToolSave2 != NULL)
+        AcisQueryEngine::instance()->delete_ACIS_BODY(CuttingToolSave2, CUBIT_TRUE);
       return CUBIT_FAILURE;
-   }
+    }
 
-     // Subtract CuttingToolSave from body1Save
-     // NOTE: in the api_subtract, the resulting body is put into the
-     //       body being subtracted from.
-   outcome result = api_subtract(CuttingToolSave, body1Save);
-   if ( !result.ok() )
-   {
+  if(cutting_with_sheet)
+    {
+      outcome rc_3 = api_reverse_body(  CuttingToolSave2 );
+      if ( !rc_3.ok() ||  CuttingToolSave2 == NULL )
+	{
+	  PRINT_ERROR("Error in webcutting volume with sheet.\n");
+	  if (body1Save != NULL)
+	    AcisQueryEngine::instance()->
+	      delete_ACIS_BODY(body1Save, delete_owners);
+
+	  AcisQueryEngine::instance()->
+	    delete_ACIS_BODY(CuttingToolSave, CUBIT_TRUE);
+
+          if( CuttingToolSave2 != NULL )
+	    AcisQueryEngine::instance()->
+	      delete_ACIS_BODY(CuttingToolSave2, delete_owners);
+
+	  return CUBIT_FAILURE;
+	}
+    }
+
+  // Subtract CuttingToolSave from body1Save
+  // NOTE: in the api_subtract, the resulting body is put into the
+  //       body being subtracted from.
+  outcome result = api_subtract(CuttingToolSave, body1Save);
+  if ( !result.ok() ||( body1Save&&
+			!BodyACIS::is_sheet_body( body1Save ) &&
+			!is_closed_solid_body( body1Save ) ))
+    {
       AcisQueryEngine::instance()->ACIS_API_error(result);
-      if (CuttingToolSave != NULL)
-          AcisQueryEngine::instance()->delete_ACIS_BODY(CuttingToolSave, CUBIT_TRUE);
+      
+
       if (body1Save != NULL)
-          AcisQueryEngine::instance()->delete_ACIS_BODY(body1Save, delete_owners);
+	AcisQueryEngine::instance()->delete_ACIS_BODY(body1Save, delete_owners);
+      
+      AcisQueryEngine::instance()->delete_ACIS_BODY(CuttingToolSave2, CUBIT_TRUE);
       return CUBIT_FAILURE;
-   }
+    }
 
-     // As the subtract operation was successful, the blank has already been deleted.
-     // So set the pointer to NULL so we don't try to delete it again.
-   CuttingToolSave = NULL;
+  // As the subtract operation was successful, the blank has already 
+  // been deleted.
+  // So set the pointer to NULL so we don't try to delete it again.
+  CuttingToolSave = NULL;
 
-     // Before proceeding any further, make sure that result of the
-     // subtraction is not a NULL BODY or a BODY that has no LUMPs.
-   if ( (body1Save == NULL) || (body1Save->lump() == NULL) )
-   {
+  // Before proceeding any further, make sure that result of the
+  // subtraction is not a NULL BODY or a BODY that has no LUMPs.
+  if ( (body1Save == NULL) || (body1Save->lump() == NULL) )
+    {
       if (body1Save != NULL)
-          AcisQueryEngine::instance()->delete_ACIS_BODY(body1Save, delete_owners);
+	AcisQueryEngine::instance()->delete_ACIS_BODY(body1Save, delete_owners);
+      
       PRINT_INFO("INFO: Cutting Tool overlaps the original volume,\n"
                  "      Or cutting plane does not pass through volume.\n"
                  "         The original volume is unaffected.\n" );
       return CUBIT_FAILURE;
-   }
+    }
+ 
+  //make copy of the the bodyPtr for a second cut.   
+  body2Save = this->copy_BODY(bodyPtr, copy_attribs);
 
-     // Make another copy of the original body.
-     // NOTE: I want to preserve the original body in case something
-     //       goes haywire before we're done :-)
-   body2Save = this->copy_BODY(bodyPtr, copy_attribs);
-   if ( body2Save == NULL )
-   {
-      if (body1Save != NULL)
-          AcisQueryEngine::instance()->delete_ACIS_BODY(body1Save, delete_owners);
+  if ( body2Save == NULL )
+    {
+      // If the original ACIS BODY was destroyed, then make sure that the
+      // associated Body is deactivated and removed.
       if (bodyPtr == NULL)
-      {
-         PRINT_ERROR("During the webcut operation, the original\n"
-                     "         volume was destroyed.\n"
-                     "      ...Deleting the original volume...\n");
-      }
+        {
+          PRINT_ERROR("During the webcut operation, the original\n"
+                      "         ACIS volume was destroyed.\n"
+                      "      ...Deleting the original volume...\n");
+        }
       return CUBIT_FAILURE;
-   }
+    }
+  
+  // Now intersect CuttingToolSave2 with body2Save
+  // Note: If the outcome is successful, the result is the second BODY
+  //       and the first BODY is deleted.
+  // Debug output
+  if (webcut_debug_flag_on)
+    {
+      //Save the result of the subtract operation
+      AcisQueryEngine::instance()->save_ENTITY_as_sat_file(CuttingToolPtr, 
+							   "Subtract.sat", "w");
 
-     // Make another copy of the CuttingTool body
-   CuttingToolSave2 = this->copy_BODY(CuttingToolPtr);
-   if ( CuttingToolSave2 == NULL )
-   {
-      if (body1Save != NULL)
-          AcisQueryEngine::instance()->delete_ACIS_BODY(body1Save, delete_owners);
-      if (body2Save != NULL)
-          AcisQueryEngine::instance()->delete_ACIS_BODY(body2Save, delete_owners);
-      if (bodyPtr == NULL)
-      {
-         PRINT_ERROR("During the webcut operation, the original\n"
-                     "         volume was destroyed.\n"
-                     "      ...Deleting the original volume...\n");
-      }
+      //Save the result of the intersect operation
+      AcisQueryEngine::instance()->save_ENTITY_as_sat_file(bodyPtr, 
+							   "Intersect.sat", "w");
+    }
 
-      return CUBIT_FAILURE;
-   }
+  if (cutting_with_sheet)
+    result = api_subtract(CuttingToolSave2, body2Save);
 
-     // Now intersect CuttingToolSave2 with body2Save
-     // Note: If the outcome is successful, the result is the second BODY
-     //       and the first BODY is deleted.
-     // Debug output
-   if (webcut_debug_flag_on)
-   {
-        //Save the result of the subtract operation
-      AcisQueryEngine::instance()->save_ENTITY_as_sat_file(CuttingToolPtr, "Subtract.sat", "w");
-
-        //Save the result of the intersect operation
-      AcisQueryEngine::instance()->save_ENTITY_as_sat_file(bodyPtr, "Intersect.sat", "w");
-   }
-   result = api_intersect(CuttingToolSave2, body2Save);
-   if ( !result.ok() )
-   {
+  else
+    result = api_intersect(CuttingToolSave2, body2Save);
+  if ( !result.ok() || (body2Save &&
+			!BodyACIS::is_sheet_body( body2Save) &&
+			!is_closed_solid_body( body2Save) ) )
+    {
       AcisQueryEngine::instance()->ACIS_API_error(result);
-      if (CuttingToolSave2 != NULL)
-          AcisQueryEngine::instance()->delete_ACIS_BODY(CuttingToolSave2, CUBIT_TRUE);
+      
       if (body1Save != NULL)
-          AcisQueryEngine::instance()->delete_ACIS_BODY(body1Save, delete_owners);
+	AcisQueryEngine::instance()->delete_ACIS_BODY(body1Save, delete_owners);
       if (body2Save != NULL)
-          AcisQueryEngine::instance()->delete_ACIS_BODY(body2Save, delete_owners);
+	AcisQueryEngine::instance()->delete_ACIS_BODY(body2Save, delete_owners);
       return CUBIT_FAILURE;
-   }
+    }
 
-     // As the intersect operation was successful, the blank has already
-     // been deleted.
-     // So set the pointer to NULL so we don't try to delete it again.
-   CuttingToolSave2 = NULL;
+  // As the intersect operation was successful, the blank has already
+  // been deleted.
+  // So set the pointer to NULL so we don't try to delete it again.
+  CuttingToolSave2 = NULL;
 
-     // Debug output
-   if (webcut_debug_flag_on)
-   {
-        //Save the result of the subtract operation
+  // Debug output
+  if (webcut_debug_flag_on)
+    {
+      //Save the result of the subtract operation
       AcisQueryEngine::instance()->save_ENTITY_as_sat_file(body1Save, "Subtract.sat", "w");
 
-        //Save the result of the intersect operation
+      //Save the result of the intersect operation
       AcisQueryEngine::instance()->save_ENTITY_as_sat_file(body2Save, "Intersect.sat", "w");
-   }
+    }
 
-     // Check to make sure that the BODY resulting from the intersection
-     // operation is not NULL and it has at lease one valid LUMP. This
-     // would occur if there is no intersection between the 2 bodies
-     // being operated on.
-   if ( (body2Save == NULL) || (body2Save->lump() == NULL) )
-   {
+  // Check to make sure that the BODY resulting from the intersection
+  // operation is not NULL and it has at lease one valid LUMP. This
+  // would occur if there is no intersection between the 2 bodies
+  // being operated on.
+  if ( (body2Save == NULL) || (body2Save->lump() == NULL) )
+    {
       PRINT_WARNING("Cutting Tool does not intersect the original volume.\n"
                     "         The original volume is restored.\n" );
-
+      AcisQueryEngine::instance()->delete_ACIS_BODY(body1Save, delete_owners);
       AcisQueryEngine::instance()->delete_ACIS_BODY(body2Save, delete_owners);
       return CUBIT_FAILURE;
-   }
-     // Finally, set the BODY pointers, webcutBodyPtr1 and webcutBodyPtr2, to
-     // the resulting Acis BODYs (after the imprint operation)
-   webcutBody1 = body1Save;
-   webcutBody2 = body2Save;
-   AcisQueryEngine::instance()->clear_bounding_box( webcutBody1 );
-   AcisQueryEngine::instance()->bounding_box( webcutBody1 );
-   AcisQueryEngine::instance()->clear_bounding_box( webcutBody2 );
-   AcisQueryEngine::instance()->bounding_box( webcutBody2 );
+    }
+  // Finally, set the BODY pointers, webcutBodyPtr1 and webcutBodyPtr2, to
+  // the resulting Acis BODYs (after the imprint operation)
+  webcutBody1 = body1Save;
+  webcutBody2 = body2Save;
+  AcisQueryEngine::instance()->clear_bounding_box( webcutBody1 );
+  AcisQueryEngine::instance()->bounding_box( webcutBody1 );
+  AcisQueryEngine::instance()->clear_bounding_box( webcutBody2 );
+  AcisQueryEngine::instance()->bounding_box( webcutBody2 );
 
-   return CUBIT_SUCCESS;
+  return CUBIT_SUCCESS;
 }
 
 //-------------------------------------------------------------------------
@@ -4441,15 +3905,15 @@
   VERTEX* VERTEX_ptr = NULL;
   API_BEGIN;
 
-      // Create a new ACIS VERTEX -- it is not attached to a BODY
-    APOINT* APOINT_ptr = new APOINT ( point.x(), point.y(), point.z() );
+  // Create a new ACIS VERTEX -- it is not attached to a BODY
+  APOINT* APOINT_ptr = new APOINT ( point.x(), point.y(), point.z() );
 
-    if ( APOINT_ptr != NULL )
+  if ( APOINT_ptr != NULL )
     {
       VERTEX_ptr = new VERTEX ( APOINT_ptr );
     }
 
-    else
+  else
     {
       PRINT_ERROR("In AcisModifyEngine::make_VERTEX\n"
                   "       ACIS could not make an APOINT object.\n"
@@ -4457,8 +3921,8 @@
       status = CUBIT_FAILURE;
     }
 
-      // Complain if ACIS wasn't able to create the VERTEX
-    if ( VERTEX_ptr == NULL && status == CUBIT_SUCCESS)
+  // Complain if ACIS wasn't able to create the VERTEX
+  if ( VERTEX_ptr == NULL && status == CUBIT_SUCCESS)
     {
       PRINT_ERROR("In AcisModifyEngine::make_VERTEX\n"
                   "       ACIS could not make a VERTEX object.\n");
@@ -4494,59 +3958,59 @@
 // Creation Date : 03-27-97
 //-------------------------------------------------------------------------
 EDGE* AcisModifyEngine::make_EDGE( GeometryType EDGE_type,
-                                     VERTEX* start_VERTEX,
-                                     VERTEX* end_VERTEX,
-                                     SPAposition* intermediate_point_ptr,
+				   VERTEX* start_VERTEX,
+				   VERTEX* end_VERTEX,
+				   SPAposition* intermediate_point_ptr,
                                    bool sense ) const
 {
-     // Make sure the input VERTEX'es are non-NULL -- these are needed by
-     // all the EDGE generation routines.
-   if ( start_VERTEX == NULL || end_VERTEX == NULL )
-   {
+  // Make sure the input VERTEX'es are non-NULL -- these are needed by
+  // all the EDGE generation routines.
+  if ( start_VERTEX == NULL || end_VERTEX == NULL )
+    {
       PRINT_ERROR("In AcisModifyEngine::make_EDGE\n"
                   "       An input end VERTEX is invalid (NULL).\n");
       assert (start_VERTEX != NULL && end_VERTEX != NULL);
       return (EDGE *)NULL;
-   }
+    }
 
-     // Make a straight EDGE
-   if ( EDGE_type == STRAIGHT_CURVE_TYPE )
-   {
+  // Make a straight EDGE
+  if ( EDGE_type == STRAIGHT_CURVE_TYPE )
+    {
       return make_straight_EDGE(start_VERTEX, end_VERTEX);
-   }
+    }
 
-     // Make a parabolic EDGE
-   else if ( EDGE_type == PARABOLA_CURVE_TYPE )
-   {
+  // Make a parabolic EDGE
+  else if ( EDGE_type == PARABOLA_CURVE_TYPE )
+    {
       return make_parabolic_EDGE( start_VERTEX,
                                   end_VERTEX,
                                   intermediate_point_ptr);
-   }
+    }
 
-     // Make an elliptical EDGE
-   else if ( EDGE_type == ELLIPSE_CURVE_TYPE )
-   {
+  // Make an elliptical EDGE
+  else if ( EDGE_type == ELLIPSE_CURVE_TYPE )
+    {
       return make_elliptical_EDGE( start_VERTEX,
                                    end_VERTEX,
                                    intermediate_point_ptr,
                                    sense);
-   }
+    }
 
-   else if (EDGE_type == ARC_CURVE_TYPE)
-   {
-     return make_circular_EDGE(start_VERTEX,
-                               end_VERTEX,
-                               intermediate_point_ptr);
-   }
+  else if (EDGE_type == ARC_CURVE_TYPE)
+    {
+      return make_circular_EDGE(start_VERTEX,
+				end_VERTEX,
+				intermediate_point_ptr);
+    }
 
-     // OOps!!!!
-   else
-   {
+  // OOps!!!!
+  else
+    {
       PRINT_ERROR("In AcisModifyEngine::make_EDGE\n"
                   "       Invalid curve type.\n");
       assert (0 == 1);
       return (EDGE *)NULL;
-   }
+    }
 }
 
 // This function will create a supper cone using the info
@@ -4556,110 +4020,110 @@
 // in cubit.
 FACE* AcisModifyEngine::make_type_FACE( CONE *CONE_ptr ) const
 {
-     //Given this lets create another face that is extended from it.
-   CubitBox bounding_box = GeometryQueryTool::instance()->model_bounding_box();
+  //Given this lets create another face that is extended from it.
+  CubitBox bounding_box = GeometryQueryTool::instance()->model_bounding_box();
 
-   BODY *sheet_body;
-   CubitBoolean cylinder = CUBIT_FALSE;
+  BODY *sheet_body;
+  CubitBoolean cylinder = CUBIT_FALSE;
 
-   double const st_ang = 0.0;
-   double const end_ang = 2*CUBIT_PI;
-   double cost = CONE_ptr->cosine_angle();
-   double sint = CONE_ptr->sine_angle();
-   if ( sint == 0.0 && fabs(cost) == 1.0 )
-   {
-       //This is a cylinder.
-     cylinder = CUBIT_TRUE;
-   }
-   SPAvector major_a = CONE_ptr->major_axis();
-   SPAunit_vector normal_a = CONE_ptr->direction();
-   double const radius_ratio = CONE_ptr->radius_ratio();
-   double const height = 2*(bounding_box.diagonal()).length();
-   SPAposition root = CONE_ptr->root_point();
-   CubitVector elipse_radius, center_vec;
-   CubitVector temp_norm( normal_a.x(), normal_a.y(), normal_a.z());
-   if ( !cylinder )
-   {
-     if ( sint > 0.0 && cost > 0.0 )
-     {
-       sint = -sint;
-       temp_norm *= -1.0;
-     }
-     else if ( sint < 0.0 && cost < 0.0 )
-     {
-       cost = -cost;
-       temp_norm *= -1.0;
-     }
-       //First we need to calculate the new radius.
-       //Also calc the old height to find the new center SPAposition.
-     double theta_rad = acos(cost);
-     elipse_radius.set(major_a.x(), major_a.y(), major_a.z() );
-     double old_radius = elipse_radius.length();
-     double old_height = old_radius/tan(theta_rad);
+  double const st_ang = 0.0;
+  double const end_ang = 2*CUBIT_PI;
+  double cost = CONE_ptr->cosine_angle();
+  double sint = CONE_ptr->sine_angle();
+  if ( sint == 0.0 && fabs(cost) == 1.0 )
+    {
+      //This is a cylinder.
+      cylinder = CUBIT_TRUE;
+    }
+  SPAvector major_a = CONE_ptr->major_axis();
+  SPAunit_vector normal_a = CONE_ptr->direction();
+  double const radius_ratio = CONE_ptr->radius_ratio();
+  double const height = 2*(bounding_box.diagonal()).length();
+  SPAposition root = CONE_ptr->root_point();
+  CubitVector elipse_radius, center_vec;
+  CubitVector temp_norm( normal_a.x(), normal_a.y(), normal_a.z());
+  if ( !cylinder )
+    {
+      if ( sint > 0.0 && cost > 0.0 )
+	{
+	  sint = -sint;
+	  temp_norm *= -1.0;
+	}
+      else if ( sint < 0.0 && cost < 0.0 )
+	{
+	  cost = -cost;
+	  temp_norm *= -1.0;
+	}
+      //First we need to calculate the new radius.
+      //Also calc the old height to find the new center SPAposition.
+      double theta_rad = acos(cost);
+      elipse_radius.set(major_a.x(), major_a.y(), major_a.z() );
+      double old_radius = elipse_radius.length();
+      double old_height = old_radius/tan(theta_rad);
 
-     //make center of surface along axis, 1/2 height of
-     //bounding box of entire model.
-     CubitVector root_vec( root.x(), root.y(), root.z() );
-     center_vec = root_vec + (-0.5*height)*temp_norm;
+      //make center of surface along axis, 1/2 height of
+      //bounding box of entire model.
+      CubitVector root_vec( root.x(), root.y(), root.z() );
+      center_vec = root_vec + (-0.5*height)*temp_norm;
 
-     //calculate new radius
-     double new_radius = (old_height+ 0.5*height) * tan (theta_rad );
-     elipse_radius.normalize();
-     elipse_radius *= new_radius;
-   }
-   else
-   {
-     CubitVector root_vec( root.x(), root.y(), root.z() );
-     center_vec = .5*height*temp_norm;
-     center_vec = root_vec - center_vec;
-     elipse_radius.set(major_a.x(), major_a.y(), major_a.z() );
-   }
-   SPAvector const major_axis(elipse_radius.x(), elipse_radius.y(), elipse_radius.z() );
+      //calculate new radius
+      double new_radius = (old_height+ 0.5*height) * tan (theta_rad );
+      elipse_radius.normalize();
+      elipse_radius *= new_radius;
+    }
+  else
+    {
+      CubitVector root_vec( root.x(), root.y(), root.z() );
+      center_vec = .5*height*temp_norm;
+      center_vec = root_vec - center_vec;
+      elipse_radius.set(major_a.x(), major_a.y(), major_a.z() );
+    }
+  SPAvector const major_axis(elipse_radius.x(), elipse_radius.y(), elipse_radius.z() );
 
-   SPAunit_vector const normal_axis(temp_norm.x(), temp_norm.y(), temp_norm.z());
-   SPAposition const center ( center_vec.x(), center_vec.y(), center_vec.z() );
+  SPAunit_vector const normal_axis(temp_norm.x(), temp_norm.y(), temp_norm.z());
+  SPAposition const center ( center_vec.x(), center_vec.y(), center_vec.z() );
 
 
-   FACE *new_FACE_ptr = NULL;
-   outcome result = api_make_cnface( center, normal_axis, major_axis,
-                             radius_ratio, sint, cost, st_ang,
-                             end_ang, height, new_FACE_ptr );
-   if (!result.ok() || new_FACE_ptr == NULL ||
-       new_FACE_ptr->geometry() == NULL )
-   {
+  FACE *new_FACE_ptr = NULL;
+  outcome result = api_make_cnface( center, normal_axis, major_axis,
+				    radius_ratio, sint, cost, st_ang,
+				    end_ang, height, new_FACE_ptr );
+  if (!result.ok() || new_FACE_ptr == NULL ||
+      new_FACE_ptr->geometry() == NULL )
+    {
       PRINT_ERROR("In AcisModifyEngine::make_type_FACE(cone)\n"
                   "       ACIS api_make_cnface function failed.\n\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
       return (FACE *)NULL;
-   }
-   FACE *face_list[1];
-   face_list[0] = new_FACE_ptr;
-   result = api_sheet_from_ff( 1, face_list, sheet_body );
-   if (!result.ok() || sheet_body == NULL || sheet_body->lump() == NULL
-       || sheet_body->lump()->shell() == NULL ||
-       sheet_body->lump()->shell()->first_face() == NULL )
-   {
+    }
+  FACE *face_list[1];
+  face_list[0] = new_FACE_ptr;
+  result = api_sheet_from_ff( 1, face_list, sheet_body );
+  if (!result.ok() || sheet_body == NULL || sheet_body->lump() == NULL
+      || sheet_body->lump()->shell() == NULL ||
+      sheet_body->lump()->shell()->first_face() == NULL )
+    {
       PRINT_ERROR("In AcisModifyEngine::make_type_FACE(cone)\n"
                   "       ACIS api_sheet_from_ff function failed.\n\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
       return (FACE *)NULL;
-   }
-   result =  api_body_to_2d( sheet_body );
-   if (!result.ok())
-   {
+    }
+  result =  api_body_to_2d( sheet_body );
+  if (!result.ok())
+    {
       PRINT_ERROR("In AcisModifyEngine::make_type_FACE(cone)\n"
                   "       ACIS api_body_to_2d function failed.\n\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
       return (FACE *)NULL;
-   }
-   int debug_flg = 0;
-     // Save the BODY being cut, if debug is on
-   if (debug_flg)
-   {
+    }
+  int debug_flg = 0;
+  // Save the BODY being cut, if debug is on
+  if (debug_flg)
+    {
       AcisQueryEngine::instance()->save_ENTITY_as_sat_file(sheet_body, "cone_sheet.sat", "w");
-   }
+    }
 
-   return sheet_body->lump()->shell()->first_face();
+  return sheet_body->lump()->shell()->first_face();
 }
 // This function will create a sphere face using the info
 // from the existing sphere.  It is actually a face or sheet
@@ -4667,73 +4131,73 @@
 // will be the grand sphere itself, not a section of it.
 FACE* AcisModifyEngine::make_type_FACE( SPHERE *SPHERE_ptr ) const
 {
-   BODY *sheet_body;
+  BODY *sheet_body;
 
-   BODY *sphere_body;
-   SPAposition const center = SPHERE_ptr->centre();
-   double const radius = SPHERE_ptr->radius();
+  BODY *sphere_body;
+  SPAposition const center = SPHERE_ptr->centre();
+  double const radius = SPHERE_ptr->radius();
 
-     //make a sphere body then move it to the give place.
-   outcome result = api_make_sphere( radius, sphere_body );
-   if (!result.ok() || sphere_body == NULL ||
-       sphere_body->lump() == NULL ||
-       sphere_body->lump()->shell() == NULL ||
-       sphere_body->lump()->shell()->first_face() == NULL )
-   {
+  //make a sphere body then move it to the give place.
+  outcome result = api_make_sphere( radius, sphere_body );
+  if (!result.ok() || sphere_body == NULL ||
+      sphere_body->lump() == NULL ||
+      sphere_body->lump()->shell() == NULL ||
+      sphere_body->lump()->shell()->first_face() == NULL )
+    {
       PRINT_ERROR("In AcisModifyEngine::make_type_FACE(sphere)\n"
                   "       ACIS api_make_sphere function failed.\n\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
       return (FACE *)NULL;
-   }
-     //now move the body.
-   SPAvector translation_vector( center.x(), center.y(), center.z() );
-   result = api_apply_transf ( sphere_body,
-                               translate_transf (translation_vector) );
-   if ( !result.ok() )
-   {
+    }
+  //now move the body.
+  SPAvector translation_vector( center.x(), center.y(), center.z() );
+  result = api_apply_transf ( sphere_body,
+			      translate_transf (translation_vector) );
+  if ( !result.ok() )
+    {
       PRINT_ERROR("In AcisModifyEngine::make_type_FACE(sphere)\n"
                   "       ACIS api_aply_transf function failed.\n\n");
       AcisQueryEngine::instance()->ACIS_API_error ( result, "transforming body" );
       return (FACE*)NULL;
-   }
-   TRANSFORM* identity = new TRANSFORM(scale_transf(1.0));
-   result = api_change_body_trans ( sphere_body, identity, FALSE );
-   identity->lose();
-   if (!result.ok())
-   {
+    }
+  TRANSFORM* identity = new TRANSFORM(scale_transf(1.0));
+  result = api_change_body_trans ( sphere_body, identity, FALSE );
+  identity->lose();
+  if (!result.ok())
+    {
       AcisQueryEngine::instance()->ACIS_API_error ( result, "transforming body" );
       return (FACE*)NULL;
 
-   }
-     //The bounding SPAbox does not get re-computed, so we need
-     //to do it.
-   AcisQueryEngine::instance()->clear_bounding_box( sphere_body );
-   AcisQueryEngine::instance()->bounding_box(sphere_body);
+    }
+  //The bounding SPAbox does not get re-computed, so we need
+  //to do it.
+  AcisQueryEngine::instance()->clear_bounding_box( sphere_body );
+  AcisQueryEngine::instance()->bounding_box(sphere_body);
 
 
-   FACE *face_list[1];
-   face_list[0] = sphere_body->lump()->shell()->first_face();
-   result = api_sheet_from_ff( 1, face_list, sheet_body );
-   if (!result.ok() || sheet_body == NULL || sheet_body->lump() == NULL
-       || sheet_body->lump()->shell() == NULL ||
-       sheet_body->lump()->shell()->first_face() == NULL )
-   {
+  FACE *face_list[1];
+  face_list[0] = sphere_body->lump()->shell()->first_face();
+  result = api_sheet_from_ff( 1, face_list, sheet_body );
+  if (!result.ok() || sheet_body == NULL || sheet_body->lump() == NULL
+      || sheet_body->lump()->shell() == NULL ||
+      sheet_body->lump()->shell()->first_face() == NULL )
+    {
       PRINT_ERROR("In AcisModifyEngine::make_type_FACE(sphere)\n"
                   "       ACIS api_sheet_from_ff function failed.\n\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
       return (FACE *)NULL;
-   }
-   result =  api_body_to_2d( sheet_body );
-   if (!result.ok())
-   {
+    }
+  result =  api_body_to_2d( sheet_body );
+  if (!result.ok())
+    {
       PRINT_ERROR("In AcisModifyEngine::make_type_FACE(sphere)\n"
                   "       ACIS api_body_to_2d function failed.\n\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
       return (FACE *)NULL;
-   }
-   AcisQueryEngine::instance()->delete_ACIS_BODY(sphere_body, CUBIT_TRUE);
+    }
+  AcisQueryEngine::instance()->delete_ACIS_BODY(sphere_body, CUBIT_TRUE);
 
-   return sheet_body->lump()->shell()->first_face();
+  return sheet_body->lump()->shell()->first_face();
 }
 // This function will create a torus face using the info
 // from the existing torus.  It is actually a face or sheet
@@ -4742,66 +4206,66 @@
 FACE* AcisModifyEngine::make_type_FACE( TORUS *TORUS_ptr ) const
 {
   if ( TORUS_ptr == NULL )
-  {
-    PRINT_ERROR("NULL pointer passed to make face from. (torus).\n");
-    return (FACE*)NULL;
-  }
+    {
+      PRINT_ERROR("NULL pointer passed to make face from. (torus).\n");
+      return (FACE*)NULL;
+    }
 
-   BODY *sheet_body;
-   SPAposition const center = TORUS_ptr->centre();
-   SPAunit_vector const normal = TORUS_ptr->normal();
-   double const uf = 0.0;
-   double const ut = 2*CUBIT_PI;
-   double const vf = 0.0;
-   double const vt = 2*CUBIT_PI;
-   double const major_radius = TORUS_ptr->major_radius();
-   double const minor_radius = TORUS_ptr->minor_radius();
-   CubitVector temp_center(center.x(), center.y(), center.z());
-   CubitVector temp_normal(normal.x(), normal.y(), normal.z());
-   temp_normal.normalize();
-   CubitVector temp_point = temp_center + major_radius*temp_normal;
-   SPAposition const point(temp_point.x(), temp_point.y(), temp_point.z());
+  BODY *sheet_body;
+  SPAposition const center = TORUS_ptr->centre();
+  SPAunit_vector const normal = TORUS_ptr->normal();
+  double const uf = 0.0;
+  double const ut = 2*CUBIT_PI;
+  double const vf = 0.0;
+  double const vt = 2*CUBIT_PI;
+  double const major_radius = TORUS_ptr->major_radius();
+  double const minor_radius = TORUS_ptr->minor_radius();
+  CubitVector temp_center(center.x(), center.y(), center.z());
+  CubitVector temp_normal(normal.x(), normal.y(), normal.z());
+  temp_normal.normalize();
+  CubitVector temp_point = temp_center + major_radius*temp_normal;
+  SPAposition const point(temp_point.x(), temp_point.y(), temp_point.z());
 
-     //make a torus body then move it to the give place.
-   FACE *new_FACE_ptr = NULL;
-   outcome result = api_make_trface( center, normal, major_radius,
-                                     minor_radius, point,
-                                     uf, ut, vf, vt, new_FACE_ptr );
-   if (!result.ok() || new_FACE_ptr == NULL )
-   {
+  //make a torus body then move it to the give place.
+  FACE *new_FACE_ptr = NULL;
+  outcome result = api_make_trface( center, normal, major_radius,
+				    minor_radius, point,
+				    uf, ut, vf, vt, new_FACE_ptr );
+  if (!result.ok() || new_FACE_ptr == NULL )
+    {
       PRINT_ERROR("In AcisModifyEngine::make_type_FACE(torus)\n"
                   "       ACIS api_make_trface function failed.\n\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
       return (FACE *)NULL;
-   }
-   FACE *face_list[1];
-   face_list[0] = new_FACE_ptr;
-   result = api_sheet_from_ff( 1, face_list, sheet_body );
-   if (!result.ok() || sheet_body == NULL || sheet_body->lump() == NULL
-       || sheet_body->lump()->shell() == NULL ||
-       sheet_body->lump()->shell()->first_face() == NULL )
-   {
+    }
+  FACE *face_list[1];
+  face_list[0] = new_FACE_ptr;
+  result = api_sheet_from_ff( 1, face_list, sheet_body );
+  if (!result.ok() || sheet_body == NULL || sheet_body->lump() == NULL
+      || sheet_body->lump()->shell() == NULL ||
+      sheet_body->lump()->shell()->first_face() == NULL )
+    {
       PRINT_ERROR("In AcisModifyEngine::make_type_FACE(torus)\n"
                   "       ACIS api_sheet_from_ff function failed.\n\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
       return (FACE *)NULL;
-   }
-   result =  api_body_to_2d( sheet_body );
-   if (!result.ok())
-   {
+    }
+  result =  api_body_to_2d( sheet_body );
+  if (!result.ok())
+    {
       PRINT_ERROR("In AcisModifyEngine::make_type_FACE(torus)\n"
                   "       ACIS api_body_to_2d function failed.\n\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
       return (FACE *)NULL;
-   }
-   int debug_flg = 0;
-     // Save the BODY being cut, if debug is on
-   if (debug_flg)
-   {
+    }
+  int debug_flg = 0;
+  // Save the BODY being cut, if debug is on
+  if (debug_flg)
+    {
       AcisQueryEngine::instance()->save_ENTITY_as_sat_file(sheet_body, "torus_sheet.sat", "w");
-   }
+    }
 
-   return sheet_body->lump()->shell()->first_face();
+  return sheet_body->lump()->shell()->first_face();
 }
 // This function will create a spline face using the info
 // from the existing spline.  It is actually a face or sheet
@@ -4809,36 +4273,36 @@
 // will be the grand spline itself, not a section of it.
 FACE* AcisModifyEngine::make_type_FACE( SPLINE *SPLINE_ptr ) const
 {
-   BODY *sheet_body;
-   PRINT_WARNING("Extents of spline will be only as far as\n"
-                 "the spline definition, this really isn't an infinite surface.\n");
+  BODY *sheet_body;
+  PRINT_WARNING("Extents of spline will be only as far as\n"
+		"the spline definition, this really isn't an infinite surface.\n");
 
-     //use the geometry to make the spline body.
-   surface const *this_spline = &(SPLINE_ptr->equation());
+  //use the geometry to make the spline body.
+  surface const *this_spline = &(SPLINE_ptr->equation());
 
-     //make a spline body then move it to the give place.
-   outcome result = api_make_spline( *((spline*)this_spline), sheet_body );
-   if (!result.ok() || sheet_body == NULL ||
-       sheet_body->lump() == NULL ||
-       sheet_body->lump()->shell() == NULL ||
-       sheet_body->lump()->shell()->first_face() == NULL ||
-       sheet_body->lump()->shell()->first_face()->geometry() == NULL )
-   {
+  //make a spline body then move it to the give place.
+  outcome result = api_make_spline( *((spline*)this_spline), sheet_body );
+  if (!result.ok() || sheet_body == NULL ||
+      sheet_body->lump() == NULL ||
+      sheet_body->lump()->shell() == NULL ||
+      sheet_body->lump()->shell()->first_face() == NULL ||
+      sheet_body->lump()->shell()->first_face()->geometry() == NULL )
+    {
       PRINT_ERROR("In AcisModifyEngine::make_type_FACE(spline)\n"
                   "       ACIS api_make_spline function failed.\n\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
       return (FACE *)NULL;
-   }
-   result =  api_body_to_2d( sheet_body );
-   if (!result.ok())
-   {
+    }
+  result =  api_body_to_2d( sheet_body );
+  if (!result.ok())
+    {
       PRINT_ERROR("In AcisModifyEngine::make_type_FACE(spline)\n"
                   "       ACIS api_body_to_2d function failed.\n\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
       return (FACE *)NULL;
-   }
+    }
 
-   return sheet_body->lump()->shell()->first_face();
+  return sheet_body->lump()->shell()->first_face();
 }
 // This function will create a plane face using the info
 // from the existing plane.  It is actually a face or sheet
@@ -4846,37 +4310,37 @@
 // will be the grand plane itself, not a section of it.
 FACE* AcisModifyEngine::make_type_FACE( PLANE *PLANE_ptr ) const
 {
-     //first lets find 3 points.
-   SPAposition point_1, point_2, point_3;
-   SPApar_pos const pos_1( 0, 1 );
-   SPApar_pos const pos_2( 1, 0 );
-   SPApar_pos const pos_3( 0, 0 );
-   PLANE_ptr->equation().eval( pos_1, point_1 );
-   PLANE_ptr->equation().eval( pos_2, point_2 );
-   PLANE_ptr->equation().eval( pos_3, point_3 );
+  //first lets find 3 points.
+  SPAposition point_1, point_2, point_3;
+  SPApar_pos const pos_1( 0, 1 );
+  SPApar_pos const pos_2( 1, 0 );
+  SPApar_pos const pos_3( 0, 0 );
+  PLANE_ptr->equation().eval( pos_1, point_1 );
+  PLANE_ptr->equation().eval( pos_2, point_2 );
+  PLANE_ptr->equation().eval( pos_3, point_3 );
 
-   CubitBox cubit_super_box = GeometryQueryTool::instance()->model_bounding_box();
-   SPAbox super_box = AcisQueryEngine::bounding_box(cubit_super_box);
+  CubitBox cubit_super_box = GeometryQueryTool::instance()->model_bounding_box();
+  SPAbox super_box = AcisQueryEngine::bounding_box(cubit_super_box);
 
-   CubitVector vec_1( point_1.x(), point_1.y(), point_1.z() );
-   CubitVector vec_2( point_2.x(), point_2.y(), point_2.z() );
-   CubitVector vec_3( point_3.x(), point_3.y(), point_3.z() );
+  CubitVector vec_1( point_1.x(), point_1.y(), point_1.z() );
+  CubitVector vec_2( point_2.x(), point_2.y(), point_2.z() );
+  CubitVector vec_3( point_3.x(), point_3.y(), point_3.z() );
 
-   BODY *sheet_body = this->create_infinite_plane_cutting_tool(
-       vec_1, vec_2, vec_3, super_box, CUBIT_TRUE );
-   if (sheet_body == NULL ||
-       sheet_body->lump() == NULL ||
-       sheet_body->lump()->shell() == NULL ||
-       sheet_body->lump()->shell()->first_face() == NULL ||
-       sheet_body->lump()->shell()->first_face()->geometry() == NULL )
-   {
-        //webcut_failed(refbody_cleanup_list, BODY_cleanup_list);
+  BODY *sheet_body = this->create_infinite_plane_cutting_tool(
+							      vec_1, vec_2, vec_3, super_box, CUBIT_TRUE );
+  if (sheet_body == NULL ||
+      sheet_body->lump() == NULL ||
+      sheet_body->lump()->shell() == NULL ||
+      sheet_body->lump()->shell()->first_face() == NULL ||
+      sheet_body->lump()->shell()->first_face()->geometry() == NULL )
+    {
+      //webcut_failed(refbody_cleanup_list, BODY_cleanup_list);
       PRINT_ERROR("In AcisModifyEngine::make_type_FACE(plane)"
                   "       Cannot create infinite plane cutting tool using \n"
                   "       the give surface. \n");
       return (FACE*)NULL;
-   }
-   return sheet_body->lump()->shell()->first_face();
+    }
+  return sheet_body->lump()->shell()->first_face();
 }
 //-------------------------------------------------------------------------
 // Purpose       : Create a face from the face pointer.  This will create
@@ -4888,66 +4352,66 @@
 // Creation Date : 10/6/97
 //-------------------------------------------------------------------------
 FACE* AcisModifyEngine::make_FACE(FACE* FACE_ptr,
-                                    CubitBoolean extended_from) const
+				  CubitBoolean extended_from) const
 {
   if (FACE_ptr == NULL)
     return NULL;
 
   if (extended_from == CUBIT_TRUE)
-  {
+    {
       // We need to get the type of surface.
       // For some reason I can't get it to cast on the fly.
-    SURFACE *SURFACE_ptr = FACE_ptr->geometry();
-    int type = SURFACE_ptr->identity();
-    if (type == CONE_TYPE)
-      return make_type_FACE((CONE*)SURFACE_ptr);
-    else if (type == SPHERE_TYPE)
-      return make_type_FACE((SPHERE*)SURFACE_ptr);
-    else if (type == TORUS_TYPE)
-      return make_type_FACE((TORUS*)SURFACE_ptr);
-    else if (type == SPLINE_TYPE)
-      return make_type_FACE((SPLINE*)SURFACE_ptr);
-    else if (type == PLANE_TYPE)
-      return make_type_FACE((PLANE*)SURFACE_ptr);
-    else
-      return NULL;
-  }
+      SURFACE *SURFACE_ptr = FACE_ptr->geometry();
+      int type = SURFACE_ptr->identity();
+      if (type == CONE_TYPE)
+	return make_type_FACE((CONE*)SURFACE_ptr);
+      else if (type == SPHERE_TYPE)
+	return make_type_FACE((SPHERE*)SURFACE_ptr);
+      else if (type == TORUS_TYPE)
+	return make_type_FACE((TORUS*)SURFACE_ptr);
+      else if (type == SPLINE_TYPE)
+	return make_type_FACE((SPLINE*)SURFACE_ptr);
+      else if (type == PLANE_TYPE)
+	return make_type_FACE((PLANE*)SURFACE_ptr);
+      else
+	return NULL;
+    }
 
   FACE *face_list[1];
   BODY *sheet_body;
   face_list[0] = FACE_ptr;
 
-    // Make a FACE from copy_FACE.
+  // Make a FACE from copy_FACE.
   outcome rc = api_sheet_from_ff(1, face_list, sheet_body);
 
-    // Now check to see if we created the sheet successfully.
+  // Now check to see if we created the sheet successfully.
   if (!rc.ok())
-  {
-    PRINT_ERROR("In AcisModifyEngine::make_FACE\n"
-                "       ACIS api_sheet_from_ff function failed.\n\n");
-    AcisQueryEngine::instance()->ACIS_API_error (rc);
-    return (FACE *)NULL;
-  }
+    {
+      PRINT_ERROR("In AcisModifyEngine::make_FACE\n"
+		  "       ACIS api_sheet_from_ff function failed.\n\n");
+      AcisQueryEngine::instance()->ACIS_API_error (rc);
+      return (FACE *)NULL;
+    }
 
-    // Convert the FACE to a true sheet BODY.
+  // Convert the FACE to a true sheet BODY.
   outcome rc_2 =  api_body_to_2d(sheet_body);
   if (!rc_2.ok())
-  {
-    PRINT_ERROR("In AcisModifyEngine::make_FACE\n"
-                "       ACIS api_body_to_2d function failed.\n\n");
-    AcisQueryEngine::instance()->ACIS_API_error (rc_2);
-    return (FACE *)NULL;
-  }
+    {
+      PRINT_ERROR("In AcisModifyEngine::make_FACE\n"
+		  "       ACIS api_body_to_2d function failed.\n\n");
+      AcisQueryEngine::instance()->ACIS_API_error (rc_2);
+      return (FACE *)NULL;
+    }
 
-    // Make sure we were successful
+  // Make sure we were successful
   if ( sheet_body->lump() == NULL ||
        sheet_body->lump()->shell() == NULL ||
        sheet_body->lump()->shell()->first_face() == NULL )
-  {
-    PRINT_ERROR("In AcisModifyEngine::make_FACE\n"
-                "       ACIS api_sheet_from_ff function failed.\n\n");
-    return (FACE*)NULL;
-  }
+    {
+      PRINT_ERROR("In AcisModifyEngine::make_FACE\n"
+		  "       ACIS api_sheet_from_ff function failed.\n\n");
+      return (FACE*)NULL;
+    }
 
   return sheet_body->lump()->shell()->first_face();
 }
@@ -4968,26 +4432,26 @@
                                    DLIList<EDGE*>& input_EDGE_list,
                                    Surface *old_surface_ptr) const
 {
-    // Make sure a supported type of surface is being requested.
+  // Make sure a supported type of surface is being requested.
   if ( FACE_type != PLANE_SURFACE_TYPE  &&
        FACE_type != BEST_FIT_SURFACE_TYPE)
-  {
-    PRINT_WARNING("In AcisGeometryEngine::make_FACE\n"
-                  "         At this time, cannot make a FACE that isn't"
-                  " planar or best fit.\n");
-    return (FACE *)NULL;
-  }
+    {
+      PRINT_WARNING("In AcisGeometryEngine::make_FACE\n"
+		    "         At this time, cannot make a FACE that isn't"
+		    " planar or best fit.\n");
+      return (FACE *)NULL;
+    }
 
-    // Set the FACE pointer, if requested.
+  // Set the FACE pointer, if requested.
   FACE *fit_FACE = NULL;
   if ( old_surface_ptr != NULL )
-  {
-    SurfaceACIS *surf_ACIS = CAST_TO(old_surface_ptr, SurfaceACIS );
-    fit_FACE = surf_ACIS->get_FACE_ptr();
-  }
+    {
+      SurfaceACIS *surf_ACIS = CAST_TO(old_surface_ptr, SurfaceACIS );
+      fit_FACE = surf_ACIS->get_FACE_ptr();
+    }
 
-    // Copy the original EDGEs and put them into an array.
-    // Also initialize variables that will be used/returned by ACIS.
+  // Copy the original EDGEs and put them into an array.
+  // Also initialize variables that will be used/returned by ACIS.
   int edge_count = input_EDGE_list.size();
   FACE* FACE_ptr = NULL;
   BODY* wire_BODY = NULL;
@@ -4997,12 +4461,12 @@
   int i;
 
   for (i = 0 ; i < edge_count ; i++)
-  {
-    copy_single_entity( (ENTITY *)input_EDGE_list.get_and_step(), temp_ENTITY_ptr);
-    EDGEs[i] = (EDGE*)temp_ENTITY_ptr;
+    {
+      copy_single_entity( (ENTITY *)input_EDGE_list.get_and_step(), temp_ENTITY_ptr);
+      EDGEs[i] = (EDGE*)temp_ENTITY_ptr;
       // Deactivate the RefEntities attached to the EDGE and its VERTEXes.
-    mark_owners_deactivated_flag(EDGEs[i], CUBIT_TRUE, CUBIT_TRUE);
-  }
+      mark_owners_deactivated_flag(EDGEs[i], CUBIT_TRUE, CUBIT_TRUE);
+    }
 
   // Make a wire BODY from the copied EDGEs.
   // Coincident VERTEXes will be deleted by ACIS.
@@ -5015,116 +4479,116 @@
     wire_BODYs.add( wireBODYs[i] );
 
   if ( !result.ok() || wire_BODYs.count() == 0 )
-  {
-    PRINT_ERROR("In AcisGeometryEngine::make_FACE\n"
-                "       ACIS api_make_ewire function failed.\n\n");
-    AcisQueryEngine::instance()->ACIS_API_error (result);
-    if (wire_BODYs.count())
-      for(i=0; i<wire_BODYs.count(); i++ )
-        api_delent(wire_BODYs[i]);
-    else
     {
-      while (edge_count--)
-        api_delent(EDGEs[edge_count]);
+      PRINT_ERROR("In AcisGeometryEngine::make_FACE\n"
+		  "       ACIS api_make_ewire function failed.\n\n");
+      AcisQueryEngine::instance()->ACIS_API_error (result);
+      if (wire_BODYs.count())
+	for(i=0; i<wire_BODYs.count(); i++ )
+	  api_delent(wire_BODYs[i]);
+      else
+	{
+	  while (edge_count--)
+	    api_delent(EDGEs[edge_count]);
+	}
+
+      delete [] EDGEs;
+      return (FACE *)NULL;
     }
 
-    delete [] EDGEs;
-    return (FACE *)NULL;
-  }
-
-    // Check to make sure the wire is closed
+  // Check to make sure the wire is closed
   for(i=0; i<wire_BODYs.count(); i++ )
-  {
-    result = api_closed_wire( (BODY*)wire_BODYs[i] );
-    if( !result.ok() )
     {
-      PRINT_ERROR( "ACIS reports that a closed loop was not found\n" );
-        // Delete the wire BODY.  This will also delete
-        // each copied EDGE
-      for(i=0; i<wire_BODYs.count(); i++ )
-        api_delent(wire_BODYs[i]);
-        // Delete the array
-      delete [] EDGEs;
-      return (FACE *)NULL;
+      result = api_closed_wire( (BODY*)wire_BODYs[i] );
+      if( !result.ok() )
+	{
+	  PRINT_ERROR( "ACIS reports that a closed loop was not found\n" );
+	  // Delete the wire BODY.  This will also delete
+	  // each copied EDGE
+	  for(i=0; i<wire_BODYs.count(); i++ )
+	    api_delent(wire_BODYs[i]);
+	  // Delete the array
+	  delete [] EDGEs;
+	  return (FACE *)NULL;
+	}
     }
-  }
 
 
   //check planarity & co-planarity
   if( wire_BODYs.count() > 1 )
-  {
-    CubitVector master_centroid;
-    CubitVector master_normal;
-    for(i=0; i<wire_BODYs.count(); i++ )
     {
-      SPAposition centroid;
-      SPAunit_vector normal;
+      CubitVector master_centroid;
+      CubitVector master_normal;
+      for(i=0; i<wire_BODYs.count(); i++ )
+	{
+	  SPAposition centroid;
+	  SPAunit_vector normal;
 
-      if( !is_planar_wire( (WIRE*)wire_BODYs[i], centroid, normal ) )
-      {
-        PRINT_ERROR( "Multiple loops must be planar.\n" );
-        for(i=0; i<wire_BODYs.count(); i++ )
-          api_delent(wire_BODYs[i]);
-        delete [] EDGEs;
-        return (FACE *)NULL;
-      }
-      //make the plane
-      if( i==0 )
-      {
-        master_centroid.set( centroid.x(), centroid.y(), centroid.z() );
-        master_normal.set( normal.x(), normal.y(), normal.z() );
-      }
-      else
-      {
-        CubitVector tmp_centroid( centroid.x(), centroid.y(), centroid.z() );
-        CubitVector tmp_normal( normal.x(), normal.y(), normal.z() );
-        CubitVector tmp_vec( tmp_centroid - master_centroid );
-        tmp_vec.normalize();
-        double dot = master_normal % tmp_vec;
-        tmp_normal = tmp_normal * master_normal;
+	  if( !is_planar_wire( (WIRE*)wire_BODYs[i], centroid, normal ) )
+	    {
+	      PRINT_ERROR( "Multiple loops must be planar.\n" );
+	      for(i=0; i<wire_BODYs.count(); i++ )
+		api_delent(wire_BODYs[i]);
+	      delete [] EDGEs;
+	      return (FACE *)NULL;
+	    }
+	  //make the plane
+	  if( i==0 )
+	    {
+	      master_centroid.set( centroid.x(), centroid.y(), centroid.z() );
+	      master_normal.set( normal.x(), normal.y(), normal.z() );
+	    }
+	  else
+	    {
+	      CubitVector tmp_centroid( centroid.x(), centroid.y(), centroid.z() );
+	      CubitVector tmp_normal( normal.x(), normal.y(), normal.z() );
+	      CubitVector tmp_vec( tmp_centroid - master_centroid );
+	      tmp_vec.normalize();
+	      double dot = master_normal % tmp_vec;
+	      tmp_normal = tmp_normal * master_normal;
 
-        if( tmp_normal.length() > GEOMETRY_RESABS ||
-            fabs(dot) > GEOMETRY_RESABS )
-        {
-          PRINT_ERROR( "Multiple loops must be co-planar.\n" );
-          for(i=0; i<wire_BODYs.count(); i++ )
-            api_delent(wire_BODYs[i]);
-          delete [] EDGEs;
-          return (FACE *)NULL;
-        }
-      }
+	      if( tmp_normal.length() > GEOMETRY_RESABS ||
+		  fabs(dot) > GEOMETRY_RESABS )
+		{
+		  PRINT_ERROR( "Multiple loops must be co-planar.\n" );
+		  for(i=0; i<wire_BODYs.count(); i++ )
+		    api_delent(wire_BODYs[i]);
+		  delete [] EDGEs;
+		  return (FACE *)NULL;
+		}
+	    }
+	}
     }
-  }
 
   //check intersecting
   if( wire_BODYs.count() > 1 )
-  {
-    for(i=0; i<wire_BODYs.count(); i++ )
     {
-      ENTITY *ent1 = wire_BODYs[i];
+      for(i=0; i<wire_BODYs.count(); i++ )
+	{
+	  ENTITY *ent1 = wire_BODYs[i];
 
-      int j;
-      for(j=0; j<wire_BODYs.count(); j++ )
-      {
-        if( i==j )
-          continue;
+	  int j;
+	  for(j=0; j<wire_BODYs.count(); j++ )
+	    {
+	      if( i==j )
+		continue;
 
-        ENTITY *ent2 = wire_BODYs[j];
-        logical touching = FALSE;
+	      ENTITY *ent2 = wire_BODYs[j];
+	      logical touching = FALSE;
 
-        api_entity_entity_touch( ent1, ent2, touching );
+	      api_entity_entity_touch( ent1, ent2, touching );
 
-        if( touching )
-        {
-          PRINT_ERROR( "Multiple loops cannot intersect.\n" );
-          for(i=0; i<wire_BODYs.count(); i++ )
-            api_delent(wire_BODYs[i]);
-          delete [] EDGEs;
-          return (FACE *)NULL;
-        }
-      }
+	      if( touching )
+		{
+		  PRINT_ERROR( "Multiple loops cannot intersect.\n" );
+		  for(i=0; i<wire_BODYs.count(); i++ )
+		    api_delent(wire_BODYs[i]);
+		  delete [] EDGEs;
+		  return (FACE *)NULL;
+		}
+	    }
+	}
     }
-  }
 
   //sort wires so that the outermost is first
   wire_BODYs.init();
@@ -5132,256 +4596,256 @@
   ENTITY *outermost_wire= NULL;
   double longest_diagonal = 0.0;
   if( wire_BODYs.count() > 1 )
-  {
-    for(i=0; i<wire_BODYs.count(); i++ )
     {
-      SPAbox tmp_box;
-      CubitBox tmp_cbox;
-      ENTITY *tmp_wire = wire_BODYs.next();
-      if(i==0)
-      {
-        tmp_box = AcisQueryEngine::instance()->bounding_box( (BODY*)tmp_wire);
-        outermost_wire = tmp_wire;
-        tmp_cbox = AcisQueryEngine::bounding_box( tmp_box );
-        longest_diagonal = tmp_cbox.diagonal().length();
-      }
-      else
-      {
-        tmp_box = AcisQueryEngine::instance()->bounding_box( (BODY*)tmp_wire);
-        tmp_cbox = AcisQueryEngine::bounding_box( tmp_box );
+      for(i=0; i<wire_BODYs.count(); i++ )
+	{
+	  SPAbox tmp_box;
+	  CubitBox tmp_cbox;
+	  ENTITY *tmp_wire = wire_BODYs.next();
+	  if(i==0)
+	    {
+	      tmp_box = AcisQueryEngine::instance()->bounding_box( (BODY*)tmp_wire);
+	      outermost_wire = tmp_wire;
+	      tmp_cbox = AcisQueryEngine::bounding_box( tmp_box );
+	      longest_diagonal = tmp_cbox.diagonal().length();
+	    }
+	  else
+	    {
+	      tmp_box = AcisQueryEngine::instance()->bounding_box( (BODY*)tmp_wire);
+	      tmp_cbox = AcisQueryEngine::bounding_box( tmp_box );
 
-        if( tmp_cbox.diagonal().length() > longest_diagonal )
-        {
-          longest_diagonal = tmp_cbox.diagonal().length();
-          outermost_wire = tmp_wire;
-        }
-      }
-    }
+	      if( tmp_cbox.diagonal().length() > longest_diagonal )
+		{
+		  longest_diagonal = tmp_cbox.diagonal().length();
+		  outermost_wire = tmp_wire;
+		}
+	    }
+	}
 
-    //now that we found the outermost, put it first in the list
-    wire_BODYs.clear();
-    tmp_wire_BODYs.remove( outermost_wire );
-    wire_BODYs.add( outermost_wire );
+      //now that we found the outermost, put it first in the list
+      wire_BODYs.clear();
+      tmp_wire_BODYs.remove( outermost_wire );
+      wire_BODYs.add( outermost_wire );
 
-    tmp_wire_BODYs.init();
-    for(i=0; i<tmp_wire_BODYs.count(); i++ )
-      wire_BODYs.add( tmp_wire_BODYs.next() );
-  }
+      tmp_wire_BODYs.init();
+      for(i=0; i<tmp_wire_BODYs.count(); i++ )
+	wire_BODYs.add( tmp_wire_BODYs.next() );
+    }
 
-    // Use the WIRE to make a FACE.
-    // Note that the call to api_cover_wires creates not
-    // only the FACE but the entire topological data
-    // structure above FACE (till BODY).
+  // Use the WIRE to make a FACE.
+  // Note that the call to api_cover_wires creates not
+  // only the FACE but the entire topological data
+  // structure above FACE (till BODY).
   ENTITY_LIST acis_FACE_list;
   if ( fit_FACE != NULL )
-  {
-    wire_BODY = static_cast<BODY*>(wire_BODYs[0]);
-    outcome result_2 = api_cover_wires ( wire_BODY,
-                                         fit_FACE->geometry()->equation(),
-                                         acis_FACE_list );
+    {
+      wire_BODY = static_cast<BODY*>(wire_BODYs[0]);
+      outcome result_2 = api_cover_wires ( wire_BODY,
+					   fit_FACE->geometry()->equation(),
+					   acis_FACE_list );
 
       // Now check to see if we covered the wire successfully
-    if ( !result_2.ok() || acis_FACE_list.count() ==  0 ||
-         wire_BODY == NULL )
-    {
-      PRINT_ERROR("Error in constructing surface on top of another"
-                  "surface, the edges must fit the surface...\n");
-      AcisQueryEngine::instance()->ACIS_API_error (result_2);
-      acis_FACE_list.clear();
-      if (wire_BODY)
-        api_delent(wire_BODY);
-      else
-          // TO DO: Delete each EDGE in EDGEs
-        void (0);
-      delete [] EDGEs;
-      return (FACE*)NULL;
+      if ( !result_2.ok() || acis_FACE_list.count() ==  0 ||
+	   wire_BODY == NULL )
+	{
+	  PRINT_ERROR("Error in constructing surface on top of another"
+		      "surface, the edges must fit the surface...\n");
+	  AcisQueryEngine::instance()->ACIS_API_error (result_2);
+	  acis_FACE_list.clear();
+	  if (wire_BODY)
+	    api_delent(wire_BODY);
+	  else
+	    // TO DO: Delete each EDGE in EDGEs
+	    void (0);
+	  delete [] EDGEs;
+	  return (FACE*)NULL;
+	}
     }
-  }
   else
-  {
-    outcome surface_creation;
-    bool valid_loops = true;
-    outcome loop_check;
-
-    //can create non-planar surfs with one wire
-    if( wire_BODYs.count() == 1 )
     {
-      wire_BODY = static_cast<BODY*>(wire_BODYs[0]);
-      surface_creation = api_cover_wires ( wire_BODY,
-                                           *(surface*)NULL_REF,
-                                           acis_FACE_list );
-    }
-    else
-    {
-      wire_BODY = NULL;
-      surface_creation = api_cover_wire_loops( wire_BODYs,
-                                               wire_BODY);
-      //check all nested in largest
-      //check doubly nested
-      api_get_faces( wire_BODY, acis_FACE_list);
-      loop_check = api_check_face_loops( static_cast<FACE*>(acis_FACE_list[0]) );
-      if( !loop_check.ok() )
-        valid_loops = false;
-    }
+      outcome surface_creation;
+      bool valid_loops = true;
+      outcome loop_check;
 
+      //can create non-planar surfs with one wire
+      if( wire_BODYs.count() == 1 )
+	{
+	  wire_BODY = static_cast<BODY*>(wire_BODYs[0]);
+	  surface_creation = api_cover_wires ( wire_BODY,
+					       *(surface*)NULL_REF,
+					       acis_FACE_list );
+	}
+      else
+	{
+	  wire_BODY = NULL;
+	  surface_creation = api_cover_wire_loops( wire_BODYs,
+						   wire_BODY);
+	  //check all nested in largest
+	  //check doubly nested
+	  api_get_faces( wire_BODY, acis_FACE_list);
+	  loop_check = api_check_face_loops( static_cast<FACE*>(acis_FACE_list[0]) );
+	  if( !loop_check.ok() )
+	    valid_loops = false;
+	}
 
-    if ( !surface_creation.ok() || wire_BODY == NULL ||
-         !valid_loops || acis_FACE_list.count() != 1 )
-    {
-      PRINT_ERROR("In AcisGeometryEngine::make_FACE\n"
-                  "       problem covering wires.\n\n");
-      if( !surface_creation.ok() )
-        AcisQueryEngine::instance()->ACIS_API_error (surface_creation);
-      if( !valid_loops )
-        AcisQueryEngine::instance()->ACIS_API_error( loop_check );
 
+      if ( !surface_creation.ok() || wire_BODY == NULL ||
+	   !valid_loops || acis_FACE_list.count() != 1 )
+	{
+	  PRINT_ERROR("In AcisGeometryEngine::make_FACE\n"
+		      "       problem covering wires.\n\n");
+	  if( !surface_creation.ok() )
+	    AcisQueryEngine::instance()->ACIS_API_error (surface_creation);
+	  if( !valid_loops )
+	    AcisQueryEngine::instance()->ACIS_API_error( loop_check );
+
+	  acis_FACE_list.clear();
+	  if (wire_BODY)
+	    api_delent(wire_BODY);
+	  else
+	    {
+	      // TO DO: delete each EDGE in EDGEs
+	      void(0);
+
+	      wire_BODYs.init();
+	      ENTITY *ent_to_del;
+	      while( (ent_to_del = wire_BODYs.next())!=NULL )
+		api_delent( ent_to_del );
+	    }
+	  delete [] EDGEs;
+	  return (FACE *)NULL;
+	}
+    }
+  if (acis_FACE_list.count() != 1)
+    {
+      PRINT_ERROR("ACIS api_cover_wires function created "
+		  "more than one FACE.\n"
+		  "       At this time, we cannot deal with this.\n");
       acis_FACE_list.clear();
       if (wire_BODY)
-        api_delent(wire_BODY);
+	api_delent(wire_BODY);
       else
-      {
-          // TO DO: delete each EDGE in EDGEs
-        void(0);
-
-        wire_BODYs.init();
-        ENTITY *ent_to_del;
-        while( (ent_to_del = wire_BODYs.next())!=NULL )
-          api_delent( ent_to_del );
-      }
+        // TO DO: delete each EDGE in EDGEs
+	void(0);
       delete [] EDGEs;
       return (FACE *)NULL;
     }
-  }
-  if (acis_FACE_list.count() != 1)
-  {
-    PRINT_ERROR("ACIS api_cover_wires function created "
-                "more than one FACE.\n"
-                "       At this time, we cannot deal with this.\n");
-    acis_FACE_list.clear();
-    if (wire_BODY)
-      api_delent(wire_BODY);
-    else
-        // TO DO: delete each EDGE in EDGEs
-      void(0);
-    delete [] EDGEs;
-    return (FACE *)NULL;
-  }
 
-    //make this a 2d body.
+  //make this a 2d body.
   outcome result_2 = api_body_to_2d( wire_BODY );
   if ( !result_2.ok() )
-  {
-    PRINT_ERROR("In AcisGeometryEngine::make_FACE\n"
-                "       ACIS api_body_to_2d function failed.\n\n");
-    AcisQueryEngine::instance()->ACIS_API_error (result_2);
-    acis_FACE_list.clear();
-    if (wire_BODY)
-      api_delent(wire_BODY);
-    else
+    {
+      PRINT_ERROR("In AcisGeometryEngine::make_FACE\n"
+		  "       ACIS api_body_to_2d function failed.\n\n");
+      AcisQueryEngine::instance()->ACIS_API_error (result_2);
+      acis_FACE_list.clear();
+      if (wire_BODY)
+	api_delent(wire_BODY);
+      else
         // TO DO: delete each EDGE in EDGEs
-      void(0);
-    delete [] EDGEs;
-    return (FACE *)NULL;
-  }
+	void(0);
+      delete [] EDGEs;
+      return (FACE *)NULL;
+    }
 
   FACE_ptr = (FACE*) acis_FACE_list[0];
   if ( FACE_ptr == NULL || FACE_ptr->geometry() == NULL )
-  {
-    PRINT_ERROR("In AcisGeometryEngine::make_FACE\n"
-                "FACE or FACE's geometry was NULL.\n");
-    acis_FACE_list.clear();
-    if (wire_BODY)
-      api_delent(wire_BODY);
-    else
+    {
+      PRINT_ERROR("In AcisGeometryEngine::make_FACE\n"
+		  "FACE or FACE's geometry was NULL.\n");
+      acis_FACE_list.clear();
+      if (wire_BODY)
+	api_delent(wire_BODY);
+      else
         // TO DO: delete each EDGE in EDGEs
-      void(0);
-    delete [] EDGEs;
-    return (FACE*)NULL;
-  }
+	void(0);
+      delete [] EDGEs;
+      return (FACE*)NULL;
+    }
   acis_FACE_list.clear();
   if ( !result.ok() )
-  {
-    if (wire_BODY)
-      api_delent(wire_BODY);
-    else
+    {
+      if (wire_BODY)
+	api_delent(wire_BODY);
+      else
         // TO DO: delete each EDGE in EDGEs
-      void(0);
-    delete [] EDGEs;
-    return (FACE*)NULL;
-  }
+	void(0);
+      delete [] EDGEs;
+      return (FACE*)NULL;
+    }
 
-    // This will reactivate all the RefEntities that need to be kept.
+  // This will reactivate all the RefEntities that need to be kept.
   mark_owners_deactivated_flag(FACE_ptr, CUBIT_FALSE, CUBIT_TRUE);
 
-    // Where coincident vertices were merged by ACIS,
-    // make sure the lower ID is used.
+  // Where coincident vertices were merged by ACIS,
+  // make sure the lower ID is used.
   input_EDGE_list.reset();
 
   for (i = 0; i < input_EDGE_list.size(); i++)
-  {
+    {
       // get the copy and original EDGE
-    EDGE* cur_EDGE_new = EDGEs[i];
-    EDGE* cur_EDGE_old = input_EDGE_list.get_and_step();
+      EDGE* cur_EDGE_new = EDGEs[i];
+      EDGE* cur_EDGE_old = input_EDGE_list.get_and_step();
 
       // If the original start RefVertex is deactivated,
       // see if we need to swap it with the replacement RefVertex
-    VERTEX* cur_VERT_new = cur_EDGE_new->start();
-    VERTEX* cur_VERT_old = cur_EDGE_old->start();
+      VERTEX* cur_VERT_new = cur_EDGE_new->start();
+      VERTEX* cur_VERT_old = cur_EDGE_old->start();
 
-    for (int j = 2; j--; )
-    {
-      RefVertex* ref_vert_old =
-        CAST_TO(ATTRIB_CUBIT_OWNER::get_topology_entity(cur_VERT_old),
-                RefVertex);
+      for (int j = 2; j--; )
+	{
+	  RefVertex* ref_vert_old =
+	    CAST_TO(ATTRIB_CUBIT_OWNER::get_topology_entity(cur_VERT_old),
+		    RefVertex);
 
-      AcisBridge* bridge = ATTRIB_CUBIT_OWNER::cubit_owner(cur_VERT_old);
+	  AcisBridge* bridge = ATTRIB_CUBIT_OWNER::cubit_owner(cur_VERT_old);
 
-      if (ref_vert_old && bridge_deactivated(bridge))
-      {
-        RefVertex* ref_vert_new =
-          CAST_TO(ATTRIB_CUBIT_OWNER::get_topology_entity(cur_VERT_new),
-                  RefVertex);
-        if (ref_vert_new && ref_vert_old->id() < ref_vert_new->id())
-        {
-          int id_old = ref_vert_old->id();
-          int id_new = ref_vert_new->id();
-          ref_vert_old->set_id(0);
-          ref_vert_new->set_id(id_old);
-          ref_vert_old->set_id(id_new);
-        }
-      }
+	  if (ref_vert_old && bridge_deactivated(bridge))
+	    {
+	      RefVertex* ref_vert_new =
+		CAST_TO(ATTRIB_CUBIT_OWNER::get_topology_entity(cur_VERT_new),
+			RefVertex);
+	      if (ref_vert_new && ref_vert_old->id() < ref_vert_new->id())
+		{
+		  int id_old = ref_vert_old->id();
+		  int id_new = ref_vert_new->id();
+		  ref_vert_old->set_id(0);
+		  ref_vert_new->set_id(id_old);
+		  ref_vert_old->set_id(id_new);
+		}
+	    }
 
-/*
-      PointACIS* ref_vert_old =
-        CAST_TO(ATTRIB_CUBIT_OWNER::cubit_owner(cur_VERT_old),PointACIS);
+	  /*
+	    PointACIS* ref_vert_old =
+	    CAST_TO(ATTRIB_CUBIT_OWNER::cubit_owner(cur_VERT_old),PointACIS);
 
-      if (ref_vert_old && bridge_deactivated(ref_vert_old) && ref_vert_old->owner())
-      {
-        //RefVertex* ref_vert_new =
-        //  CAST_TO(ATTRIB_CUBIT_OWNER::get_topology_entity(cur_VERT_new),
-        //          RefVertex);
-        PointACIS* ref_vert_new =
-          CAST_TO(ATTRIB_CUBIT_OWNER::cubit_owner(cur_VERT_new),PointACIS);
-        if (ref_vert_new)
-        {
-          ref_vert_old->owner()->swap_bridge(ref_vert_old,ref_vert_new,true);
-        }
-      }
-*/
-      cur_VERT_new = cur_EDGE_new->end();
-      cur_VERT_old = cur_EDGE_old->end();
+	    if (ref_vert_old && bridge_deactivated(ref_vert_old) && ref_vert_old->owner())
+	    {
+	    //RefVertex* ref_vert_new =
+	    //  CAST_TO(ATTRIB_CUBIT_OWNER::get_topology_entity(cur_VERT_new),
+	    //          RefVertex);
+	    PointACIS* ref_vert_new =
+	    CAST_TO(ATTRIB_CUBIT_OWNER::cubit_owner(cur_VERT_new),PointACIS);
+	    if (ref_vert_new)
+	    {
+	    ref_vert_old->owner()->swap_bridge(ref_vert_old,ref_vert_new,true);
+	    }
+	    }
+	  */
+	  cur_VERT_new = cur_EDGE_new->end();
+	  cur_VERT_old = cur_EDGE_old->end();
+	}
     }
-  }
 
-    // Get rid of the stuff we aren't using.  This will delete the RefVertices
-    // that correspond to the VERTEXes deleted by ACIS in api_make_ewire.
-    // We also delete the original ACIS EDGEs since they are no longer
-    // being used.
+  // Get rid of the stuff we aren't using.  This will delete the RefVertices
+  // that correspond to the VERTEXes deleted by ACIS in api_make_ewire.
+  // We also delete the original ACIS EDGEs since they are no longer
+  // being used.
   for (i = input_EDGE_list.size(); i--; )
-  {
-    AcisQueryEngine::instance()->unhook_ENTITY_from_VGI(input_EDGE_list.get());
-    api_delent(input_EDGE_list.get_and_step());
-  }
+    {
+      AcisQueryEngine::instance()->unhook_ENTITY_from_VGI(input_EDGE_list.get());
+      api_delent(input_EDGE_list.get_and_step());
+    }
   //GeometryQueryTool::instance()->cleanout_deactivated_geometry();
   cleanout_deactivated_geometry();
   delete [] EDGEs;
@@ -5399,35 +4863,35 @@
 // Creation Date : 03-27-97
 //-------------------------------------------------------------------------
 EDGE* AcisModifyEngine::make_straight_EDGE( VERTEX* start_VERTEX,
-                                              VERTEX* end_VERTEX ) const
+					    VERTEX* end_VERTEX ) const
 {
-     // Make a straight EDGE
-   EDGE* EDGE_ptr = NULL;
-   outcome result = api_mk_ed_line ( start_VERTEX->geometry()->coords(),
-                             end_VERTEX->geometry()->coords(),
-                             EDGE_ptr );
-   if (!result.ok() || EDGE_ptr == NULL)
-   {
+  // Make a straight EDGE
+  EDGE* EDGE_ptr = NULL;
+  outcome result = api_mk_ed_line ( start_VERTEX->geometry()->coords(),
+				    end_VERTEX->geometry()->coords(),
+				    EDGE_ptr );
+  if (!result.ok() || EDGE_ptr == NULL)
+    {
       PRINT_ERROR("In AcisModifyEngine::make_straight_EDGE\n"
                   "       ACIS api_mk_ed_line function failed.\n\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
       return (EDGE *)NULL;
-   }
+    }
 
-   else
-   {
-        // Switch the end VERTEXes of the new EDGE to the input VERTEXes. Keep
-        // in mind that the back links (from the VERTEX back to the EDGE)
-        // need to be modified as well.
+  else
+    {
+      // Switch the end VERTEXes of the new EDGE to the input VERTEXes. Keep
+      // in mind that the back links (from the VERTEX back to the EDGE)
+      // need to be modified as well.
       EDGE_ptr->set_start(start_VERTEX);
       start_VERTEX->add_edge(EDGE_ptr);
 
       EDGE_ptr->set_end(end_VERTEX);
       end_VERTEX->add_edge(EDGE_ptr);
 
-        // Return the newly created EDGE
+      // Return the newly created EDGE
       return EDGE_ptr;
-   }
+    }
 }
 
 //-------------------------------------------------------------------------
@@ -5441,87 +4905,87 @@
 // Creation Date : 03-27-97
 //-------------------------------------------------------------------------
 EDGE* AcisModifyEngine::make_parabolic_EDGE(
-    VERTEX* from,
-    VERTEX* to,
-    SPAposition* peak_ptr ) const
+					    VERTEX* from,
+					    VERTEX* to,
+					    SPAposition* peak_ptr ) const
 {
-   if ( peak_ptr == NULL )
-   {
+  if ( peak_ptr == NULL )
+    {
       PRINT_ERROR("In AcisModifyEngine::make_parabolic_EDGE\n"
                   "       Input parabola tip is invalid (NULL pointer).\n");
       assert ( peak_ptr != NULL );
       return (EDGE *)NULL;
-   }
+    }
 
-     // Convert positions to CubitVectors (legacy code!!!)
-   SPAposition from_position = from->geometry()->coords();
-   SPAposition to_position = to->geometry()->coords();
+  // Convert positions to CubitVectors (legacy code!!!)
+  SPAposition from_position = from->geometry()->coords();
+  SPAposition to_position = to->geometry()->coords();
 
-   CubitVector from_vec( from_position.x(),
-                         from_position.y(),
-                         from_position.z() );
-   CubitVector to_vec( to_position.x(),
-                       to_position.y(),
-                       to_position.z() );
-   CubitVector peak_vec( peak_ptr->x(),
-                         peak_ptr->y(),
-                         peak_ptr->z() );
+  CubitVector from_vec( from_position.x(),
+			from_position.y(),
+			from_position.z() );
+  CubitVector to_vec( to_position.x(),
+		      to_position.y(),
+		      to_position.z() );
+  CubitVector peak_vec( peak_ptr->x(),
+			peak_ptr->y(),
+			peak_ptr->z() );
 
-   CubitVector width_vec, midpoint_vec, height_vec;
-   width_vec = to_vec - from_vec;
-   midpoint_vec = (from_vec + to_vec)/2.0;
-   height_vec = peak_vec - midpoint_vec;
+  CubitVector width_vec, midpoint_vec, height_vec;
+  width_vec = to_vec - from_vec;
+  midpoint_vec = (from_vec + to_vec)/2.0;
+  height_vec = peak_vec - midpoint_vec;
 
-     // rho = 0.5 is a (spline) parabola -
-     // see ACIS Geometric Modeler API Reference 3-138 ver. 1.7
-   double rho = 0.5;
-   EDGE* EDGE_ptr = NULL;
-     // Find the focus of this parabola.
-     // Since for a parabola with its peak at the origin, y = (1/(4*a))*x^2,
-     // and since we have restricted this parabola to be symmetric (per the FastQ
-     // method, see the FastQ file getwt.f), we can use the following relationship
-     // to determine "a", the distance the focus lies from the peak on the line
-     // formed by the peak and the midpoint of the start and end points
-   //double a = width_vec.length_squared()/(16. * height_vec.length());
-   CubitVector height_vec_unit = height_vec;
-   height_vec_unit.normalize();
+  // rho = 0.5 is a (spline) parabola -
+  // see ACIS Geometric Modeler API Reference 3-138 ver. 1.7
+  double rho = 0.5;
+  EDGE* EDGE_ptr = NULL;
+  // Find the focus of this parabola.
+  // Since for a parabola with its peak at the origin, y = (1/(4*a))*x^2,
+  // and since we have restricted this parabola to be symmetric (per the FastQ
+  // method, see the FastQ file getwt.f), we can use the following relationship
+  // to determine "a", the distance the focus lies from the peak on the line
+  // formed by the peak and the midpoint of the start and end points
+  //double a = width_vec.length_squared()/(16. * height_vec.length());
+  CubitVector height_vec_unit = height_vec;
+  height_vec_unit.normalize();
 
-     // See Geometric Modeling by M. E. Mortenson, pg. 82, Fig 2.28 c, we need p2
-     // as the center_vec from which to get the tangents
-     // Our approach assumes that midpoint_vec, peak, and center_vec will all lie
-     // on the same line, a valid assumption with the restrictions from FastQ
-   CubitVector vec_E_C = peak_vec - midpoint_vec;
-   CubitVector center_vec = ((2./rho)*vec_E_C + to_vec + from_vec)/2.;
+  // See Geometric Modeling by M. E. Mortenson, pg. 82, Fig 2.28 c, we need p2
+  // as the center_vec from which to get the tangents
+  // Our approach assumes that midpoint_vec, peak, and center_vec will all lie
+  // on the same line, a valid assumption with the restrictions from FastQ
+  CubitVector vec_E_C = peak_vec - midpoint_vec;
+  CubitVector center_vec = ((2./rho)*vec_E_C + to_vec + from_vec)/2.;
 
-   SPAvector start_tan = SPAvector ( center_vec.x() - from_vec.x(),
-                               center_vec.y() - from_vec.y(),
-                               center_vec.z() - from_vec.z() );
+  SPAvector start_tan = SPAvector ( center_vec.x() - from_vec.x(),
+				    center_vec.y() - from_vec.y(),
+				    center_vec.z() - from_vec.z() );
 
-   SPAvector   end_tan = SPAvector ( center_vec.x() - to_vec.x(),
-                               center_vec.y() - to_vec.y(),
-                               center_vec.z() - to_vec.z() );
+  SPAvector   end_tan = SPAvector ( center_vec.x() - to_vec.x(),
+				    center_vec.y() - to_vec.y(),
+				    center_vec.z() - to_vec.z() );
 
-   SPAunit_vector start_tan_unit = normalise( start_tan );
-   SPAunit_vector   end_tan_unit = normalise( end_tan );
+  SPAunit_vector start_tan_unit = normalise( start_tan );
+  SPAunit_vector   end_tan_unit = normalise( end_tan );
 
-   outcome result = api_mk_ed_conic ( from_position,
-                                      start_tan_unit,
-                                      to_position,
-                                      end_tan_unit,
-                                      rho,
-                                      EDGE_ptr );
-   if (!result.ok() || EDGE_ptr == NULL)
-   {
+  outcome result = api_mk_ed_conic ( from_position,
+				     start_tan_unit,
+				     to_position,
+				     end_tan_unit,
+				     rho,
+				     EDGE_ptr );
+  if (!result.ok() || EDGE_ptr == NULL)
+    {
       PRINT_ERROR("ACIS api_mk_ed_conic function failed\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
       return (EDGE *)NULL;
-   }
+    }
 
-   else
-   {
-        // Switch the end VERTEXes of the EDGE to the input VERTEXes. Keep
-        // in mind that the back links (from the VERTEX back to the EDGE)
-        // need to be modified as well.
+  else
+    {
+      // Switch the end VERTEXes of the EDGE to the input VERTEXes. Keep
+      // in mind that the back links (from the VERTEX back to the EDGE)
+      // need to be modified as well.
       EDGE_ptr->set_start ( from );
       from->add_edge( EDGE_ptr );
 
@@ -5529,7 +4993,7 @@
       to->add_edge( EDGE_ptr );
 
       return EDGE_ptr;
-   }
+    }
 }
 
 //-------------------------------------------------------------------------
@@ -5549,94 +5013,94 @@
 //-------------------------------------------------------------------------
 
 EDGE* AcisModifyEngine::make_elliptical_EDGE( VERTEX* from,
-                                                VERTEX* to,
-                                                SPAposition* ctr_ptr,
-                                                bool sense ) const
+					      VERTEX* to,
+					      SPAposition* ctr_ptr,
+					      bool sense ) const
 {
-   if ( ctr_ptr == NULL )
-   {
+  if ( ctr_ptr == NULL )
+    {
       PRINT_ERROR("In AcisModifyEngine::make_elliptical_EDGE\n"
                   "       Input ellipse center is invalid (NULL pointer).\n");
       return (EDGE *)NULL;
-   }
+    }
 
-     // Convert positions to CubitVectors (legacy code!!!)
-   SPAposition from_position = from->geometry()->coords();
-   SPAposition to_position = to->geometry()->coords();
+  // Convert positions to CubitVectors (legacy code!!!)
+  SPAposition from_position = from->geometry()->coords();
+  SPAposition to_position = to->geometry()->coords();
 
-   CubitVector from_vec( from_position.x(),
-                         from_position.y(),
-                         from_position.z() );
-   CubitVector to_vec( to_position.x(),
-                       to_position.y(),
-                       to_position.z() );
-   CubitVector ctr_vec( ctr_ptr->x(),
-                        ctr_ptr->y(),
-                        ctr_ptr->z() );
+  CubitVector from_vec( from_position.x(),
+			from_position.y(),
+			from_position.z() );
+  CubitVector to_vec( to_position.x(),
+		      to_position.y(),
+		      to_position.z() );
+  CubitVector ctr_vec( ctr_ptr->x(),
+		       ctr_ptr->y(),
+		       ctr_ptr->z() );
 
-     // delta_vee_1 gives major axis of ellipse (circle)
-   SPAvector delta_vee_1 = from_position - *ctr_ptr;
-   SPAvector delta_vee_2 = to_position   - *ctr_ptr;
-   if ( delta_vee_1.len() < CUBIT_RESABS*.000001 )
-   {
-     PRINT_ERROR("Zero length distance to center point.\n");
-     return (EDGE*) NULL;
-   }
-   if ( delta_vee_2.len() < CUBIT_RESABS*.000001 )
-   {
-     PRINT_ERROR("Zero length distance to center point.\n");
-     return (EDGE*) NULL;
-   }
-   SPAunit_vector normal = normalise( delta_vee_1 * delta_vee_2 );
-     // Since this is a normalised SPAvector, its length should be 1.0.
-     // If it is not, then the delta_vee_1 and delta_vee_2
-     // vectors are collinear and we have to manually set the normal
-     // SPAvector. Assume that this is being done in FASTQ and set the normal
-     // to be the Z axis.
-   if (normal.len() == 0.0)
-   {
-        // The start and end vertex are in the same SPAposition, or they are
-        // 180 degrees opposed.
+  // delta_vee_1 gives major axis of ellipse (circle)
+  SPAvector delta_vee_1 = from_position - *ctr_ptr;
+  SPAvector delta_vee_2 = to_position   - *ctr_ptr;
+  if ( delta_vee_1.len() < CUBIT_RESABS*.000001 )
+    {
+      PRINT_ERROR("Zero length distance to center point.\n");
+      return (EDGE*) NULL;
+    }
+  if ( delta_vee_2.len() < CUBIT_RESABS*.000001 )
+    {
+      PRINT_ERROR("Zero length distance to center point.\n");
+      return (EDGE*) NULL;
+    }
+  SPAunit_vector normal = normalise( delta_vee_1 * delta_vee_2 );
+  // Since this is a normalised SPAvector, its length should be 1.0.
+  // If it is not, then the delta_vee_1 and delta_vee_2
+  // vectors are collinear and we have to manually set the normal
+  // SPAvector. Assume that this is being done in FASTQ and set the normal
+  // to be the Z axis.
+  if (normal.len() == 0.0)
+    {
+      // The start and end vertex are in the same SPAposition, or they are
+      // 180 degrees opposed.
       normal.set_x(0.0);
       normal.set_y(0.0);
       normal.set_z(1.0);
-   }
-   double radius_ratio = delta_vee_2.len() / delta_vee_1.len();
+    }
+  double radius_ratio = delta_vee_2.len() / delta_vee_1.len();
 
-   EDGE* EDGE_ptr = NULL;
+  EDGE* EDGE_ptr = NULL;
 
-     // if radius_ratio is not 1.0, then this code probably won't produce
-     // the intended geometry since delta_vee_1 does not necessarily
-     // represent the major axis of an ellipse unless it is circular
-   outcome result;
-   if ( radius_ratio <= 0.999 || radius_ratio > 1.001 )
-   {
+  // if radius_ratio is not 1.0, then this code probably won't produce
+  // the intended geometry since delta_vee_1 does not necessarily
+  // represent the major axis of an ellipse unless it is circular
+  outcome result;
+  if ( radius_ratio <= 0.999 || radius_ratio > 1.001 )
+    {
       EDGE_ptr = make_spiral_EDGE(from, to, ctr_ptr, sense);
-   }
-   else
-   {
+    }
+  else
+    {
       PRINT_DEBUG_5( "radius ratio = %f\n", radius_ratio);
 
-        // Calculate the included angle between from and to on the
-        // circular ellipse
+      // Calculate the included angle between from and to on the
+      // circular ellipse
       CubitVector cubit_normal (normal.x(), normal.y(), normal.z());
       CubitVector cubit_from = from_vec - ctr_vec;
       CubitVector cubit_to = to_vec - ctr_vec;
       double incl_angle = cubit_normal.vector_angle ( cubit_from,
                                                       cubit_to );
       if (incl_angle == 0.0)
-          incl_angle = 2.0 * CUBIT_PI;
+	incl_angle = 2.0 * CUBIT_PI;
 
       double start_angle = 0.0;
       double end_angle = incl_angle;
 
       if (radius_ratio > 1.0)
-      {
-         delta_vee_1 = delta_vee_2;
-         radius_ratio = 1.0 / radius_ratio;
-         start_angle = -incl_angle;
-         end_angle = 0.0;
-      }
+	{
+	  delta_vee_1 = delta_vee_2;
+	  radius_ratio = 1.0 / radius_ratio;
+	  start_angle = -incl_angle;
+	  end_angle = 0.0;
+	}
 
 
       result = api_mk_ed_ellipse ( *ctr_ptr,
@@ -5646,26 +5110,26 @@
                                    start_angle,
                                    end_angle,
                                    EDGE_ptr );
-   }
-   if (!result.ok() || EDGE_ptr == NULL)
-   {
+    }
+  if (!result.ok() || EDGE_ptr == NULL)
+    {
       PRINT_ERROR("In AGE:make_elliptical_EDGE.\n"
                   "ACIS api_mk_ed_ellipse function failed\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
 
       if ( from == NULL || to == NULL )
-      {
-         PRINT_ERROR("In AGE:make_elliptical_EDGE.\n"
-                     "       Input VERTEX is NULL\n");
-      }
+	{
+	  PRINT_ERROR("In AGE:make_elliptical_EDGE.\n"
+		      "       Input VERTEX is NULL\n");
+	}
       return (EDGE *)NULL;
-   }
+    }
 
-   else
-   {
-        // Switch the end VERTEXes of the EDGE to the input VERTEXes. Keep
-        // in mind that the back links (from the VERTEX back to the EDGE)
-        // need to be modified as well.
+  else
+    {
+      // Switch the end VERTEXes of the EDGE to the input VERTEXes. Keep
+      // in mind that the back links (from the VERTEX back to the EDGE)
+      // need to be modified as well.
       EDGE_ptr->set_start ( from );
       from->add_edge( EDGE_ptr );
 
@@ -5673,7 +5137,7 @@
       to->add_edge( EDGE_ptr );
 
       return EDGE_ptr ;
-   }
+    }
 }
 
 //-------------------------------------------------------------------------
@@ -5686,30 +5150,30 @@
 // Creation Date : 12/10/99
 //-------------------------------------------------------------------------
 EDGE* AcisModifyEngine::make_circular_EDGE( VERTEX* from,
-                                              VERTEX* to,
-                                              SPAposition* third_pt ) const
+					    VERTEX* to,
+					    SPAposition* third_pt ) const
 {
   assert (from != NULL);
   assert (to != NULL);
   assert (third_pt != NULL);
 
-    // get the 3 points
+  // get the 3 points
   SPAposition start_pt = from->geometry()->coords();
   SPAposition end_pt = to->geometry()->coords();
 
-    // create the arc
+  // create the arc
   EDGE *e_arc;
   outcome result = api_curve_arc_3pt(start_pt, *third_pt, end_pt,
                                      FALSE, e_arc);
   if (!result.ok())
-  {
-    AcisQueryEngine::instance()->ACIS_API_error(result);
-    return NULL;
-  }
+    {
+      AcisQueryEngine::instance()->ACIS_API_error(result);
+      return NULL;
+    }
 
-    // Switch the end VERTEXes of the EDGE to the input VERTEXes. Keep
-    // in mind that the back links (from the VERTEX back to the EDGE)
-    // need to be modified as well.
+  // Switch the end VERTEXes of the EDGE to the input VERTEXes. Keep
+  // in mind that the back links (from the VERTEX back to the EDGE)
+  // need to be modified as well.
   e_arc->set_start(from);
   from->add_edge(e_arc);
   e_arc->set_end (to);
@@ -5732,91 +5196,91 @@
 //-------------------------------------------------------------------------
 
 EDGE* AcisModifyEngine::make_spiral_EDGE( VERTEX* from,
-                                            VERTEX* to,
-                                            SPAposition* ctr_ptr,
-                                            bool sense) const
+					  VERTEX* to,
+					  SPAposition* ctr_ptr,
+					  bool sense) const
 {
-   if ( ctr_ptr == NULL )
-   {
+  if ( ctr_ptr == NULL )
+    {
       PRINT_ERROR("In AcisModifyEngine::make_spiral_EDGE\n"
                   "       Input spiral center is invalid (NULL pointer).\n");
       return (EDGE *)NULL;
-   }
+    }
 
-     // Convert positions to CubitVectors (legacy code!!!)
-   SPAposition from_position = from->geometry()->coords();
-   SPAposition to_position = to->geometry()->coords();
+  // Convert positions to CubitVectors (legacy code!!!)
+  SPAposition from_position = from->geometry()->coords();
+  SPAposition to_position = to->geometry()->coords();
 
-     // NOTE: This function assumes that vertices from, to, and ctr lie in the
-     // X-Y plane.
-   if (from_position.z() != to_position.z() ||
-       from_position.z() != ctr_ptr->z()) {
-      PRINT_ERROR("In AcisModifyEngine::make_spiral_EDGE\n"
-                  "       Points must be in the constant-z plane.\n");
-      return (EDGE *)NULL;
-   }
+  // NOTE: This function assumes that vertices from, to, and ctr lie in the
+  // X-Y plane.
+  if (from_position.z() != to_position.z() ||
+      from_position.z() != ctr_ptr->z()) {
+    PRINT_ERROR("In AcisModifyEngine::make_spiral_EDGE\n"
+		"       Points must be in the constant-z plane.\n");
+    return (EDGE *)NULL;
+  }
 
-   CubitVector from_vec( from_position.x(),
-                         from_position.y(),
-                         from_position.z() );
-   CubitVector to_vec( to_position.x(),
-                       to_position.y(),
-                       to_position.z() );
-   //CubitVector ctr_vec( ctr_ptr->x(),
-   //                     ctr_ptr->y(),
-   //                     ctr_ptr->z() );
+  CubitVector from_vec( from_position.x(),
+			from_position.y(),
+			from_position.z() );
+  CubitVector to_vec( to_position.x(),
+		      to_position.y(),
+		      to_position.z() );
+  //CubitVector ctr_vec( ctr_ptr->x(),
+  //                     ctr_ptr->y(),
+  //                     ctr_ptr->z() );
 
-   SPAvector delta_vee_1 = from_position - *ctr_ptr;
-   SPAvector delta_vee_2 = to_position - *ctr_ptr;
+  SPAvector delta_vee_1 = from_position - *ctr_ptr;
+  SPAvector delta_vee_2 = to_position - *ctr_ptr;
 
-   CubitVector side1( delta_vee_1.x(),
-                      delta_vee_1.y(),
-                      delta_vee_1.z()) ;
+  CubitVector side1( delta_vee_1.x(),
+		     delta_vee_1.y(),
+		     delta_vee_1.z()) ;
 
-   CubitVector side2( delta_vee_2.x(),
-                      delta_vee_2.y(),
-                      delta_vee_2.z()) ;
+  CubitVector side2( delta_vee_2.x(),
+		     delta_vee_2.y(),
+		     delta_vee_2.z()) ;
 
-   CubitVector center( ctr_ptr->x(),
-                       ctr_ptr->y(),
-                       ctr_ptr->z()) ;
+  CubitVector center( ctr_ptr->x(),
+		      ctr_ptr->y(),
+		      ctr_ptr->z()) ;
 
-     // Calcualate parameters for the spiral. See FASTQ source, arcpar.f
-   double radius1 = side1.length();
-   double radius2 = side2.length();
+  // Calcualate parameters for the spiral. See FASTQ source, arcpar.f
+  double radius1 = side1.length();
+  double radius2 = side2.length();
 
-   double theta1 = atan2(side1.y(), side1.x());
-   double theta2 = atan2(side2.y(), side2.x());
-   if (sense && theta2 <= theta1)
-   {
+  double theta1 = atan2(side1.y(), side1.x());
+  double theta2 = atan2(side2.y(), side2.x());
+  if (sense && theta2 <= theta1)
+    {
       theta2 += 2.0 * CUBIT_PI;
-   }
-   if (!sense && theta1 <= theta2)
-   {
+    }
+  if (!sense && theta1 <= theta2)
+    {
       theta1 += 2.0 * CUBIT_PI;
-   }
+    }
 
-   double total_angle = theta2 - theta1;
+  double total_angle = theta2 - theta1;
 
-   double xk = log(radius2 / radius1) / (theta2 - theta1);
-   double xa = radius2 / exp(xk * theta2);
+  double xk = log(radius2 / radius1) / (theta2 - theta1);
+  double xa = radius2 / exp(xk * theta2);
 
-     // Calculate points at 2.0 degree intervals
-   int number_points = int(total_angle * 180.0 / CUBIT_PI / 2.0 + 0.5);
-   number_points = number_points < 20 ? 20 : number_points;
+  // Calculate points at 2.0 degree intervals
+  int number_points = int(total_angle * 180.0 / CUBIT_PI / 2.0 + 0.5);
+  number_points = number_points < 20 ? 20 : number_points;
 
-   SPAposition *pos_array = new SPAposition [number_points];
+  SPAposition *pos_array = new SPAposition [number_points];
 
-   pos_array[0].set_x(from_vec.x());
-   pos_array[0].set_y(from_vec.y());
-   pos_array[0].set_z(from_vec.z());
+  pos_array[0].set_x(from_vec.x());
+  pos_array[0].set_y(from_vec.y());
+  pos_array[0].set_z(from_vec.z());
 
-   pos_array[number_points - 1].set_x(to_vec.x());
-   pos_array[number_points - 1].set_y(to_vec.y());
-   pos_array[number_points - 1].set_z(to_vec.z());
+  pos_array[number_points - 1].set_x(to_vec.x());
+  pos_array[number_points - 1].set_y(to_vec.y());
+  pos_array[number_points - 1].set_z(to_vec.z());
 
-   for (int i=1; i < number_points-1; i++)
-   {
+  for (int i=1; i < number_points-1; i++)
+    {
       double theta = theta1 + total_angle * ((double)i/(double)number_points);
       double radius = xa * exp(xk * theta);
       double x = center.x() + radius * cos(theta);
@@ -5825,49 +5289,49 @@
       pos_array[i].set_x(x);
       pos_array[i].set_y(y);
       pos_array[i].set_z(to_vec.z());
-   }
+    }
 
-     // calculate default tangent directions using up to three points
-     // at the ends of the point array.
-   SPAunit_vector uv1(0, 0, 0);
-   SPAunit_vector uv2(0, 0, 0);
+  // calculate default tangent directions using up to three points
+  // at the ends of the point array.
+  SPAunit_vector uv1(0, 0, 0);
+  SPAunit_vector uv2(0, 0, 0);
 
-   EDGE* EDGE_ptr = NULL;
-   outcome result;
+  EDGE* EDGE_ptr = NULL;
+  outcome result;
 
-     // fifth SPAparameter 0.0 -> interpolate the sequence of points.
-   result = api_mk_ed_cubic(number_points, pos_array,
-                            uv1, uv2, 0.0, EDGE_ptr);
+  // fifth SPAparameter 0.0 -> interpolate the sequence of points.
+  result = api_mk_ed_cubic(number_points, pos_array,
+			   uv1, uv2, 0.0, EDGE_ptr);
 
-     // Free memory
-   delete [] pos_array;
+  // Free memory
+  delete [] pos_array;
 
-   if ( !result.ok() || EDGE_ptr == NULL )
-   {
+  if ( !result.ok() || EDGE_ptr == NULL )
+    {
       PRINT_ERROR("ACIS api_mk_ed_cubic function failed\n");
       AcisQueryEngine::instance()->ACIS_API_error (result);
 
       if ( from == NULL || to == NULL )
-      {
-         PRINT_ERROR("In AGE:make_spiral_EDGE.\n"
-                     "       Input VERTEX is NULL\n");
-         return (EDGE *)NULL;
-      }
-   }
+	{
+	  PRINT_ERROR("In AGE:make_spiral_EDGE.\n"
+		      "       Input VERTEX is NULL\n");
+	  return (EDGE *)NULL;
+	}
+    }
 
-   else
-   {
-        // Switch the end VERTEXes of the EDGE to the input VERTEXes. Keep
-        // in mind that the back links (from the VERTEX back to the EDGE)
-        // need to be modified as well.
+  else
+    {
+      // Switch the end VERTEXes of the EDGE to the input VERTEXes. Keep
+      // in mind that the back links (from the VERTEX back to the EDGE)
+      // need to be modified as well.
       EDGE_ptr->set_start ( from );
       from->add_edge( EDGE_ptr );
 
       EDGE_ptr->set_end ( to );
       to->add_edge( EDGE_ptr );
-   }
+    }
 
-   return EDGE_ptr;
+  return EDGE_ptr;
 }
 //-------------------------------------------------------------------------
 // Purpose       : Create a curve on a surface.
@@ -5881,17 +5345,17 @@
 // Creation Date : 05/15/97
 //-------------------------------------------------------------------------
 EDGE* AcisModifyEngine::make_surface_EDGE( VERTEX* from_VERTEX,
-                                             VERTEX* to_VERTEX,
-                                             FACE *FACE_ptr,
-                                             const CubitVector &plane_normal,
-                                             const CubitVector *third_point) const
+					   VERTEX* to_VERTEX,
+					   FACE *FACE_ptr,
+					   const CubitVector &plane_normal,
+					   const CubitVector *third_point) const
 {
-    //Now create a cutting plane using the normal passed in.  This
-    //normal should point sort of tangential to the surface.  We
-    //want the plane to intersect the surface.
+  //Now create a cutting plane using the normal passed in.  This
+  //normal should point sort of tangential to the surface.  We
+  //want the plane to intersect the surface.
   SPAposition const plane_point = from_VERTEX->geometry()->coords();
   SPAunit_vector const normal_vector( plane_normal.x(), plane_normal.y(),
-                                   plane_normal.z() );
+				      plane_normal.z() );
   plane const new_plane( plane_point, normal_vector );
   SPAposition point_1, point_2, point_3;
   SPApar_pos const pos_1( 0, 1 );
@@ -5901,35 +5365,35 @@
   new_plane.eval( pos_2, point_2 );
   new_plane.eval( pos_3, point_3 );
 
-    // Get the size of the model so we can create an "infinite"
-    // cutting plane
+  // Get the size of the model so we can create an "infinite"
+  // cutting plane
   CubitBox cubit_super_box = GeometryQueryTool::instance()->model_bounding_box();
   SPAbox super_box = AcisQueryEngine::bounding_box(cubit_super_box);
   CubitVector vec_1( point_1.x(), point_1.y(), point_1.z() );
   CubitVector vec_2( point_2.x(), point_2.y(), point_2.z() );
   CubitVector vec_3( point_3.x(), point_3.y(), point_3.z() );
 
-    // Create the infinite plane, get a FACE
+  // Create the infinite plane, get a FACE
   BODY *sheet_body = this->create_infinite_plane_cutting_tool(
-    vec_1, vec_2, vec_3, super_box, CUBIT_TRUE );
+							      vec_1, vec_2, vec_3, super_box, CUBIT_TRUE );
   if (sheet_body == NULL ||
       sheet_body->lump() == NULL ||
       sheet_body->lump()->shell() == NULL ||
       sheet_body->lump()->shell()->first_face() == NULL ||
       sheet_body->lump()->shell()->first_face()->geometry() == NULL )
-  {
+    {
       //webcut_failed(refbody_cleanup_list, BODY_cleanup_list);
-    PRINT_ERROR("In AcisModifyEngine::make_surface_EDGE"
-                "       Cannot create infinite plane cutting tool using \n"
-                "       the give surface. \n");
-    return (EDGE*)NULL;
-  }
+      PRINT_ERROR("In AcisModifyEngine::make_surface_EDGE"
+		  "       Cannot create infinite plane cutting tool using \n"
+		  "       the give surface. \n");
+      return (EDGE*)NULL;
+    }
   FACE *FACE_1 = sheet_body->lump()->shell()->first_face();
-    // Copy the FACE
+  // Copy the FACE
   FACE *FACE_2 = make_FACE( FACE_ptr );
 
-    // Now we can create a body representing the intersection
-    // of the infinite plane and the passed in surface
+  // Now we can create a body representing the intersection
+  // of the infinite plane and the passed in surface
   EDGE* new_EDGE = NULL;
   BODY *intersect_BODY = NULL;
   LUMP *cur_LUMP = NULL;
@@ -5937,199 +5401,199 @@
   COEDGE *cur_COEDGE;
   WIRE *cur_WIRE;
 
-    // Get the intersection
+  // Get the intersection
   outcome result_1 = api_fafa_int ( FACE_1, FACE_2, intersect_BODY );
 
-    // for some reason a NULL body still returns an ok result. - KGM
+  // for some reason a NULL body still returns an ok result. - KGM
   if (intersect_BODY == NULL)
-  {
-    return (EDGE*)NULL;
-  }
+    {
+      return (EDGE*)NULL;
+    }
 
-    // Make sure it was OK, and get the appropriate entity
-    // Get a WIRE if it's there
+  // Make sure it was OK, and get the appropriate entity
+  // Get a WIRE if it's there
   if ( !result_1.ok() || intersect_BODY->wire() == NULL ||
        intersect_BODY->wire()->coedge() == NULL ||
        intersect_BODY->wire()->coedge()->edge() == NULL )
-  {
-      // If there was no WIRE, see if there is a lump
-    if ( result_1.ok() && intersect_BODY->lump() != NULL &&
-         intersect_BODY->lump()->shell() != NULL &&
-         intersect_BODY->lump()->shell()->wire() != NULL &&
-         intersect_BODY->lump()->shell()->wire()->coedge() != NULL &&
-         intersect_BODY->lump()->shell()->wire()->coedge()->edge() != NULL )
     {
-      PRINT_DEBUG_18( "Using wire from lumps.\n");
-      cur_LUMP = intersect_BODY->lump();
-      cur_WIRE = cur_LUMP->shell()->wire();
+      // If there was no WIRE, see if there is a lump
+      if ( result_1.ok() && intersect_BODY->lump() != NULL &&
+	   intersect_BODY->lump()->shell() != NULL &&
+	   intersect_BODY->lump()->shell()->wire() != NULL &&
+	   intersect_BODY->lump()->shell()->wire()->coedge() != NULL &&
+	   intersect_BODY->lump()->shell()->wire()->coedge()->edge() != NULL )
+	{
+	  PRINT_DEBUG_18( "Using wire from lumps.\n");
+	  cur_LUMP = intersect_BODY->lump();
+	  cur_WIRE = cur_LUMP->shell()->wire();
+	}
+      else
+	{
+	  PRINT_ERROR("ACIS api_fafa_int function failed\n");
+	  AcisQueryEngine::instance()->ACIS_API_error (result_1);
+	  return (EDGE*)NULL;
+	}
     }
-    else
+  else
     {
-      PRINT_ERROR("ACIS api_fafa_int function failed\n");
-      AcisQueryEngine::instance()->ACIS_API_error (result_1);
-      return (EDGE*)NULL;
+      PRINT_DEBUG_18( "Using wire straight from BODY\n");
+      cur_WIRE = intersect_BODY->wire();
     }
-  }
-  else
-  {
-    PRINT_DEBUG_18( "Using wire straight from BODY\n");
-    cur_WIRE = intersect_BODY->wire();
-  }
 
-    // Now find an EDGE that the points lie on.
-    // Start by going through each LUMP, if LUMPs are being used.
+  // Now find an EDGE that the points lie on.
+  // Start by going through each LUMP, if LUMPs are being used.
   LUMP* start_LUMP = cur_LUMP;
   CURVE *geometry = NULL;
   do
-  {
-    PRINT_DEBUG_18( "**New Lump check**\n");
+    {
+      PRINT_DEBUG_18( "**New Lump check**\n");
 
       // Now go through the wires, coedges, and edges
       // to find an edge that the points lie on
-    WIRE* start_WIRE = cur_WIRE;
-    do
-    {
-        // Get the first coedge in this wire
-      COEDGE* start_COEDGE = cur_WIRE->coedge();
-      cur_COEDGE = start_COEDGE;
-        // Check it and loop through the rest
+      WIRE* start_WIRE = cur_WIRE;
       do
-      {
-        PRINT_DEBUG_18( "  **New CoEdge check**\n");
-        cur_EDGE =  cur_COEDGE->edge();
-        geometry = cur_EDGE->geometry();
-          // See if this is close enough to
-          // the start and end points
-        if (geometry != NULL)
-        {
-          SPAposition new_point;
-            // Make sure start vertex is on curve
-          geometry->equation().point_perp(from_VERTEX->geometry()->coords(),
-                                          new_point);
-          PRINT_DEBUG_18( "\n\tNew Point 1: (%g, %g, %g)\n"
-                     "\t  From Vert: (%g, %g, %g)\n",
-                     new_point.x(),
-                     new_point.y(),
-                     new_point.z(),
-                     from_VERTEX->geometry()->coords().x(),
-                     from_VERTEX->geometry()->coords().y(),
-                     from_VERTEX->geometry()->coords().z());
-          if (AcisQueryEngine::instance()->about_spatially_equal(from_VERTEX->geometry()->coords(),
-                                          new_point, 1.0))
-          {
-              // Make sure end vertex is on curve
-            geometry->equation().point_perp(to_VERTEX->geometry()->coords(),
-                                            new_point);
-            PRINT_DEBUG_18( "\tNew Point 2: (%g, %g, %g)\n"
-                       "\t    To Vert: (%g, %g, %g) \n",
-                       new_point.x(),
-                       new_point.y(),
-                       new_point.z(),
-                       to_VERTEX->geometry()->coords().x(),
-                       to_VERTEX->geometry()->coords().y(),
-                       to_VERTEX->geometry()->coords().z());
-            if (AcisQueryEngine::instance()->about_spatially_equal(to_VERTEX->geometry()->coords(),
-                                            new_point, 1.0))
-            {
-                // You found it!!!
-              cur_WIRE = NULL;
-              start_LUMP = NULL;
-              break;
-            }
-          }
-        }
-        cur_COEDGE = cur_COEDGE->next();
-        geometry = NULL; // Make sure you indicate we haven't found geom
-      }while (cur_COEDGE != NULL && cur_COEDGE != start_COEDGE);
-        // You break out of this do-while loop when
-        //   a) You find the correct EDGE
-        //   b) There are no more COEDGEs in this WIRE
-        //   c) You loop through all of the COEDGES in this WIRE
+	{
+	  // Get the first coedge in this wire
+	  COEDGE* start_COEDGE = cur_WIRE->coedge();
+	  cur_COEDGE = start_COEDGE;
+	  // Check it and loop through the rest
+	  do
+	    {
+	      PRINT_DEBUG_18( "  **New CoEdge check**\n");
+	      cur_EDGE =  cur_COEDGE->edge();
+	      geometry = cur_EDGE->geometry();
+	      // See if this is close enough to
+	      // the start and end points
+	      if (geometry != NULL)
+		{
+		  SPAposition new_point;
+		  // Make sure start vertex is on curve
+		  geometry->equation().point_perp(from_VERTEX->geometry()->coords(),
+						  new_point);
+		  PRINT_DEBUG_18( "\n\tNew Point 1: (%g, %g, %g)\n"
+				  "\t  From Vert: (%g, %g, %g)\n",
+				  new_point.x(),
+				  new_point.y(),
+				  new_point.z(),
+				  from_VERTEX->geometry()->coords().x(),
+				  from_VERTEX->geometry()->coords().y(),
+				  from_VERTEX->geometry()->coords().z());
+		  if (AcisQueryEngine::instance()->about_spatially_equal(from_VERTEX->geometry()->coords(),
+									 new_point, 1.0))
+		    {
+		      // Make sure end vertex is on curve
+		      geometry->equation().point_perp(to_VERTEX->geometry()->coords(),
+						      new_point);
+		      PRINT_DEBUG_18( "\tNew Point 2: (%g, %g, %g)\n"
+				      "\t    To Vert: (%g, %g, %g) \n",
+				      new_point.x(),
+				      new_point.y(),
+				      new_point.z(),
+				      to_VERTEX->geometry()->coords().x(),
+				      to_VERTEX->geometry()->coords().y(),
+				      to_VERTEX->geometry()->coords().z());
+		      if (AcisQueryEngine::instance()->about_spatially_equal(to_VERTEX->geometry()->coords(),
+									     new_point, 1.0))
+			{
+			  // You found it!!!
+			  cur_WIRE = NULL;
+			  start_LUMP = NULL;
+			  break;
+			}
+		    }
+		}
+	      cur_COEDGE = cur_COEDGE->next();
+	      geometry = NULL; // Make sure you indicate we haven't found geom
+	    }while (cur_COEDGE != NULL && cur_COEDGE != start_COEDGE);
+	  // You break out of this do-while loop when
+	  //   a) You find the correct EDGE
+	  //   b) There are no more COEDGEs in this WIRE
+	  //   c) You loop through all of the COEDGES in this WIRE
 
-        // Print out some debug diagnostics
-      if (DEBUG_FLAG(18))
-      {
-        if (cur_COEDGE == NULL)
-          PRINT_INFO("Exit loop because CoEdge was NULL\n");
-        else if (cur_COEDGE == start_COEDGE)
-          PRINT_INFO("Exit loop because cur_COEDGE == start_COEDGE\n");
-        else
-          PRINT_INFO("Exit loop for Other Reason!!!\n");
-      }
+	  // Print out some debug diagnostics
+	  if (DEBUG_FLAG(18))
+	    {
+	      if (cur_COEDGE == NULL)
+		PRINT_INFO("Exit loop because CoEdge was NULL\n");
+	      else if (cur_COEDGE == start_COEDGE)
+		PRINT_INFO("Exit loop because cur_COEDGE == start_COEDGE\n");
+	      else
+		PRINT_INFO("Exit loop for Other Reason!!!\n");
+	    }
 
-        // cur_WIRE is NULL if the correct EDGE has been found
-      if (cur_WIRE)
-        cur_WIRE = cur_WIRE->next();
-    }while (cur_WIRE && cur_WIRE != start_WIRE);
+	  // cur_WIRE is NULL if the correct EDGE has been found
+	  if (cur_WIRE)
+	    cur_WIRE = cur_WIRE->next();
+	}while (cur_WIRE && cur_WIRE != start_WIRE);
       // You break out of this do-while loop when
       //   a) You find the correct EDGE
       //   b) There are no more WIREs in this WIRE list
       //   c) You loop through all the WIREs
 
       // Print out some debug diagnostics
-    if (DEBUG_FLAG(18))
-    {
-      if (cur_WIRE == NULL)
-        PRINT_DEBUG_18( "Exit loop because Wire was NULL\n");
-      else if (cur_WIRE == start_WIRE)
-        PRINT_DEBUG_18( "Exit loop because cur_WIRE == start_WIRE\n");
-      else
-        PRINT_DEBUG_18( "Exit loop for Other Reason!!!\n");
-    }
+      if (DEBUG_FLAG(18))
+	{
+	  if (cur_WIRE == NULL)
+	    PRINT_DEBUG_18( "Exit loop because Wire was NULL\n");
+	  else if (cur_WIRE == start_WIRE)
+	    PRINT_DEBUG_18( "Exit loop because cur_WIRE == start_WIRE\n");
+	  else
+	    PRINT_DEBUG_18( "Exit loop for Other Reason!!!\n");
+	}
 
       // If we are using lumps, go to the next lump
       // and get its first wire.
-    if (start_LUMP)
-    {
-      cur_LUMP = cur_LUMP->next();
-      if (cur_LUMP)
-        cur_WIRE = cur_LUMP->shell()->wire();
-    }
+      if (start_LUMP)
+	{
+	  cur_LUMP = cur_LUMP->next();
+	  if (cur_LUMP)
+	    cur_WIRE = cur_LUMP->shell()->wire();
+	}
 
-  }while (start_LUMP && cur_LUMP && start_LUMP != cur_LUMP);
-    // You break out of this do-while loop when
-    //   a) You find the correct EDGE
-    //   b) There are no more LUMPs in the BODY
-    //   c) You looped through all the LUMPs in the BODY
-    //   d) We weren't using LUMPs to start with
+    }while (start_LUMP && cur_LUMP && start_LUMP != cur_LUMP);
+  // You break out of this do-while loop when
+  //   a) You find the correct EDGE
+  //   b) There are no more LUMPs in the BODY
+  //   c) You looped through all the LUMPs in the BODY
+  //   d) We weren't using LUMPs to start with
 
-    // Print out some debug diagnostics
+  // Print out some debug diagnostics
   if (DEBUG_FLAG(18))
-  {
-    if (start_LUMP == NULL)
-      PRINT_INFO("Exit loop because start_LUMP was NULL\n");
-    else if (cur_LUMP == NULL)
-      PRINT_INFO("Exit loop because cur_LUMP == NULL\n");
-    else if (cur_LUMP == start_LUMP)
-      PRINT_INFO("Exit loop because cur_WIRE == start_WIRE\n");
-    else
-      PRINT_INFO("Exit loop for Other Reason!!!\n");
-  }
+    {
+      if (start_LUMP == NULL)
+	PRINT_INFO("Exit loop because start_LUMP was NULL\n");
+      else if (cur_LUMP == NULL)
+	PRINT_INFO("Exit loop because cur_LUMP == NULL\n");
+      else if (cur_LUMP == start_LUMP)
+	PRINT_INFO("Exit loop because cur_WIRE == start_WIRE\n");
+      else
+	PRINT_INFO("Exit loop for Other Reason!!!\n");
+    }
 
-    // Make sure you found something valid
+  // Make sure you found something valid
   if ( geometry == NULL )
-  {
-    PRINT_ERROR("ACIS failed to find geometry for new curve.\n");
-    return (EDGE*)NULL;
-  }
+    {
+      PRINT_ERROR("ACIS failed to find geometry for new curve.\n");
+      return (EDGE*)NULL;
+    }
 
   PRINT_DEBUG_18( " The EDGE coords:\n"
-             "   start: (%g, %g, %g)\n"
-             "     end: (%g, %g, %g)\n",
-             cur_EDGE->end_pos().x(),
-             cur_EDGE->end_pos().y(),
-             cur_EDGE->end_pos().z(),
-             cur_EDGE->start_pos().x(),
-             cur_EDGE->start_pos().y(),
-             cur_EDGE->start_pos().z());
+		  "   start: (%g, %g, %g)\n"
+		  "     end: (%g, %g, %g)\n",
+		  cur_EDGE->end_pos().x(),
+		  cur_EDGE->end_pos().y(),
+		  cur_EDGE->end_pos().z(),
+		  cur_EDGE->start_pos().x(),
+		  cur_EDGE->start_pos().y(),
+		  cur_EDGE->start_pos().z());
 
-    // Handle special stuff for periodic curves
+  // Handle special stuff for periodic curves
   int periodic = geometry->equation().periodic();
   double period = 0.0;
   if ( periodic )
-  {
-    period = geometry->equation().param_period();
-  }
+    {
+      period = geometry->equation().param_period();
+    }
 
   double start_param, end_param;
   start_param = cur_EDGE->start_param();
@@ -6144,32 +5608,32 @@
 
   // If periodic get the params in the range of the curve's param range.
   if(periodic)
-  {
-    // forward param range
-    if(curve_range > 0.0)
     {
-      while(v1_param < start_param - GEOMETRY_RESABS)
-        v1_param += period;
-      while(v1_param > end_param + GEOMETRY_RESABS)
-        v1_param -= period;
-      while(v2_param < start_param - GEOMETRY_RESABS)
-        v2_param += period;
-      while(v2_param > end_param + GEOMETRY_RESABS)
-        v2_param -= period;
+      // forward param range
+      if(curve_range > 0.0)
+	{
+	  while(v1_param < start_param - GEOMETRY_RESABS)
+	    v1_param += period;
+	  while(v1_param > end_param + GEOMETRY_RESABS)
+	    v1_param -= period;
+	  while(v2_param < start_param - GEOMETRY_RESABS)
+	    v2_param += period;
+	  while(v2_param > end_param + GEOMETRY_RESABS)
+	    v2_param -= period;
+	}
+      // reversed param range (will this ever happen?)
+      else
+	{
+	  while(v1_param < end_param - GEOMETRY_RESABS)
+	    v1_param += period;
+	  while(v1_param > start_param + GEOMETRY_RESABS)
+	    v1_param -= period;
+	  while(v2_param < end_param - GEOMETRY_RESABS)
+	    v2_param += period;
+	  while(v2_param > start_param + GEOMETRY_RESABS)
+	    v2_param -= period;
+	}
     }
-    // reversed param range (will this ever happen?)
-    else
-    {
-      while(v1_param < end_param - GEOMETRY_RESABS)
-        v1_param += period;
-      while(v1_param > start_param + GEOMETRY_RESABS)
-        v1_param -= period;
-      while(v2_param < end_param - GEOMETRY_RESABS)
-        v2_param += period;
-      while(v2_param > start_param + GEOMETRY_RESABS)
-        v2_param -= period;
-    }
-  }
 
   double new_param_range = v2_param-v1_param;
 
@@ -6180,34 +5644,34 @@
   if(curve_range*new_param_range < 0.0)
     sense_int = 0;  /* REVERSED */
 
-    //if we have a third point and we are periodic... use
-    //it to nail down the direction.
+  //if we have a third point and we are periodic... use
+  //it to nail down the direction.
   if ( third_point != NULL && periodic )
-  {
-    SPAposition const some_point( third_point->x(),
-                               third_point->y(),
-                               third_point->z() );
-    SPAposition closest_point;
-    geometry->equation().point_perp( some_point, closest_point );
-    double some_param = geometry->equation().param( closest_point );
-    int val1 = (curve_range > 0.0);
-    int val2 = (sense_int == 1);
-
-    // val1 will equal val2 for two cases.  In either case v1_param will
-    // be less than v2_param.
-    if (val1 == val2)
     {
-      if ( some_param < v1_param || some_param > v2_param )
-        sense_int = !sense_int;
+      SPAposition const some_point( third_point->x(),
+				    third_point->y(),
+				    third_point->z() );
+      SPAposition closest_point;
+      geometry->equation().point_perp( some_point, closest_point );
+      double some_param = geometry->equation().param( closest_point );
+      int val1 = (curve_range > 0.0);
+      int val2 = (sense_int == 1);
+
+      // val1 will equal val2 for two cases.  In either case v1_param will
+      // be less than v2_param.
+      if (val1 == val2)
+	{
+	  if ( some_param < v1_param || some_param > v2_param )
+	    sense_int = !sense_int;
+	}
+      // val1 will NOT equal val2 for two cases.  In either case v1_param will
+      // be greater than v2_param.
+      else
+	{
+	  if ( some_param < v2_param || some_param > v1_param )
+	    sense_int = !sense_int;
+	}
     }
-    // val1 will NOT equal val2 for two cases.  In either case v1_param will
-    // be greater than v2_param.
-    else
-    {
-      if ( some_param < v2_param || some_param > v1_param )
-        sense_int = !sense_int;
-    }
-  }
 
   REVBIT sense;
   if(sense_int == 0)
@@ -6215,13 +5679,13 @@
   else
     sense = FORWARD;
 
-    // Actually create the new EDGE
+  // Actually create the new EDGE
   API_BEGIN;
   new_EDGE = new EDGE ( from_VERTEX, to_VERTEX, geometry, sense );
   API_END;
 
-    //Delete the body and the sheet_body and the other body associated with
-    //this other face...
+  //Delete the body and the sheet_body and the other body associated with
+  //this other face...
   AcisQueryEngine::instance()->delete_ACIS_BODY(intersect_BODY, CUBIT_TRUE);
   AcisQueryEngine::instance()->delete_ACIS_BODY(sheet_body, CUBIT_TRUE);
   AcisQueryEngine::instance()->delete_ACIS_BODY(AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_2), CUBIT_TRUE);
@@ -6241,34 +5705,34 @@
 // Creation Date : 05/15/97
 //-------------------------------------------------------------------------
 EDGE* AcisModifyEngine::make_spline_EDGE( VERTEX* from_VERTEX,
-                                            VERTEX* to_VERTEX,
-                                            SPAposition* pos_array,
-                                            int number_points ) const
+					  VERTEX* to_VERTEX,
+					  SPAposition* pos_array,
+					  int number_points ) const
 {
-    // Create the spline curve and attach it to the EDGE
+  // Create the spline curve and attach it to the EDGE
   EDGE* EDGE_ptr = NULL;
   outcome result = api_curve_spline(number_points, pos_array, 0, 0, EDGE_ptr,
                                     FALSE, from_VERTEX == to_VERTEX);
   if (result.ok() == FALSE || EDGE_ptr == NULL)
-  {
-    PRINT_ERROR("In AcisModifyEngine::make_spline_EDGE\n"
-                "       ACIS function, api_mk_ed_cubic, failed\n");
-    AcisQueryEngine::instance()->ACIS_API_error (result);
-    return (EDGE *)NULL;
-  }
+    {
+      PRINT_ERROR("In AcisModifyEngine::make_spline_EDGE\n"
+		  "       ACIS function, api_mk_ed_cubic, failed\n");
+      AcisQueryEngine::instance()->ACIS_API_error (result);
+      return (EDGE *)NULL;
+    }
   else
-  {
+    {
       // Switch the end VERTEXes of the EDGE to the input VERTEXes. Keep
       // in mind that the back links (from the VERTEX back to the EDGE)
       // need to be modified as well.
-    EDGE_ptr->set_start ( from_VERTEX );
-    from_VERTEX->add_edge( EDGE_ptr );
+      EDGE_ptr->set_start ( from_VERTEX );
+      from_VERTEX->add_edge( EDGE_ptr );
 
-    EDGE_ptr->set_end ( to_VERTEX );
-    to_VERTEX->add_edge( EDGE_ptr );
+      EDGE_ptr->set_end ( to_VERTEX );
+      to_VERTEX->add_edge( EDGE_ptr );
 
-    return EDGE_ptr;
-  }
+      return EDGE_ptr;
+    }
 }
 
 //-------------------------------------------------------------------------
@@ -6289,26 +5753,26 @@
 {
   leftoverBody = 0;
 
-    // chops the blank with the  tool, returing the body formed by subtracting the tool from the blank,
-	// and the body formed by intersecting the tool with the blank,
-	// simultaneously.
+  // chops the blank with the  tool, returing the body formed by subtracting the tool from the blank,
+  // and the body formed by intersecting the tool with the blank,
+  // simultaneously.
 
   if (bodysms.size() <= 1)
-  {
-    PRINT_WARNING("There is only one volume in the list. Nothing modified\n");
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_WARNING("There is only one volume in the list. Nothing modified\n");
+      return CUBIT_FAILURE;
+    }
 
-    // Create new acis bodies that are copies of the original acis bodies.
-    // If something goes wrong in the choping, we can then delete our copies
-    // and the originals are intact.  If everything goes fine, we will delete
-    // the originals at that time.
+  // Create new acis bodies that are copies of the original acis bodies.
+  // If something goes wrong in the choping, we can then delete our copies
+  // and the originals are intact.  If everything goes fine, we will delete
+  // the originals at that time.
 
-    // pass in keep_old to the delete_owner_attrib flag; if we're not keeping
-    // old bodies, we want to keep the owner attrib, so we can pick up entities
-    // that didn't change
+  // pass in keep_old to the delete_owner_attrib flag; if we're not keeping
+  // old bodies, we want to keep the owner attrib, so we can pick up entities
+  // that didn't change
   bool delete_attribs =
-      (GeometryModifyTool::instance()->get_new_ids() || keep_old);
+    (GeometryModifyTool::instance()->get_new_ids() || keep_old);
 
   DLIList<BODY*> old_BODY_list;
   DLIList<BodySM*> old_BodySM_list;
@@ -6320,56 +5784,56 @@
 
   BODY *blank_BODY = this->copy_BODY(BODYPtr, delete_attribs);
   if (blank_BODY == NULL)
-  {
-    return CUBIT_FAILURE; // Nothing to clean up at this point.
-  }
+    {
+      return CUBIT_FAILURE; // Nothing to clean up at this point.
+    }
   
   BODY* outside_BODY=NULL;
   BODY* leftovers_BODY=NULL;
- // get the tool Body
+  // get the tool Body
   BodySMPtr = bodysms.get_and_step();
   BODYPtr =  AcisQueryEngine::get_BODY(BodySMPtr);
 
   BODY *tool_BODY = this->copy_BODY(BODYPtr, delete_attribs);
   if (tool_BODY == NULL)
-  {
-    AcisQueryEngine::instance()->delete_ACIS_BODY(blank_BODY, CUBIT_TRUE);
-    return CUBIT_FAILURE;
-  }
+    {
+      AcisQueryEngine::instance()->delete_ACIS_BODY(blank_BODY, CUBIT_TRUE);
+      return CUBIT_FAILURE;
+    }
 
   // Chop the blank_BODY using the tool_BODY.
   // If this is successful, the result is blank_BODY and outside_BODY, leftovers_BODY
   outcome result = api_boolean_chop_body(tool_BODY, blank_BODY, nonreg,outside_BODY, leftovers_BODY);
 
   if (!result.ok() || blank_BODY == NULL ||  
-       tool_BODY == NULL || blank_BODY->lump() == NULL )
-  {
+      tool_BODY == NULL || blank_BODY->lump() == NULL )
+    {
 
 
-    if( !result.ok() )
-    {
-      PRINT_ERROR("In AcisModifyEngine::chop\n");
-      AcisQueryEngine::instance()->ACIS_API_error(result, "chop Bodies");
-      if (blank_BODY != NULL) 
-        AcisQueryEngine::instance()->delete_ACIS_BODY(blank_BODY, CUBIT_TRUE);
-      if (tool_BODY != NULL) 
-        AcisQueryEngine::instance()->delete_ACIS_BODY(tool_BODY, CUBIT_TRUE);
-    }
+      if( !result.ok() )
+	{
+	  PRINT_ERROR("In AcisModifyEngine::chop\n");
+	  AcisQueryEngine::instance()->ACIS_API_error(result, "chop Bodies");
+	  if (blank_BODY != NULL) 
+	    AcisQueryEngine::instance()->delete_ACIS_BODY(blank_BODY, CUBIT_TRUE);
+	  if (tool_BODY != NULL) 
+	    AcisQueryEngine::instance()->delete_ACIS_BODY(tool_BODY, CUBIT_TRUE);
+	}
 
-    if( blank_BODY->lump() == NULL )
-    {
-      PRINT_ERROR("Bodies do not intersect\n");
-      if (blank_BODY != NULL) 
-        AcisQueryEngine::instance()->delete_ACIS_BODY(blank_BODY, CUBIT_TRUE);
-      if (leftovers_BODY != NULL) 
-        AcisQueryEngine::instance()->delete_ACIS_BODY(leftovers_BODY, CUBIT_TRUE);
-      if (outside_BODY != NULL) 
-        AcisQueryEngine::instance()->delete_ACIS_BODY(outside_BODY, CUBIT_TRUE);
+      if( blank_BODY->lump() == NULL )
+	{
+	  PRINT_ERROR("Bodies do not intersect\n");
+	  if (blank_BODY != NULL) 
+	    AcisQueryEngine::instance()->delete_ACIS_BODY(blank_BODY, CUBIT_TRUE);
+	  if (leftovers_BODY != NULL) 
+	    AcisQueryEngine::instance()->delete_ACIS_BODY(leftovers_BODY, CUBIT_TRUE);
+	  if (outside_BODY != NULL) 
+	    AcisQueryEngine::instance()->delete_ACIS_BODY(outside_BODY, CUBIT_TRUE);
+	}
+
+      return CUBIT_FAILURE;
     }
 
-    return CUBIT_FAILURE;
-  }
-
   BodySM* intersectBody = get_new_Body(BodySMPtr, BODYPtr, blank_BODY, keep_old);
   intersectBodies.append( intersectBody );
   BodySM* outsideBody =  get_new_Body(old_BodySM_list, old_BODY_list, outside_BODY, keep_old);
@@ -6401,60 +5865,60 @@
   DLIList<SurfaceACIS*> copied_ref_face_list(ref_face_list.size());
   CAST_LIST(ref_face_list, copied_ref_face_list, SurfaceACIS);
   if (ref_face_list.size() != copied_ref_face_list.size())
-  {
-    PRINT_ERROR("Non-ACIS surface at %s:%d\n", __FILE__, __LINE__ );
-    return CUBIT_FAILURE;
-  }
+    {
+      PRINT_ERROR("Non-ACIS surface at %s:%d\n", __FILE__, __LINE__ );
+      return CUBIT_FAILURE;
+    }
 
   // Loop on FACEs.  We will work on reversing surfaces from one body at a time.
   copied_ref_face_list.reset();
   while( copied_ref_face_list.size() )
-  {
-    BODY *copied_BODY_ptr;
+    {
+      BODY *copied_BODY_ptr;
 #ifdef BOYD07
-    DLIList<SurfaceACIS*> reverse_face_list;
+      DLIList<SurfaceACIS*> reverse_face_list;
 #endif
-    DLIList<FACE*> reverse_FACE_list;
-    if( get_copied_FACES_of_body( copied_ref_face_list, reverse_FACE_list,
-      copied_BODY_ptr ) == CUBIT_FAILURE )
-      break;
+      DLIList<FACE*> reverse_FACE_list;
+      if( get_copied_FACES_of_body( copied_ref_face_list, reverse_FACE_list,
+				    copied_BODY_ptr ) == CUBIT_FAILURE )
+	break;
 
-    // Get original Body and BODY
-    BodySM *body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY( copied_BODY_ptr );
-    BODY *BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
+      // Get original Body and BODY
+      BodySM *body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY( copied_BODY_ptr );
+      BODY *BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
 
-    // Now cleanout the owner attributes from the copied BODY, if required
-    if( delete_attribs )
-      AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copied_BODY_ptr);
+      // Now cleanout the owner attributes from the copied BODY, if required
+      if( delete_attribs )
+	AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copied_BODY_ptr);
 
-    reverse_FACE_list.reset();
-    for( i=reverse_FACE_list.size(); i--; )
-    {
-      FACE *FACE_ptr = reverse_FACE_list.get_and_step();
-      result = api_reverse_face( FACE_ptr );
+      reverse_FACE_list.reset();
+      for( i=reverse_FACE_list.size(); i--; )
+	{
+	  FACE *FACE_ptr = reverse_FACE_list.get_and_step();
+	  result = api_reverse_face( FACE_ptr );
 
-      if (!result.ok())
-      {
-        //TODO: get ref_face from FACE
-        //PRINT_INFO("Surface %d did not reverse\n", ref_face->id());
-         PRINT_INFO("Surface did not reverse\n");
-        return CUBIT_FAILURE;
-      }
-    }
+	  if (!result.ok())
+	    {
+	      //TODO: get ref_face from FACE
+	      //PRINT_INFO("Surface %d did not reverse\n", ref_face->id());
+	      PRINT_INFO("Surface did not reverse\n");
+	      return CUBIT_FAILURE;
+	    }
+	}
 
-    BodySM* new_body_ptr = get_new_Body( body_ptr, BODY_ptr, copied_BODY_ptr, CUBIT_FALSE );
+      BodySM* new_body_ptr = get_new_Body( body_ptr, BODY_ptr, copied_BODY_ptr, CUBIT_FALSE );
 
-    if( new_body_ptr!=NULL && new_body_ptr!=body_ptr )
-    {
-      PRINT_INFO( "Created new volume\n" );
+      if( new_body_ptr!=NULL && new_body_ptr!=body_ptr )
+	{
+	  PRINT_INFO( "Created new volume\n" );
+	}
+      else if( new_body_ptr!=NULL && new_body_ptr==body_ptr )
+	{
+	  PRINT_INFO( "Modified volume\n" );
+	}
+      else
+	PRINT_WARNING( "Volume was not modified\n" );
     }
-    else if( new_body_ptr!=NULL && new_body_ptr==body_ptr )
-    {
-      PRINT_INFO( "Modified volume\n" );
-    }
-    else
-      PRINT_WARNING( "Volume was not modified\n" );
-  }
 
   return CUBIT_SUCCESS;
 }
@@ -6476,10441 +5940,9944 @@
   PRINT_ERROR( "This function is not available in ACIS versions below 800\n" );
   return CUBIT_FAILURE;
 #else
-CubitStatus AcisModifyEngine::thicken( DLIList<BodySM*>& bodies,
-                                       DLIList<BodySM*>& new_body_list,
-                                       double depth,
-                                       bool both) const
-{
-   if (bodies.size() < 1)
-   {
-      PRINT_WARNING("There are no volumes in the list. Nothing modified\n");
-      return CUBIT_FAILURE;
-   }
+  CubitStatus AcisModifyEngine::thicken( DLIList<BodySM*>& bodies,
+					 DLIList<BodySM*>& new_body_list,
+					 double depth,
+					 bool both) const
+    {
+      if (bodies.size() < 1)
+	{
+	  PRINT_WARNING("There are no volumes in the list. Nothing modified\n");
+	  return CUBIT_FAILURE;
+	}
 
-   SPAposition box_l(0,0,0);
-   SPAposition box_h(0,0,0);
+      SPAposition box_l(0,0,0);
+      SPAposition box_h(0,0,0);
 
-   BODY* in_out_BODY;
-   DLIList<BODY*> old_BODY_list;
-   DLIList<BodySM*> old_Body_list;
+      BODY* in_out_BODY;
+      DLIList<BODY*> old_BODY_list;
+      DLIList<BodySM*> old_Body_list;
 
-   for(int i = bodies.size(); i >= 1 ; i-- ){
+      for(int i = bodies.size(); i >= 1 ; i-- ){
 
-      BodySM* BodyPtr = bodies.get_and_step();
-      BodySM* new_bodysm;
-      BodyACIS* acis_body = dynamic_cast<BodyACIS*>(BodyPtr);
-      if (!acis_body)
-      {
-        PRINT_ERROR("Non-ACIS BodySM passed to AcisModifyEngine::thicken.\n");
-        continue;
-      }
+	BodySM* BodyPtr = bodies.get_and_step();
+	BodySM* new_bodysm;
+	BodyACIS* acis_body = dynamic_cast<BodyACIS*>(BodyPtr);
+	if (!acis_body)
+	  {
+	    PRINT_ERROR("Non-ACIS BodySM passed to AcisModifyEngine::thicken.\n");
+	    continue;
+	  }
 
-      BODY* BODYPtr =  AcisQueryEngine::get_BODY(BodyPtr);
+	BODY* BODYPtr =  AcisQueryEngine::get_BODY(BodyPtr);
 
-      in_out_BODY = this->copy_BODY(BODYPtr, CUBIT_FALSE);
+	in_out_BODY = this->copy_BODY(BODYPtr, CUBIT_FALSE);
 
-      if (in_out_BODY == NULL)
-      {
-         return CUBIT_FAILURE; // Nothing to clean up at this point.
-      }
+	if (in_out_BODY == NULL)
+	  {
+	    return CUBIT_FAILURE; // Nothing to clean up at this point.
+	  }
 
-      if( !acis_body->is_sheet_body() )
-      {
-         PRINT_WARNING("Only surface volumes should be thickened\n"
-            "       results may be different than expected\n");
-      }
+	if( !acis_body->is_sheet_body() )
+	  {
+	    PRINT_WARNING("Only surface volumes should be thickened\n"
+			  "       results may be different than expected\n");
+	  }
 
-      outcome result = api_sheet_thicken(in_out_BODY, depth, both, box_l, box_h);
+	outcome result = api_sheet_thicken(in_out_BODY, depth, both, box_l, box_h);
 
-      if (!result.ok())//
-      {
-         if(result.error_number() == 41000)               // checking surface normals
-         {
-            PRINT_ERROR("In AcisModifyEngine::thicken\n"
-                "       Surface normals may not be consistent\n"
-                "       use: validate normal reverse\n");
-            return CUBIT_FAILURE;
-         }
+	if (!result.ok())//
+	  {
+	    if(result.error_number() == 41000)               // checking surface normals
+	      {
+		PRINT_ERROR("In AcisModifyEngine::thicken\n"
+			    "       Surface normals may not be consistent\n"
+			    "       use: validate normal reverse\n");
+		return CUBIT_FAILURE;
+	      }
 
-         PRINT_ERROR("In AcisModifyEngine::thicken \n");
-         AcisQueryEngine::instance()->ACIS_API_error (result);
-         return CUBIT_FAILURE;
-      }
+	    PRINT_ERROR("In AcisModifyEngine::thicken \n");
+	    AcisQueryEngine::instance()->ACIS_API_error (result);
+	    return CUBIT_FAILURE;
+	  }
 
-      new_bodysm = get_new_Body(BodyPtr, BODYPtr, in_out_BODY, CUBIT_FALSE);
-      if (new_bodysm)
-        new_body_list.append(new_bodysm);
-  }
-  return CUBIT_SUCCESS;
+	new_bodysm = get_new_Body(BodyPtr, BODYPtr, in_out_BODY, CUBIT_FALSE);
+	if (new_bodysm)
+	  new_body_list.append(new_bodysm);
+      }
+      return CUBIT_SUCCESS;
 #endif
-}
+    }
 
 
-//-------------------------------------------------------------------------
-// Purpose       : Boolean Operation of a list of Bodies: unite
-//
-// Special Notes :
-//
-// Creator       : Malcolm J. Panthaki
-//
-// Creation Date : 10/31/96
-//-------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::unite(DLIList<BodySM*> &bodies,
-                                    DLIList<BodySM*> &newBodies,
+  //-------------------------------------------------------------------------
+  // Purpose       : Boolean Operation of a list of Bodies: unite
+  //
+  // Special Notes :
+  //
+  // Creator       : Malcolm J. Panthaki
+  //
+  // Creation Date : 10/31/96
+  //-------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::unite(DLIList<BodySM*> &bodies,
+				      DLIList<BodySM*> &newBodies,
                                       bool keep_old) const
-{
-    // Union all bodies in the bodies list into a single body.
-  if (bodies.size() <= 1)
-  {
-    PRINT_WARNING("There is only one volume in the list. Nothing modified\n");
-    return CUBIT_FAILURE;
-  }
+    {
+      // Union all bodies in the bodies list into a single body.
+      if (bodies.size() <= 1)
+	{
+	  PRINT_WARNING("There is only one volume in the list. Nothing modified\n");
+	  return CUBIT_FAILURE;
+	}
 
-    // Create new acis bodies that are copies of the original acis bodies.
-    // If something goes wrong in the unioning, we can then delete our copies
-    // and the originals are intact.  If everything goes fine, we will delete
-    // the originals at that time.
+      // Create new acis bodies that are copies of the original acis bodies.
+      // If something goes wrong in the unioning, we can then delete our copies
+      // and the originals are intact.  If everything goes fine, we will delete
+      // the originals at that time.
 
-    // pass in keep_old to the delete_owner_attrib flag; if we're not keeping
-    // old bodies, we want to keep the owner attrib, so we can pick up entities
-    // that didn't change
-   bool delete_attribs =
-      (GeometryModifyTool::instance()->get_new_ids() || keep_old);
+      // pass in keep_old to the delete_owner_attrib flag; if we're not keeping
+      // old bodies, we want to keep the owner attrib, so we can pick up entities
+      // that didn't change
+      bool delete_attribs =
+	(GeometryModifyTool::instance()->get_new_ids() || keep_old);
 
-   // check if the boolean operation is regularized or nonregularized
-     BOOL_TYPE bool_type = UNION;
-	CubitBoolean boolean_regularize = GeometryModifyTool::instance()->boolean_regularize();
+      // check if the boolean operation is regularized or nonregularized
+      BOOL_TYPE bool_type = UNION;
+      CubitBoolean boolean_regularize = GeometryModifyTool::instance()->boolean_regularize();
 
-	if (boolean_regularize == FALSE)
+      if (boolean_regularize == FALSE)
 	{
-		bool_type = NONREG_UNION;
+	  bool_type = NONREG_UNION;
 	}
 
-  DLIList<BODY*> old_BODY_list;
-  DLIList<BodySM*> old_Body_list;
+      DLIList<BODY*> old_BODY_list;
+      DLIList<BodySM*> old_Body_list;
 
-  BodySM* BodyPtr = bodies.get_and_step();
-  BODY* BODYPtr =  AcisQueryEngine::get_BODY(BodyPtr);
-  old_Body_list.append(BodyPtr);
-  old_BODY_list.append(BODYPtr);
+      BodySM* BodyPtr = bodies.get_and_step();
+      BODY* BODYPtr =  AcisQueryEngine::get_BODY(BodyPtr);
+      old_Body_list.append(BodyPtr);
+      old_BODY_list.append(BODYPtr);
 
-  BODY *master = this->copy_BODY(BODYPtr, delete_attribs);
-  if (master == NULL)
-  {
-    return CUBIT_FAILURE; // Nothing to clean up at this point.
-  }
+      BODY *master = this->copy_BODY(BODYPtr, delete_attribs);
+      if (master == NULL)
+	{
+	  return CUBIT_FAILURE; // Nothing to clean up at this point.
+	}
 
 
-    // Note: one iteration less because we already pulled out one body above
-  for (int i = 1; i < bodies.size(); i++)
-  {
-    BodyPtr = bodies.get_and_step();
-    BODYPtr =  AcisQueryEngine::get_BODY(BodyPtr);
+      // Note: one iteration less because we already pulled out one body above
+      for (int i = 1; i < bodies.size(); i++)
+	{
+	  BodyPtr = bodies.get_and_step();
+	  BODYPtr =  AcisQueryEngine::get_BODY(BodyPtr);
 
-    BODY *copy = this->copy_BODY(BODYPtr, delete_attribs);
-    if (copy == NULL)
-    {
-      AcisQueryEngine::instance()->delete_ACIS_BODY(master, CUBIT_TRUE);
-      return CUBIT_FAILURE;
-    }
+	  BODY *copy = this->copy_BODY(BODYPtr, delete_attribs);
+	  if (copy == NULL)
+	    {
+	      AcisQueryEngine::instance()->delete_ACIS_BODY(master, CUBIT_TRUE);
+	      return CUBIT_FAILURE;
+	    }
 
 
-	// Do the union of the master and the copy.
-    // If this is successful, the result is master and copy will be deleted
-    // outcome result = api_unite(copy, master);
-	// replaced with the api_boolean call in order to do nonregularize boolean operation
+	  // Do the union of the master and the copy.
+	  // If this is successful, the result is master and copy will be deleted
+	  // outcome result = api_unite(copy, master);
+	  // replaced with the api_boolean call in order to do nonregularize boolean operation
 
-	 outcome result = api_boolean (copy,master,bool_type);
+	  outcome result = api_boolean (copy,master,bool_type);
 
 
 
-    if (!result.ok() || (master && master->lump() == NULL))
-    {
-      // If there are no LUMPs in the resulting BODY, return with a failure
-      if (master && master->lump() == NULL)
-        PRINT_ERROR("Unite produced volume with no volume - "
-                    "check for (and remove) co-incident surfaces\n");
-      else
-        PRINT_ERROR("In AcisModifyEngine::unite\n");
+	  if (!result.ok() || (master && master->lump() == NULL))
+	    {
+	      // If there are no LUMPs in the resulting BODY, return with a failure
+	      if (master && master->lump() == NULL)
+		PRINT_ERROR("Unite produced volume with no volume - "
+			    "check for (and remove) co-incident surfaces\n");
+	      else
+		PRINT_ERROR("In AcisModifyEngine::unite\n");
 
-      AcisQueryEngine::instance()->ACIS_API_error(result, "unite Bodies");
-      if (master != NULL) AcisQueryEngine::instance()->delete_ACIS_BODY(master, CUBIT_TRUE);
-      if (copy   != NULL) AcisQueryEngine::instance()->delete_ACIS_BODY(copy, CUBIT_TRUE);
+	      AcisQueryEngine::instance()->ACIS_API_error(result, "unite Bodies");
+	      if (master != NULL) AcisQueryEngine::instance()->delete_ACIS_BODY(master, CUBIT_TRUE);
+	      if (copy   != NULL) AcisQueryEngine::instance()->delete_ACIS_BODY(copy, CUBIT_TRUE);
 
-      return CUBIT_FAILURE;
-    }
-    else {
-      old_Body_list.append(BodyPtr);
-      old_BODY_list.append(BODYPtr);
-    }
+	      return CUBIT_FAILURE;
+	    }
+	  else {
+	    old_Body_list.append(BodyPtr);
+	    old_BODY_list.append(BODYPtr);
+	  }
 
-		//For nonregularized boolean, find all internal surfaces and delete
+	  //For nonregularized boolean, find all internal surfaces and delete
 
-	if ( bool_type == NONREG_UNION)
-	{
-		  outcome result1;
-		  // ENTITY_LIST FACES;
-          DLIList<FACE*>  FACE_list ;
-		  FACE *this_FACE;
-          AcisQueryEngine::instance()->get_FACEs(master,FACE_list);
-		   // loop through all faces
-		  for( int i = 0; i< FACE_list.size(); i++)
-		  {
-			  this_FACE = FACE_list.get_and_step();
-			  assert( this_FACE != NULL );
-			  // Make sure this is a DOUBLE_SIDED FACE
-			  if (this_FACE->sides() == DOUBLE_SIDED)
-			  {
-				  if (this_FACE->cont()==BOTH_INSIDE)
-				  {
-					  // found internal faces
-					  // Now we have the FACE - unhook it  from the BODY.  Keep track of new
-					  // BODIES that are created as this is done.
-					   PRINT_INFO( " Unhooking and deleting each internal surface...\n" );
-					   BODY *new_BODY_ptr;
-					   result1 = api_unhook_face( this_FACE, new_BODY_ptr );
-					   if( !result1.ok() )
-					   {
-						   AcisModifyEngine::instance()->get_acis_query_engine()->ACIS_API_error( result1 );
-						   PRINT_ERROR( " Face unhooking during rebuild of volume didn't work\n" );
-						   return CUBIT_FAILURE;
-					   }
-					   AcisQueryEngine::instance()->delete_ACIS_BODY (new_BODY_ptr);
-				  }
-			  }
-		  }
+	  if ( bool_type == NONREG_UNION)
+	    {
+	      outcome result1;
+	      // ENTITY_LIST FACES;
+	      DLIList<FACE*>  FACE_list ;
+	      FACE *this_FACE;
+	      AcisQueryEngine::instance()->get_FACEs(master,FACE_list);
+	      // loop through all faces
+	      for( int i = 0; i< FACE_list.size(); i++)
+		{
+		  this_FACE = FACE_list.get_and_step();
+		  assert( this_FACE != NULL );
+		  // Make sure this is a DOUBLE_SIDED FACE
+		  if (this_FACE->sides() == DOUBLE_SIDED)
+		    {
+		      if (this_FACE->cont()==BOTH_INSIDE)
+			{
+			  // found internal faces
+			  // Now we have the FACE - unhook it  from the BODY.  Keep track of new
+			  // BODIES that are created as this is done.
+			  PRINT_INFO( " Unhooking and deleting each internal surface...\n" );
+			  BODY *new_BODY_ptr;
+			  result1 = api_unhook_face( this_FACE, new_BODY_ptr );
+			  if( !result1.ok() )
+			    {
+			      AcisModifyEngine::instance()->get_acis_query_engine()->ACIS_API_error( result1 );
+			      PRINT_ERROR( " Face unhooking during rebuild of volume didn't work\n" );
+			      return CUBIT_FAILURE;
+			    }
+			  AcisQueryEngine::instance()->delete_ACIS_BODY (new_BODY_ptr);
+			}
+		    }
+		}
 
-		 // heal the leftover body
-//
-//		   PRINT_INFO(" Healing the leftover volume...\n");
-//		   if( AcisHealerTool::instance()->init_BODY_for_healing( master ) == CUBIT_SUCCESS )
-//		   {
-//			   int percent_before, percent_after, number_splines_simplified;
-//			   if( AcisHealerTool::instance()->heal_BODY( master, percent_before,
-//				   percent_after, number_splines_simplified ) == CUBIT_FAILURE )
-//				   PRINT_ERROR( "Error healing the combined volume\n" );
-//			   else
-//				   PRINT_INFO( "Successfully healed the combined volume!\n" );
-//			   AcisHealerTool::instance()->end_BODY_for_healing( master );
-//		   }
+	      // heal the leftover body
+	      //
+	      //		   PRINT_INFO(" Healing the leftover volume...\n");
+	      //		   if( AcisHealerTool::instance()->init_BODY_for_healing( master ) == CUBIT_SUCCESS )
+	      //		   {
+	      //			   int percent_before, percent_after, number_splines_simplified;
+	      //			   if( AcisHealerTool::instance()->heal_BODY( master, percent_before,
+	      //				   percent_after, number_splines_simplified ) == CUBIT_FAILURE )
+	      //				   PRINT_ERROR( "Error healing the combined volume\n" );
+	      //			   else
+	      //				   PRINT_INFO( "Successfully healed the combined volume!\n" );
+	      //			   AcisHealerTool::instance()->end_BODY_for_healing( master );
+	      //		   }
+	    }
+
 	}
 
-  }
+      AcisQueryEngine::instance()->clear_bounding_box( master );
+      AcisQueryEngine::instance()->bounding_box( master );
 
-  AcisQueryEngine::instance()->clear_bounding_box( master );
-  AcisQueryEngine::instance()->bounding_box( master );
+      BodySM *newBodyPtr = get_new_Body(old_Body_list, old_BODY_list, master, keep_old);
+      newBodies.append( newBodyPtr );
 
-  BodySM *newBodyPtr = get_new_Body(old_Body_list, old_BODY_list, master, keep_old);
-  newBodies.append( newBodyPtr );
+      return CUBIT_SUCCESS;
+    }
 
-  return CUBIT_SUCCESS;
-}
+  CubitStatus AcisModifyEngine::subtract( DLIList<BodySM*> &tool_body_list,
+					  DLIList<BodySM*> &from_bodies,
+					  DLIList<BodySM*> &new_from_bodies,
+					  bool imprint,
+					  bool keep_old) const
+    {
+      // pass in keep_old to the delete_owner_attrib flag; if we're not keeping
+      // old bodies, we want to keep the owner attrib, so we can pick up entities
+      // that didn't change
+      bool delete_attribs =
+	(GeometryModifyTool::instance()->get_new_ids() || keep_old);
 
-CubitStatus AcisModifyEngine::subtract( DLIList<BodySM*> &tool_body_list,
-                                        DLIList<BodySM*> &from_bodies,
-                                        DLIList<BodySM*> &new_from_bodies,
-                                        bool imprint,
-                                        bool keep_old) const
-{
-    // pass in keep_old to the delete_owner_attrib flag; if we're not keeping
-    // old bodies, we want to keep the owner attrib, so we can pick up entities
-    // that didn't change
-  bool delete_attribs =
-      (GeometryModifyTool::instance()->get_new_ids() || keep_old);
+      // check if the boolean operation is regularized or nonregularized
+      BOOL_TYPE bool_type = SUBTRACTION;
+      CubitBoolean boolean_regularize = GeometryModifyTool::instance()->boolean_regularize();
 
-  // check if the boolean operation is regularized or nonregularized
-     BOOL_TYPE bool_type = SUBTRACTION;
-	CubitBoolean boolean_regularize = GeometryModifyTool::instance()->boolean_regularize();
-
-	if (boolean_regularize == FALSE)
+      if (boolean_regularize == FALSE)
 	{
-		bool_type = NONREG_SUBTRACTION;
+	  bool_type = NONREG_SUBTRACTION;
 	}
 
-  int ii;
-  DLIList<CubitBox*> tool_boxes;
+      int ii;
+      DLIList<CubitBox*> tool_boxes;
 
-  CubitBox tool_box;
+      CubitBox tool_box;
 
 
-  DLIList<BODY*> tool_BODY_list;
-  DLIList<BODY*> tool_BODY_list_copy;
+      DLIList<BODY*> tool_BODY_list;
+      DLIList<BODY*> tool_BODY_list_copy;
 
-  // get acis bodies, and copy them
-  tool_body_list.reset();
+      // get acis bodies, and copy them
+      tool_body_list.reset();
 
-  for (ii = tool_body_list.size(); ii > 0; ii--) {
-    CubitBox *temp_box = new CubitBox(
-	    AcisQueryEngine::instance()->bounding_box(tool_body_list.get()));
-    tool_boxes.append(temp_box);
+      for (ii = tool_body_list.size(); ii > 0; ii--) {
+	CubitBox *temp_box = new CubitBox(
+					  AcisQueryEngine::instance()->bounding_box(tool_body_list.get()));
+	tool_boxes.append(temp_box);
 
-    BODY *BODYPtr1 = AcisQueryEngine::get_BODY(tool_body_list.get_and_step());
-    tool_BODY_list.append(BODYPtr1);
+	BODY *BODYPtr1 = AcisQueryEngine::get_BODY(tool_body_list.get_and_step());
+	tool_BODY_list.append(BODYPtr1);
 
-    BODYPtr1 = this->copy_BODY(BODYPtr1, delete_attribs);
-    tool_BODY_list_copy.append(BODYPtr1);
-  }
+	BODYPtr1 = this->copy_BODY(BODYPtr1, delete_attribs);
+	tool_BODY_list_copy.append(BODYPtr1);
+      }
 
-  if (tool_BODY_list.size() != tool_body_list.size())
-  {
-    for(ii = tool_boxes.size(); ii>0; ii--)
-       delete tool_boxes.get_and_step();
-    return CUBIT_FAILURE;
-  }
+      if (tool_BODY_list.size() != tool_body_list.size())
+	{
+	  for(ii = tool_boxes.size(); ii>0; ii--)
+	    delete tool_boxes.get_and_step();
+	  return CUBIT_FAILURE;
+	}
 
 
-  DLIList<BODY*> from_BODY_list;
-  DLIList<BODY*> from_BODY_list_copy;
+      DLIList<BODY*> from_BODY_list;
+      DLIList<BODY*> from_BODY_list_copy;
 
-  // get acis bodies, and copy them
-  from_bodies.reset();
+      // get acis bodies, and copy them
+      from_bodies.reset();
 
-  for (ii = from_bodies.size(); ii > 0; ii--) {
-    BODY *BODYPtr1 = AcisQueryEngine::get_BODY(from_bodies.get_and_step());
-    from_BODY_list.append(BODYPtr1);
+      for (ii = from_bodies.size(); ii > 0; ii--) {
+	BODY *BODYPtr1 = AcisQueryEngine::get_BODY(from_bodies.get_and_step());
+	from_BODY_list.append(BODYPtr1);
 
-    BODYPtr1 = this->copy_BODY(BODYPtr1, delete_attribs);
-    from_BODY_list_copy.append(BODYPtr1);
-  }
+	BODYPtr1 = this->copy_BODY(BODYPtr1, delete_attribs);
+	from_BODY_list_copy.append(BODYPtr1);
+      }
 
-  if (from_BODY_list.size() != from_bodies.size())
-  {
-    for(ii = tool_boxes.size(); ii>0; ii--)
-       delete tool_boxes.get_and_step();
-    return CUBIT_FAILURE;
-  }
+      if (from_BODY_list.size() != from_bodies.size())
+	{
+	  for(ii = tool_boxes.size(); ii>0; ii--)
+	    delete tool_boxes.get_and_step();
+	  return CUBIT_FAILURE;
+	}
 
 
-  // now, subtract the tool from the list of bodies
-  tool_BODY_list.reset();
-  tool_BODY_list_copy.reset();
-  tool_body_list.reset();
-  tool_boxes.reset();
+      // now, subtract the tool from the list of bodies
+      tool_BODY_list.reset();
+      tool_BODY_list_copy.reset();
+      tool_body_list.reset();
+      tool_boxes.reset();
 
-  from_BODY_list.reset();
-  from_BODY_list_copy.reset();
-  from_bodies.reset();
+      from_BODY_list.reset();
+      from_BODY_list_copy.reset();
+      from_bodies.reset();
 
-  int fraction_remaining = 10;
-  CubitStatus sub_stat = CUBIT_SUCCESS;
+      int fraction_remaining = 10;
+      CubitStatus sub_stat = CUBIT_SUCCESS;
 
-    // subtract the tool body from each body in the list
-  CubitMessage* cmi = CubitMessage::instance();
-  for (ii = 1; ii <= from_BODY_list.size(); ii++)
-  {
-    BODY *from_BODY = from_BODY_list.get();
-    BODY *from_BODY_copy = from_BODY_list_copy.get();
-    BodySM *from_Body = from_bodies.get();
-    CubitBox box1 = AcisQueryEngine::instance()->bounding_box(from_Body);
+      // subtract the tool body from each body in the list
+      CubitMessage* cmi = CubitMessage::instance();
+      for (ii = 1; ii <= from_BODY_list.size(); ii++)
+	{
+	  BODY *from_BODY = from_BODY_list.get();
+	  BODY *from_BODY_copy = from_BODY_list_copy.get();
+	  BodySM *from_Body = from_bodies.get();
+	  CubitBox box1 = AcisQueryEngine::instance()->bounding_box(from_Body);
 
-    for(int jj = tool_BODY_list.size(); jj>0; jj--)
-    {
-      if (cmi->Interrupt())
-      {
-        PRINT_ERROR("Subtraction interrupted.  Aborting...\n");
-        while (tool_boxes.size())
-          delete tool_boxes.pop();
-        while (tool_BODY_list_copy.size())
-          AcisQueryEngine::instance()->delete_ACIS_BODY(tool_BODY_list_copy.pop(),CUBIT_TRUE);
-        while (from_BODY_list_copy.size())
-          AcisQueryEngine::instance()->delete_ACIS_BODY(from_BODY_list_copy.pop(),CUBIT_TRUE);
-        return CUBIT_FAILURE;
-      }
+	  for(int jj = tool_BODY_list.size(); jj>0; jj--)
+	    {
+	      if (cmi->Interrupt())
+		{
+		  PRINT_ERROR("Subtraction interrupted.  Aborting...\n");
+		  while (tool_boxes.size())
+		    delete tool_boxes.pop();
+		  while (tool_BODY_list_copy.size())
+		    AcisQueryEngine::instance()->delete_ACIS_BODY(tool_BODY_list_copy.pop(),CUBIT_TRUE);
+		  while (from_BODY_list_copy.size())
+		    AcisQueryEngine::instance()->delete_ACIS_BODY(from_BODY_list_copy.pop(),CUBIT_TRUE);
+		  return CUBIT_FAILURE;
+		}
 
-      tool_box = *tool_boxes.get();
-      BODY* tool_BODY = tool_BODY_list.get();
-      BODY *tool_BODY_copy = tool_BODY_list_copy.get();
+	      tool_box = *tool_boxes.get();
+	      BODY* tool_BODY = tool_BODY_list.get();
+	      BODY *tool_BODY_copy = tool_BODY_list_copy.get();
 
-        // first, check bounding SPAbox; if they don't intersect, don't do the subtract
-      if ( tool_box.overlap( SPAresabs, box1 ) )
-      {
-          // the bodies overlap; proceed with the subtract
+	      // first, check bounding SPAbox; if they don't intersect, don't do the subtract
+	      if ( tool_box.overlap( SPAresabs, box1 ) )
+		{
+		  // the bodies overlap; proceed with the subtract
 
-          // Subtract body1 from body2.
-         // outcome result = api_subtract( tool_BODY_copy, from_BODY_copy );
-        outcome result = api_boolean( tool_BODY_copy, from_BODY_copy, bool_type );
-          // We may or may not get an error if the resulting BODY is
-          // empty (body1 totally encloses body2).
-          // Also check the result.
-        if (from_BODY_copy == NULL ||
-            (from_BODY_copy->lump() == NULL && from_BODY_copy->wire() == NULL) ||
-            !result.ok())
-        {
-          if (!result.ok())
-          {
-            PRINT_ERROR("Subtraction operation failed.\n");
-            AcisQueryEngine::instance()->ACIS_API_error(result, "subtract Bodies");
-            if (tool_BODY_copy != NULL)
-            {
-              AcisQueryEngine::instance()->delete_ACIS_BODY(tool_BODY_copy, CUBIT_TRUE);
-            }
-          }
-          else
-             PRINT_ERROR("Subtraction operation failed.\n"
-                         "       Empty volume created. Original volume is probably\n"
-                         "       completely enclosed by the subtracting volume.\n");
-          if (from_BODY_copy != NULL)
-          {
-            AcisQueryEngine::instance()->delete_ACIS_BODY(from_BODY_copy, CUBIT_TRUE);
-          }
+		  // Subtract body1 from body2.
+		  // outcome result = api_subtract( tool_BODY_copy, from_BODY_copy );
+		  outcome result = api_boolean( tool_BODY_copy, from_BODY_copy, bool_type );
+		  // We may or may not get an error if the resulting BODY is
+		  // empty (body1 totally encloses body2).
+		  // Also check the result.
+		  if (from_BODY_copy == NULL ||
+		      (from_BODY_copy->lump() == NULL && from_BODY_copy->wire() == NULL) ||
+		      !result.ok())
+		    {
+		      if (!result.ok())
+			{
+			  PRINT_ERROR("Subtraction operation failed.\n");
+			  AcisQueryEngine::instance()->ACIS_API_error(result, "subtract Bodies");
+			  if (tool_BODY_copy != NULL)
+			    {
+			      AcisQueryEngine::instance()->delete_ACIS_BODY(tool_BODY_copy, CUBIT_TRUE);
+			    }
+			}
+		      else
+			PRINT_ERROR("Subtraction operation failed.\n"
+				    "       Empty volume created. Original volume is probably\n"
+				    "       completely enclosed by the subtracting volume.\n");
+		      if (from_BODY_copy != NULL)
+			{
+			  AcisQueryEngine::instance()->delete_ACIS_BODY(from_BODY_copy, CUBIT_TRUE);
+			}
 
-            // we had an error, so copy the original body into the copy list
-          from_BODY_copy = this->copy_BODY(from_BODY);
-          from_BODY_list_copy.change_to(from_BODY_copy);
-          tool_BODY_copy = this->copy_BODY(tool_BODY);
-          tool_BODY_list_copy.change_to(tool_BODY_copy);
-          sub_stat = CUBIT_FAILURE;
-        }
-        else
-        {
-          // else subtract was successful; make another tool body
-          tool_BODY_copy = this->copy_BODY(tool_BODY);
-          if( imprint )
-            imprint_BODYs( tool_BODY_copy, from_BODY_copy );
-          tool_BODY_list_copy.change_to(tool_BODY_copy);
-        }
+		      // we had an error, so copy the original body into the copy list
+		      from_BODY_copy = this->copy_BODY(from_BODY);
+		      from_BODY_list_copy.change_to(from_BODY_copy);
+		      tool_BODY_copy = this->copy_BODY(tool_BODY);
+		      tool_BODY_list_copy.change_to(tool_BODY_copy);
+		      sub_stat = CUBIT_FAILURE;
+		    }
+		  else
+		    {
+		      // else subtract was successful; make another tool body
+		      tool_BODY_copy = this->copy_BODY(tool_BODY);
+		      if( imprint )
+			imprint_BODYs( tool_BODY_copy, from_BODY_copy );
+		      tool_BODY_list_copy.change_to(tool_BODY_copy);
+		    }
       
-				//For nonregularized boolean, find all internal surfaces and delete
+		  //For nonregularized boolean, find all internal surfaces and delete
 
-	if ( bool_type == NONREG_SUBTRACTION)
-	{
-		  outcome result1;
-		  // ENTITY_LIST FACES;
-          DLIList<FACE*>  FACE_list ;
-		  FACE *this_FACE;
-          AcisQueryEngine::instance()->get_FACEs(from_BODY_copy,FACE_list);
-		   // loop through all faces
-		  for( int i = 0; i< FACE_list.size(); i++)
-		  {
+		  if ( bool_type == NONREG_SUBTRACTION)
+		    {
+		      outcome result1;
+		      // ENTITY_LIST FACES;
+		      DLIList<FACE*>  FACE_list ;
+		      FACE *this_FACE;
+		      AcisQueryEngine::instance()->get_FACEs(from_BODY_copy,FACE_list);
+		      // loop through all faces
+		      for( int i = 0; i< FACE_list.size(); i++)
+			{
 			  this_FACE = FACE_list.get_and_step();
 			  assert( this_FACE != NULL );
 			  // Make sure this is a DOUBLE_SIDED FACE
 			  if (this_FACE->sides() == DOUBLE_SIDED)
-			  {
-				  if (this_FACE->cont()==BOTH_INSIDE)
-				  {
-					  // found internal faces
-					  // Now we have the FACE - unhook it  from the BODY.  Keep track of new
-					  // BODIES that are created as this is done.
-					   PRINT_INFO( " Unhooking and deleting each internal surface...\n" );
-					   BODY *new_BODY_ptr;
-					   result1 = api_unhook_face( this_FACE, new_BODY_ptr );
-					   if( !result1.ok() )
-					   {
-						   AcisModifyEngine::instance()->get_acis_query_engine()->ACIS_API_error( result1 );
-						   PRINT_ERROR( " Face unhooking during rebuild of volume didn't work\n" );
-						   return CUBIT_FAILURE;
-					   }
-					   AcisQueryEngine::instance()->delete_ACIS_BODY (new_BODY_ptr);
-				  }
-			  }
-		  }
+			    {
+			      if (this_FACE->cont()==BOTH_INSIDE)
+				{
+				  // found internal faces
+				  // Now we have the FACE - unhook it  from the BODY.  Keep track of new
+				  // BODIES that are created as this is done.
+				  PRINT_INFO( " Unhooking and deleting each internal surface...\n" );
+				  BODY *new_BODY_ptr;
+				  result1 = api_unhook_face( this_FACE, new_BODY_ptr );
+				  if( !result1.ok() )
+				    {
+				      AcisModifyEngine::instance()->get_acis_query_engine()->ACIS_API_error( result1 );
+				      PRINT_ERROR( " Face unhooking during rebuild of volume didn't work\n" );
+				      return CUBIT_FAILURE;
+				    }
+				  AcisQueryEngine::instance()->delete_ACIS_BODY (new_BODY_ptr);
+				}
+			    }
+			}
 
-		 // heal the leftover body
-//
-//		   PRINT_INFO(" Healing the leftover volume...\n");
-//		   if( AcisHealerTool::instance()->init_BODY_for_healing( master ) == CUBIT_SUCCESS )
-//		   {
-//			   int percent_before, percent_after, number_splines_simplified;
-//			   if( AcisHealerTool::instance()->heal_BODY( master, percent_before,
-//				   percent_after, number_splines_simplified ) == CUBIT_FAILURE )
-//				   PRINT_ERROR( "Error healing the combined volume\n" );
-//			   else
-//				   PRINT_INFO( "Successfully healed the combined volume.\n" );
-//			   AcisHealerTool::instance()->end_BODY_for_healing( master );
-//		   }
+		      // heal the leftover body
+		      //
+		      //		   PRINT_INFO(" Healing the leftover volume...\n");
+		      //		   if( AcisHealerTool::instance()->init_BODY_for_healing( master ) == CUBIT_SUCCESS )
+		      //		   {
+		      //			   int percent_before, percent_after, number_splines_simplified;
+		      //			   if( AcisHealerTool::instance()->heal_BODY( master, percent_before,
+		      //				   percent_after, number_splines_simplified ) == CUBIT_FAILURE )
+		      //				   PRINT_ERROR( "Error healing the combined volume\n" );
+		      //			   else
+		      //				   PRINT_INFO( "Successfully healed the combined volume.\n" );
+		      //			   AcisHealerTool::instance()->end_BODY_for_healing( master );
+		      //		   }
+		    }
+
+		  // done with this j iteration; write out count, if necessary
+		  if (from_bodies.size() * tool_body_list.size() > 1)
+		    {
+		      int frac_done = (10 * ii) / (from_bodies.size()* tool_body_list.size());
+		      if ((10 - frac_done) < fraction_remaining)
+			{
+			  PRINT_INFO("%d ", fraction_remaining);
+			  fraction_remaining--;
+			}
+		    }
+		}
+	      tool_boxes.step();
+	      tool_BODY_list.step();
+	      tool_BODY_list_copy.step();
+
+	    }
+
+	  // done with iteration over ii; step the lists
+	  from_BODY_list_copy.step();
+	  from_BODY_list.step();
+	  from_bodies.step();
 	}
 
-           // done with this j iteration; write out count, if necessary
-        if (from_bodies.size() * tool_body_list.size() > 1)
-        {
-          int frac_done = (10 * ii) / (from_bodies.size()* tool_body_list.size());
-          if ((10 - frac_done) < fraction_remaining)
-          {
-            PRINT_INFO("%d ", fraction_remaining);
-            fraction_remaining--;
-          }
-        }
-      }
-      tool_boxes.step();
-      tool_BODY_list.step();
-      tool_BODY_list_copy.step();
+      // ok, we're done with all the imprints; construct new Body's for the new BODY's
+      from_BODY_list_copy.reset();
+      from_BODY_list.reset();
+      from_bodies.reset();
 
-    }
+      for (ii = 0; ii< from_BODY_list_copy.size(); ii++)
+	{
+	  BODY *old_BODY = from_BODY_list.get();
+	  BODY *new_BODY = from_BODY_list_copy.get();
 
-      // done with iteration over ii; step the lists
-    from_BODY_list_copy.step();
-    from_BODY_list.step();
-    from_bodies.step();
-  }
+	  BodySM *new_body = NULL;
+	  if (old_BODY != new_BODY)
+	    new_body = get_new_Body(from_bodies.get(), old_BODY, new_BODY, keep_old);
 
-    // ok, we're done with all the imprints; construct new Body's for the new BODY's
-  from_BODY_list_copy.reset();
-  from_BODY_list.reset();
-  from_bodies.reset();
+	  if (new_body)
+	    {
+	      new_from_bodies.append(new_body);
+	      from_bodies.change_to(NULL);
+	    }
 
-  for (ii = 0; ii< from_BODY_list_copy.size(); ii++)
-  {
-      BODY *old_BODY = from_BODY_list.get();
-      BODY *new_BODY = from_BODY_list_copy.get();
+	  // now step all the lists
+	  from_BODY_list.step();
+	  from_BODY_list_copy.step();
+	  from_bodies.step();
+	}
 
-      BodySM *new_body = NULL;
-      if (old_BODY != new_BODY)
-         new_body = get_new_Body(from_bodies.get(), old_BODY, new_BODY, keep_old);
+      from_bodies.remove_all_with_value(NULL);
+      from_bodies.reset();
+      new_from_bodies.reset();
 
-      if (new_body)
-      {
-        new_from_bodies.append(new_body);
-        from_bodies.change_to(NULL);
-      }
+      for(ii = tool_BODY_list_copy.size(); ii>0; ii--)
+	AcisQueryEngine::instance()->delete_ACIS_BODY(tool_BODY_list_copy.get_and_step(), CUBIT_TRUE);
 
-      // now step all the lists
-    from_BODY_list.step();
-    from_BODY_list_copy.step();
-    from_bodies.step();
-  }
+      if (sub_stat == CUBIT_SUCCESS && !keep_old)
+	AcisQueryEngine::instance()->delete_solid_model_entities(tool_body_list);
 
-  from_bodies.remove_all_with_value(NULL);
-  from_bodies.reset();
-  new_from_bodies.reset();
+      for(ii = tool_boxes.size(); ii>0; ii--)
+	delete tool_boxes.get_and_step();
 
-  for(ii = tool_BODY_list_copy.size(); ii>0; ii--)
-     AcisQueryEngine::instance()->delete_ACIS_BODY(tool_BODY_list_copy.get_and_step(), CUBIT_TRUE);
+      return CUBIT_SUCCESS;
+    }
 
-  if (sub_stat == CUBIT_SUCCESS && !keep_old)
-    AcisQueryEngine::instance()->delete_solid_model_entities(tool_body_list);
+  //-------------------------------------------------------------------------
+  // Purpose       : Boolean Operation of two Bodys: imprint
+  //
+  // Special Notes :
+  //
+  // Creator       : Malcolm J. Panthaki
+  //
+  // Creation Date : 10/30/96
+  //-------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::imprint(BodySM* BodyPtr1,
+					BodySM* BodyPtr2,
+					BodySM*& newBodyPtr1,
+					BodySM*& newBodyPtr2,
+					bool keep_old) const
+    {
+      // There are two many places things can go wrong. When they do, in
+      // addition to returning a CUBIT_FAILURE, we should return some sensible
+      // values through the output arguments. Before any of the output Body's can
+      // be created, the most sensible for these is NULL.
+      newBodyPtr1 = NULL ;
+      newBodyPtr2 = NULL ;
 
-  for(ii = tool_boxes.size(); ii>0; ii--)
-     delete tool_boxes.get_and_step();
+      // first, check bounding SPAbox; if they don't intersect, imprint will fail
+      AcisQueryEngine* aqe = AcisQueryEngine::instance();
+      BODY* BODYPtr1 =  aqe->get_BODY(BodyPtr1);
+      BODY* BODYPtr2 =  aqe->get_BODY(BodyPtr2);
 
-  return CUBIT_SUCCESS;
-}
+      if( (BODYPtr1 == NULL) || (BODYPtr2 == NULL) )
+	{
+	  return CUBIT_FAILURE;
+	}
 
-//-------------------------------------------------------------------------
-// Purpose       : Boolean Operation of two Bodys: imprint
-//
-// Special Notes :
-//
-// Creator       : Malcolm J. Panthaki
-//
-// Creation Date : 10/30/96
-//-------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::imprint(BodySM* BodyPtr1,
-                                      BodySM* BodyPtr2,
-                                      BodySM*& newBodyPtr1,
-                                      BodySM*& newBodyPtr2,
-                                      bool keep_old) const
-{
-    // There are two many places things can go wrong. When they do, in
-    // addition to returning a CUBIT_FAILURE, we should return some sensible
-    // values through the output arguments. Before any of the output Body's can
-    // be created, the most sensible for these is NULL.
-  newBodyPtr1 = NULL ;
-  newBodyPtr2 = NULL ;
+      CubitBox box1 = aqe->bounding_box(aqe->bounding_box(BODYPtr1));
+      CubitBox box2 = aqe->bounding_box(aqe->bounding_box(BODYPtr2));
+      if (! box1.overlap(SPAresabs, box2))
+	return CUBIT_FAILURE;
 
-    // first, check bounding SPAbox; if they don't intersect, imprint will fail
-  AcisQueryEngine* aqe = AcisQueryEngine::instance();
-  BODY* BODYPtr1 =  aqe->get_BODY(BodyPtr1);
-  BODY* BODYPtr2 =  aqe->get_BODY(BodyPtr2);
+      // Make copies of the ACIS bodies. This is required because if the ultimate
+      // result is a body with no LUMPs, then we need to be able to restore
+      // the original BODY's and their Bodies.
+      BODY* BODYPtr1Save;
+      BODY* BODYPtr2Save;
 
-  if( (BODYPtr1 == NULL) || (BODYPtr2 == NULL) )
-  {
-    return CUBIT_FAILURE;
-  }
+      // pass in keep_old to the delete_owner_attrib flag; if we're not keeping
+      // old bodies, we want to keep the owner attrib, so we can pick up entities
+      // that didn't change
+      bool delete_attribs =
+	(GeometryModifyTool::instance()->get_new_ids() || keep_old);
+      BODYPtr1Save = this->copy_BODY(BODYPtr1, delete_attribs);
+      if (BODYPtr1Save == NULL)
+	{
+	  PRINT_ERROR("Copy of volume failed.\n       Imprint failed.\n");
+	  return CUBIT_FAILURE;
+	}
+      BODYPtr2Save = this->copy_BODY(BODYPtr2, delete_attribs);
+      if (BODYPtr2Save == NULL)
+	{
+	  AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr1Save, CUBIT_TRUE);
+	  PRINT_ERROR("Copy of volume failed.\n       Imprint failed.\n");
+	  return CUBIT_FAILURE;
+	}
 
-  CubitBox box1 = aqe->bounding_box(aqe->bounding_box(BODYPtr1));
-  CubitBox box2 = aqe->bounding_box(aqe->bounding_box(BODYPtr2));
-  if (! box1.overlap(SPAresabs, box2))
-    return CUBIT_FAILURE;
+      // Keep track of the number of curves/surfaces/vertices in each body.  That
+      // way we can tell if they really changed.
+      int num_vol1_bef, num_face1_bef, num_edge1_bef, num_vertex1_bef;
+      if( AcisQueryEngine::instance()->number_ENTITIES( BODYPtr1Save, num_vol1_bef, num_face1_bef, num_edge1_bef,
+							num_vertex1_bef ) == CUBIT_FAILURE )
+	{
+	  PRINT_ERROR( "Unable to count number of entities in volume\n" );
+	  return CUBIT_FAILURE;
+	}
+      int num_vol2_bef, num_face2_bef, num_edge2_bef, num_vertex2_bef;
+      if( AcisQueryEngine::instance()->number_ENTITIES( BODYPtr2Save, num_vol2_bef, num_face2_bef, num_edge2_bef,
+							num_vertex2_bef ) == CUBIT_FAILURE )
+	{
+	  PRINT_ERROR( "Unable to count number of entities in volume\n" );
+	  return CUBIT_FAILURE;
+	}
 
-    // Make copies of the ACIS bodies. This is required because if the ultimate
-    // result is a body with no LUMPs, then we need to be able to restore
-    // the original BODY's and their Bodies.
-  BODY* BODYPtr1Save;
-  BODY* BODYPtr2Save;
+      // Now, imprint the 2 BODYs
+      if ( GeometryModifyTool::get_all_edges_imprint() )
+	{
+	  api_set_int_option("all_free_edges", TRUE );
+	}
 
-    // pass in keep_old to the delete_owner_attrib flag; if we're not keeping
-    // old bodies, we want to keep the owner attrib, so we can pick up entities
-    // that didn't change
-  bool delete_attribs =
-      (GeometryModifyTool::instance()->get_new_ids() || keep_old);
-  BODYPtr1Save = this->copy_BODY(BODYPtr1, delete_attribs);
-  if (BODYPtr1Save == NULL)
-  {
-    PRINT_ERROR("Copy of volume failed.\n       Imprint failed.\n");
-    return CUBIT_FAILURE;
-  }
-  BODYPtr2Save = this->copy_BODY(BODYPtr2, delete_attribs);
-  if (BODYPtr2Save == NULL)
-  {
-    AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr1Save, CUBIT_TRUE);
-    PRINT_ERROR("Copy of volume failed.\n       Imprint failed.\n");
-    return CUBIT_FAILURE;
-  }
+      outcome result = api_imprint( BODYPtr1Save, BODYPtr2Save );
 
-    // Keep track of the number of curves/surfaces/vertices in each body.  That
-    // way we can tell if they really changed.
-  int num_vol1_bef, num_face1_bef, num_edge1_bef, num_vertex1_bef;
-  if( AcisQueryEngine::instance()->number_ENTITIES( BODYPtr1Save, num_vol1_bef, num_face1_bef, num_edge1_bef,
-                       num_vertex1_bef ) == CUBIT_FAILURE )
-  {
-     PRINT_ERROR( "Unable to count number of entities in volume\n" );
-     return CUBIT_FAILURE;
-  }
-  int num_vol2_bef, num_face2_bef, num_edge2_bef, num_vertex2_bef;
-  if( AcisQueryEngine::instance()->number_ENTITIES( BODYPtr2Save, num_vol2_bef, num_face2_bef, num_edge2_bef,
-                       num_vertex2_bef ) == CUBIT_FAILURE )
-  {
-     PRINT_ERROR( "Unable to count number of entities in volume\n" );
-     return CUBIT_FAILURE;
-  }
+      //Gets rid of sliver curves/surfaces that could get produced by the imprint.
+      AcisModifyEngine::instance()->cleanup_slivers( BODYPtr1Save ); 
+      AcisModifyEngine::instance()->cleanup_slivers( BODYPtr2Save ); 
 
-    // Now, imprint the 2 BODYs
-  if ( GeometryModifyTool::get_all_edges_imprint() )
-  {
-    api_set_int_option("all_free_edges", TRUE );
-  }
+      if ( GeometryModifyTool::get_all_edges_imprint() )
+	{
+	  api_set_int_option("all_free_edges", FALSE );
+	}
 
-  outcome result = api_imprint( BODYPtr1Save, BODYPtr2Save );
+      if (!result.ok())
+	{
+	  // might just be no overlap, check smaller boxes
+	  if (!BODYPtr1Save || !BODYPtr2Save ||
+	      box1.overlap(SPAresabs,box2) == CUBIT_TRUE)
+	    {
+	      if (DEBUG_FLAG(95))
+		{
+		  AcisQueryEngine::instance()->ACIS_API_error(result, "imprint Bodies");
+		}
 
-   //Gets rid of sliver curves/surfaces that could get produced by the imprint.
-   AcisModifyEngine::instance()->cleanup_slivers( BODYPtr1Save ); 
-   AcisModifyEngine::instance()->cleanup_slivers( BODYPtr2Save ); 
+	      if (BODYPtr1Save != NULL)
+		{
+		  AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr1Save, CUBIT_TRUE);
+		}
+	      if (BODYPtr2Save != NULL)
+		{
+		  AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr2Save, CUBIT_TRUE);
+		}
+	      return CUBIT_FAILURE;
+	    }
+	}
 
-  if ( GeometryModifyTool::get_all_edges_imprint() )
-  {
-    api_set_int_option("all_free_edges", FALSE );
-  }
 
-  if (!result.ok())
-  {
-      // might just be no overlap, check smaller boxes
-    if (!BODYPtr1Save || !BODYPtr2Save ||
-        box1.overlap(SPAresabs,box2) == CUBIT_TRUE)
-    {
-      if (DEBUG_FLAG(95))
-      {
-        AcisQueryEngine::instance()->ACIS_API_error(result, "imprint Bodies");
-      }
+      // Compare body 1 before & after imprint
+      int num_vol1_aft, num_face1_aft, num_edge1_aft, num_vertex1_aft;
+      if( AcisQueryEngine::instance()->
+	  number_ENTITIES( BODYPtr1Save, num_vol1_aft, num_face1_aft, num_edge1_aft,
+			   num_vertex1_aft ) == CUBIT_FAILURE )
+	{
+	  PRINT_ERROR( "Unable to count number of entities in volume\n" );
+	  if (BODYPtr1Save != NULL)
+	    {
+	      AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr1Save, CUBIT_TRUE);
+	    }
+	  if (BODYPtr2Save != NULL)
+	    {
+	      AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr2Save, CUBIT_TRUE);
+	    }
+	  return CUBIT_FAILURE;
+	}
 
-      if (BODYPtr1Save != NULL)
-      {
-        AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr1Save, CUBIT_TRUE);
-      }
-      if (BODYPtr2Save != NULL)
-      {
-        AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr2Save, CUBIT_TRUE);
-      }
-      return CUBIT_FAILURE;
-    }
-  }
+      // Only create a new Body1 if it changed
+      if( num_vol1_bef != num_vol1_aft ||
+	  num_face1_bef != num_face1_aft ||
+	  num_edge1_bef != num_edge1_aft ||
+	  num_vertex1_bef != num_vertex1_aft ||
+	  GeometryModifyTool::instance()->get_group_imprint() == CUBIT_FALSE)
+	{
+	  DLIList<EDGE*> new_edges = AcisModifyEngine::instance()->find_new_EDGES(BODYPtr2Save);
 
+	  newBodyPtr1 = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr1Save);
+	  if (newBodyPtr1 == NULL )
+	    {
+	      PRINT_ERROR("Problems creating topology for imprinted volume.\n") ;
+	      if (BODYPtr1Save != NULL)
+		{
+		  AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr1Save, CUBIT_TRUE);
+		}
+	      if (BODYPtr2Save != NULL)
+		{
+		  AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr2Save, CUBIT_TRUE);
+		}
+	      return CUBIT_FAILURE;
+	    }
 
-    // Compare body 1 before & after imprint
-  int num_vol1_aft, num_face1_aft, num_edge1_aft, num_vertex1_aft;
-  if( AcisQueryEngine::instance()->
-      number_ENTITIES( BODYPtr1Save, num_vol1_aft, num_face1_aft, num_edge1_aft,
-                       num_vertex1_aft ) == CUBIT_FAILURE )
-  {
-     PRINT_ERROR( "Unable to count number of entities in volume\n" );
-    if (BODYPtr1Save != NULL)
-    {
-      AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr1Save, CUBIT_TRUE);
-    }
-    if (BODYPtr2Save != NULL)
-    {
-      AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr2Save, CUBIT_TRUE);
-    }
-     return CUBIT_FAILURE;
-  }
+	  // Add a imprint feature to the topo edges
+	  for (int edge_count = new_edges.size(); edge_count--; ) 
+	    {
+	      CubitSimpleAttrib *tmp_attrib = new CubitSimpleAttrib( "SOURCE_FEATURE", "IMPRINT" );
+	      new ATTRIB_SNL_SIMPLE( new_edges[edge_count], tmp_attrib );
+	      delete tmp_attrib;
+	    }
 
-  // Only create a new Body1 if it changed
-  if( num_vol1_bef != num_vol1_aft ||
-      num_face1_bef != num_face1_aft ||
-      num_edge1_bef != num_edge1_aft ||
-      num_vertex1_bef != num_vertex1_aft ||
-      GeometryModifyTool::instance()->get_group_imprint() == CUBIT_FALSE)
-  {
-      DLIList<EDGE*> new_edges = AcisModifyEngine::instance()->find_new_EDGES(BODYPtr2Save);
+	  //BodyPtr1->switch_entity_names(newBodyPtr1);
+	  if (GeometryModifyTool::get_old_names())
+	    {
+	      Body* model_ent = dynamic_cast<Body*>(BodyPtr1->topology_entity());
+	      if (model_ent)
+		{
+		  Body* new_model_ent = dynamic_cast<Body*>(newBodyPtr1->topology_entity());
+		  if (!new_model_ent)
+		    new_model_ent = GeometryQueryTool::instance()->make_Body(newBodyPtr1);
+		  model_ent->switch_entity_names(new_model_ent);
+		}
+	    }
 
-      newBodyPtr1 = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr1Save);
-      if (newBodyPtr1 == NULL )
-      {
-          PRINT_ERROR("Problems creating topology for imprinted volume.\n") ;
-          if (BODYPtr1Save != NULL)
-          {
-              AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr1Save, CUBIT_TRUE);
-          }
-          if (BODYPtr2Save != NULL)
-          {
-              AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr2Save, CUBIT_TRUE);
-          }
-          return CUBIT_FAILURE;
-      }
+	  if (keep_old == CUBIT_FALSE)
+	    AcisQueryEngine::instance()->delete_solid_model_entities(BodyPtr1);
+	}
+      else
+	{
+	  AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr1Save, CUBIT_TRUE);
+	}
 
-      // Add a imprint feature to the topo edges
-      for (int edge_count = new_edges.size(); edge_count--; ) 
-      {
-          CubitSimpleAttrib *tmp_attrib = new CubitSimpleAttrib( "SOURCE_FEATURE", "IMPRINT" );
-          new ATTRIB_SNL_SIMPLE( new_edges[edge_count], tmp_attrib );
-          delete tmp_attrib;
-      }
+      // Compare body 2 before & after imprint
+      int num_vol2_aft, num_face2_aft, num_edge2_aft, num_vertex2_aft;
+      if( AcisQueryEngine::instance()->number_ENTITIES( BODYPtr2Save, num_vol2_aft, num_face2_aft, num_edge2_aft,
+							num_vertex2_aft ) == CUBIT_FAILURE )
+	{
+	  PRINT_ERROR( "Unable to count number of entities in volume.\n");
+	  if (BODYPtr1Save != NULL)
+	    {
+	      AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr1Save, CUBIT_TRUE);
+	    }
+	  if (BODYPtr2Save != NULL)
+	    {
+	      AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr2Save, CUBIT_TRUE);
+	    }
+	  return CUBIT_FAILURE;
+	}
 
-     //BodyPtr1->switch_entity_names(newBodyPtr1);
-     if (GeometryModifyTool::get_old_names())
-     {
-       Body* model_ent = dynamic_cast<Body*>(BodyPtr1->topology_entity());
-       if (model_ent)
-       {
-         Body* new_model_ent = dynamic_cast<Body*>(newBodyPtr1->topology_entity());
-         if (!new_model_ent)
-           new_model_ent = GeometryQueryTool::instance()->make_Body(newBodyPtr1);
-         model_ent->switch_entity_names(new_model_ent);
-       }
-     }
+      // Only create a new Body2 if it changed
+      if( num_vol2_bef != num_vol2_aft ||
+	  num_face2_bef != num_face2_aft ||
+	  num_edge2_bef != num_edge2_aft ||
+	  num_vertex2_bef != num_vertex2_aft ||
+	  GeometryModifyTool::instance()->get_group_imprint() == CUBIT_FALSE)
+	{
+	  DLIList<EDGE*> new_edges = AcisModifyEngine::instance()->find_new_EDGES(BODYPtr2Save);
 
-     if (keep_old == CUBIT_FALSE)
-       AcisQueryEngine::instance()->delete_solid_model_entities(BodyPtr1);
-  }
-  else
-  {
-     AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr1Save, CUBIT_TRUE);
-  }
+	  newBodyPtr2 = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr2Save);
+	  if (newBodyPtr2 == NULL )
+	    {
+	      PRINT_ERROR("Problems creating topology for imprinted volume.\n" ) ;
+	      if (BODYPtr2Save != NULL)
+		{
+		  AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr2Save, CUBIT_TRUE);
+		}
+	      return CUBIT_FAILURE;
+	    }
 
-  // Compare body 2 before & after imprint
-  int num_vol2_aft, num_face2_aft, num_edge2_aft, num_vertex2_aft;
-  if( AcisQueryEngine::instance()->number_ENTITIES( BODYPtr2Save, num_vol2_aft, num_face2_aft, num_edge2_aft,
-                       num_vertex2_aft ) == CUBIT_FAILURE )
-  {
-     PRINT_ERROR( "Unable to count number of entities in volume.\n");
-    if (BODYPtr1Save != NULL)
-    {
-      AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr1Save, CUBIT_TRUE);
-    }
-    if (BODYPtr2Save != NULL)
-    {
-      AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr2Save, CUBIT_TRUE);
-    }
-     return CUBIT_FAILURE;
-  }
+	  // Add a imprint feature to the topo edges
+	  for (int edge_count = new_edges.size(); edge_count--; ) 
+	    {
+	      CubitSimpleAttrib *tmp_attrib = new CubitSimpleAttrib( "SOURCE_FEATURE", "IMPRINT" );
+	      new ATTRIB_SNL_SIMPLE( new_edges[edge_count], tmp_attrib );
+	      delete tmp_attrib;
+	    }
 
-  // Only create a new Body2 if it changed
-  if( num_vol2_bef != num_vol2_aft ||
-      num_face2_bef != num_face2_aft ||
-      num_edge2_bef != num_edge2_aft ||
-      num_vertex2_bef != num_vertex2_aft ||
-      GeometryModifyTool::instance()->get_group_imprint() == CUBIT_FALSE)
-  {
-      DLIList<EDGE*> new_edges = AcisModifyEngine::instance()->find_new_EDGES(BODYPtr2Save);
+	  if (GeometryModifyTool::get_old_names())
+	    {
+	      Body* model_ent = dynamic_cast<Body*>(BodyPtr2->topology_entity());
+	      if (model_ent)
+		{
+		  Body* new_model_ent = dynamic_cast<Body*>(newBodyPtr2->topology_entity());
+		  if (!new_model_ent)
+		    new_model_ent = GeometryQueryTool::instance()->make_Body(newBodyPtr2);
+		  model_ent->switch_entity_names(new_model_ent);
+		}
+	    }
 
-      newBodyPtr2 = AcisQueryEngine::instance()->populate_topology_bridges(BODYPtr2Save);
-      if (newBodyPtr2 == NULL )
-      {
-          PRINT_ERROR("Problems creating topology for imprinted volume.\n" ) ;
-          if (BODYPtr2Save != NULL)
-          {
-              AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr2Save, CUBIT_TRUE);
-          }
-          return CUBIT_FAILURE;
-      }
+	  if (keep_old == CUBIT_FALSE)
+	    AcisQueryEngine::instance()->delete_solid_model_entities(BodyPtr2);
+	  //actuate_mesh_intervals( newBodyPtr2 );
+	}
+      else
+	{
+	  AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr2Save, CUBIT_TRUE);
+	}
 
-      // Add a imprint feature to the topo edges
-      for (int edge_count = new_edges.size(); edge_count--; ) 
-      {
-          CubitSimpleAttrib *tmp_attrib = new CubitSimpleAttrib( "SOURCE_FEATURE", "IMPRINT" );
-          new ATTRIB_SNL_SIMPLE( new_edges[edge_count], tmp_attrib );
-          delete tmp_attrib;
-      }
+      // All's well with the world :-)
+      return CUBIT_SUCCESS;
 
-      if (GeometryModifyTool::get_old_names())
-     {
-       Body* model_ent = dynamic_cast<Body*>(BodyPtr2->topology_entity());
-       if (model_ent)
-       {
-         Body* new_model_ent = dynamic_cast<Body*>(newBodyPtr2->topology_entity());
-         if (!new_model_ent)
-           new_model_ent = GeometryQueryTool::instance()->make_Body(newBodyPtr2);
-         model_ent->switch_entity_names(new_model_ent);
-       }
-     }
+    }
 
-     if (keep_old == CUBIT_FALSE)
-       AcisQueryEngine::instance()->delete_solid_model_entities(BodyPtr2);
-     //actuate_mesh_intervals( newBodyPtr2 );
-  }
-  else
-  {
-     AcisQueryEngine::instance()->delete_ACIS_BODY(BODYPtr2Save, CUBIT_TRUE);
-  }
+  BodySM *AcisModifyEngine::get_new_Body(  BodySM *old_Body,
+					   BODY *old_BODY,
+					   BODY *new_BODY,
+					   const bool keep_old,
+					   const bool topology_check,
+					   const bool delete_old) const
+    {
+      if (topology_check)
+	{
+	  // must do topology check between old & new bodies.  In the case
+	  // of a topology check, we know there's only one old and new body
+	  int num_vol_bef, num_face_bef, num_edge_bef, num_vertex_bef;
+	  CubitStatus status1 = AcisQueryEngine::instance()->number_ENTITIES( old_BODY, num_vol_bef,
+									      num_face_bef, num_edge_bef,
+									      num_vertex_bef );
 
-    // All's well with the world :-)
-  return CUBIT_SUCCESS;
+	  int num_vol_aft, num_face_aft, num_edge_aft, num_vertex_aft;
+	  CubitStatus status2 = AcisQueryEngine::instance()->number_ENTITIES( new_BODY, num_vol_aft,
+									      num_face_aft, num_edge_aft,
+									      num_vertex_aft );
 
-}
+	  if( status1 == CUBIT_FAILURE  ||
+	      status2 == CUBIT_FAILURE )
+	    {
+	      PRINT_ERROR( "Unable to count number of entities in volume\n" );
 
-BodySM *AcisModifyEngine::get_new_Body(  BodySM *old_Body,
-                                       BODY *old_BODY,
-                                       BODY *new_BODY,
-                                       const bool keep_old,
-                                       const bool topology_check,
-                                       const bool delete_old) const
-{
-  if (topology_check)
-  {
-      // must do topology check between old & new bodies.  In the case
-      // of a topology check, we know there's only one old and new body
-    int num_vol_bef, num_face_bef, num_edge_bef, num_vertex_bef;
-    CubitStatus status1 = AcisQueryEngine::instance()->number_ENTITIES( old_BODY, num_vol_bef,
-                                           num_face_bef, num_edge_bef,
-                                           num_vertex_bef );
+	      return 0;
+	    }
 
-    int num_vol_aft, num_face_aft, num_edge_aft, num_vertex_aft;
-    CubitStatus status2 = AcisQueryEngine::instance()->number_ENTITIES( new_BODY, num_vol_aft,
-                                           num_face_aft, num_edge_aft,
-                                           num_vertex_aft );
+	  if( num_vol_bef == num_vol_aft &&
+	      num_face_bef == num_face_aft &&
+	      num_edge_bef == num_edge_aft &&
+	      num_vertex_bef == num_vertex_aft)
+	    {
+	      AcisQueryEngine::instance()->delete_ACIS_BODY(new_BODY, CUBIT_TRUE);
+	      return 0;
+	    }
+	}
 
-    if( status1 == CUBIT_FAILURE  ||
-        status2 == CUBIT_FAILURE )
-    {
-      PRINT_ERROR( "Unable to count number of entities in volume\n" );
+      // convert input to list-based version and pass to overloaded version of
+      // get_new_body
+      DLIList<BodySM*> Body_list(1);
+      if(old_Body != NULL)
+	Body_list.append(old_Body);
+      DLIList<BODY*> BODY_list(1);
+      if(old_BODY != NULL)
+	BODY_list.append(old_BODY);
 
-      return 0;
+      return get_new_Body(Body_list, BODY_list, new_BODY, keep_old, delete_old);
     }
 
-    if( num_vol_bef == num_vol_aft &&
-        num_face_bef == num_face_aft &&
-        num_edge_bef == num_edge_aft &&
-        num_vertex_bef == num_vertex_aft)
+  BodySM *AcisModifyEngine::get_new_Body(DLIList<BodySM*> &old_Body_list,
+					 DLIList<BODY*> &old_BODY_list,
+					 BODY *new_BODY,
+					 const bool keep_old,
+					 const bool delete_old) const
     {
-      AcisQueryEngine::instance()->delete_ACIS_BODY(new_BODY, CUBIT_TRUE);
-      return 0;
-    }
-  }
+      DLIList<BODY*> new_BODY_list;
+      new_BODY_list.append(new_BODY);
+      DLIList<BodySM*> new_Body_list;
+      CubitStatus status = get_new_Body(old_Body_list, old_BODY_list,
+					new_BODY_list, new_Body_list,
+					keep_old, delete_old);
 
-    // convert input to list-based version and pass to overloaded version of
-    // get_new_body
-  DLIList<BodySM*> Body_list(1);
-  if(old_Body != NULL)
-     Body_list.append(old_Body);
-  DLIList<BODY*> BODY_list(1);
-  if(old_BODY != NULL)
-     BODY_list.append(old_BODY);
+      if (status == CUBIT_FAILURE ||
+	  new_Body_list.size() == 0) return NULL;
 
-  return get_new_Body(Body_list, BODY_list, new_BODY, keep_old, delete_old);
-}
+      assert(new_Body_list.size() == 1);
 
-BodySM *AcisModifyEngine::get_new_Body(DLIList<BodySM*> &old_Body_list,
-                                       DLIList<BODY*> &old_BODY_list,
-                                       BODY *new_BODY,
-                                       const bool keep_old,
-                                       const bool delete_old) const
-{
-  DLIList<BODY*> new_BODY_list;
-  new_BODY_list.append(new_BODY);
-  DLIList<BodySM*> new_Body_list;
-  CubitStatus status = get_new_Body(old_Body_list, old_BODY_list,
-                                    new_BODY_list, new_Body_list,
-                                    keep_old, delete_old);
+      return new_Body_list.get();
+    }
 
-  if (status == CUBIT_FAILURE ||
-      new_Body_list.size() == 0) return NULL;
+  CubitStatus AcisModifyEngine::get_new_Body( BodySM *old_Body,
+					      BODY *old_BODY,
+					      DLIList<BODY*> &new_BODY_list,
+					      DLIList<BodySM*> &new_Body_list,
+					      const bool keep_old,
+					      const bool delete_old) const
+    {
+      DLIList<BODY*> old_BODY_list;
+      old_BODY_list.append(old_BODY);
+      DLIList<BodySM*> old_Body_list;
+      old_Body_list.append(old_Body);
+      return get_new_Body(old_Body_list, old_BODY_list,
+			  new_BODY_list, new_Body_list,
+			  keep_old, delete_old);
+    }
 
-  assert(new_Body_list.size() == 1);
-
-  return new_Body_list.get();
-}
-
-CubitStatus AcisModifyEngine::get_new_Body( BodySM *old_Body,
-                                             BODY *old_BODY,
-                                             DLIList<BODY*> &new_BODY_list,
-                                             DLIList<BodySM*> &new_Body_list,
-                                             const bool keep_old,
-                                             const bool delete_old) const
-{
-  DLIList<BODY*> old_BODY_list;
-  old_BODY_list.append(old_BODY);
-  DLIList<BodySM*> old_Body_list;
-  old_Body_list.append(old_Body);
-  return get_new_Body(old_Body_list, old_BODY_list,
-                      new_BODY_list, new_Body_list,
-                      keep_old, delete_old);
-}
-
-CubitStatus AcisModifyEngine::get_new_Body(DLIList<BodySM*> &old_Body_list,
+  CubitStatus AcisModifyEngine::get_new_Body(DLIList<BodySM*> &old_Body_list,
                                              DLIList<BODY*> &old_BODY_list,
                                              DLIList<BODY*> &new_BODY_list,
                                              DLIList<BodySM*> &new_Body_list,
                                              const bool keep_old,
                                              const bool delete_old) const
-{
-  assert(old_Body_list.size() == old_BODY_list.size());
+    {
+      assert(old_Body_list.size() == old_BODY_list.size());
 
-       //&& old_Body_list.size() > 0); It's possible now to have no
-       //old bodies, so don't stress over this
+      //&& old_Body_list.size() > 0); It's possible now to have no
+      //old bodies, so don't stress over this
 
-    // Only create a new Body if it changed
-  BodySM *new_Body = NULL;
+      // Only create a new Body if it changed
+      BodySM *new_Body = NULL;
 
-    // body changed; need to build a new vgi body around
-    // old_BODY, either by reusing old_Body or creating new one
+      // body changed; need to build a new vgi body around
+      // old_BODY, either by reusing old_Body or creating new one
 
-  if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_FALSE &&
-      keep_old == CUBIT_FALSE)
-  {
-      // if we're reusing old refentities, prepare by marking
-      // deactivated the ones that don't get reused, then delete
-      // those
-    int num_deactivd = 0;
-    int i;
-    for (i = old_BODY_list.size(); i > 0; i--)
-      num_deactivd += mark_owners_deactivated_flag(old_BODY_list.get_and_step(),
-                                                   CUBIT_TRUE);
+      if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_FALSE &&
+	  keep_old == CUBIT_FALSE)
+	{
+	  // if we're reusing old refentities, prepare by marking
+	  // deactivated the ones that don't get reused, then delete
+	  // those
+	  int num_deactivd = 0;
+	  int i;
+	  for (i = old_BODY_list.size(); i > 0; i--)
+	    num_deactivd += mark_owners_deactivated_flag(old_BODY_list.get_and_step(),
+							 CUBIT_TRUE);
 
-    int num_reactivd =  0;
-    for (i = new_BODY_list.size(); i > 0; i--)
-      num_reactivd =  mark_owners_deactivated_flag(new_BODY_list.get_and_step(),
-                                                   CUBIT_FALSE);
-    if (DEBUG_FLAG(99))
-    {
-      PRINT_DEBUG_99( "Number of entities deactivated = %d,"
-                      " reactivated = %d\n", num_deactivd, num_reactivd);
-      print_deleted_reused(old_BODY_list, new_BODY_list);
-    }
+	  int num_reactivd =  0;
+	  for (i = new_BODY_list.size(); i > 0; i--)
+	    num_reactivd =  mark_owners_deactivated_flag(new_BODY_list.get_and_step(),
+							 CUBIT_FALSE);
+	  if (DEBUG_FLAG(99))
+	    {
+	      PRINT_DEBUG_99( "Number of entities deactivated = %d,"
+			      " reactivated = %d\n", num_deactivd, num_reactivd);
+	      print_deleted_reused(old_BODY_list, new_BODY_list);
+	    }
 
-      // ok, now unhook the old body from the vgi data (only done if
-      // we aren't keeping old geometry)
-    if (keep_old == CUBIT_FALSE)
-    {
-      for (i = old_BODY_list.size(); i > 0; i--)
-        AcisQueryEngine::instance()->delete_ACIS_BODY(old_BODY_list.get_and_step(), CUBIT_FALSE);
-    }
+	  // ok, now unhook the old body from the vgi data (only done if
+	  // we aren't keeping old geometry)
+	  if (keep_old == CUBIT_FALSE)
+	    {
+	      for (i = old_BODY_list.size(); i > 0; i--)
+		AcisQueryEngine::instance()->delete_ACIS_BODY(old_BODY_list.get_and_step(), CUBIT_FALSE);
+	    }
 
-      // now cleanout the deactivated geometry; automatically unhooks
-      // from the dag
-    cleanout_deactivated_geometry();
-  }
-    // now delete the old body, either obeying or not obeying the
-    // deactivated flags (which is opposite of the
-    // create_new_refents flag)
-  if (GeometryModifyTool::instance()->get_new_ids() && !keep_old && delete_old)
-  {
-    for (int i = old_Body_list.size(); i > 0; i--)
-    {
-      BodySM *old_Body = old_Body_list.get_and_step();
-      AcisQueryEngine::instance()->delete_solid_model_entities(old_Body);
-    }
-  }
+	  // now cleanout the deactivated geometry; automatically unhooks
+	  // from the dag
+	  cleanout_deactivated_geometry();
+	}
+      // now delete the old body, either obeying or not obeying the
+      // deactivated flags (which is opposite of the
+      // create_new_refents flag)
+      if (GeometryModifyTool::instance()->get_new_ids() && !keep_old && delete_old)
+	{
+	  for (int i = old_Body_list.size(); i > 0; i--)
+	    {
+	      BodySM *old_Body = old_Body_list.get_and_step();
+	      AcisQueryEngine::instance()->delete_solid_model_entities(old_Body);
+	    }
+	}
 
-  int i;
-  for (i = new_BODY_list.size(); i > 0; i--)
-  {
-    new_Body = AcisQueryEngine::instance()->populate_topology_bridges(new_BODY_list.get_and_step());
-    if (new_Body != NULL)
-      new_Body_list.append(new_Body);
-    else
-    {
-      PRINT_ERROR("Problems creating new Body from new BODY.\n"
-                  "       get_new_Body failed.\n") ;
-      return CUBIT_FAILURE;
+      int i;
+      for (i = new_BODY_list.size(); i > 0; i--)
+	{
+	  new_Body = AcisQueryEngine::instance()->populate_topology_bridges(new_BODY_list.get_and_step());
+	  if (new_Body != NULL)
+	    new_Body_list.append(new_Body);
+	  else
+	    {
+	      PRINT_ERROR("Problems creating new Body from new BODY.\n"
+			  "       get_new_Body failed.\n") ;
+	      return CUBIT_FAILURE;
+	    }
+	}
+
+      if( keep_old && GeometryModifyTool::get_old_names() )
+	{
+	  // switch names with the first body only
+	  old_Body_list.reset();
+	  BodySM* old_bodysm = old_Body_list.get();
+	  Body* body = dynamic_cast<Body*>(old_bodysm->topology_entity());
+	  if (body)
+	    {
+	      Body* new_body = dynamic_cast<Body*>(new_Body->topology_entity());
+	      if (!new_body)
+		new_body = GeometryQueryTool::instance()->make_Body(new_Body);
+	      body->switch_entity_names(new_body);
+	    }
+	}
+
+      return CUBIT_SUCCESS;
     }
-  }
 
-  if( keep_old && GeometryModifyTool::get_old_names() )
-  {
-      // switch names with the first body only
-    old_Body_list.reset();
-    BodySM* old_bodysm = old_Body_list.get();
-    Body* body = dynamic_cast<Body*>(old_bodysm->topology_entity());
-    if (body)
+  CubitStatus AcisModifyEngine::get_new_Body( DLIList<TopologyBridge*> &old_entity_list,
+					      DLIList<BODY*> &new_BODY_list,
+					      DLIList<BodySM*> &new_Body_list,
+					      const bool keep_old,
+					      const bool delete_old) const
     {
-      Body* new_body = dynamic_cast<Body*>(new_Body->topology_entity());
-      if (!new_body)
-        new_body = GeometryQueryTool::instance()->make_Body(new_Body);
-      body->switch_entity_names(new_body);
-    }
-  }
+      assert(old_entity_list.size() > 0 || keep_old );
 
-  return CUBIT_SUCCESS;
-}
+      // don't do a topology check in this version of get_new_Body
 
-CubitStatus AcisModifyEngine::get_new_Body( DLIList<TopologyBridge*> &old_entity_list,
-                                            DLIList<BODY*> &new_BODY_list,
-                                            DLIList<BodySM*> &new_Body_list,
-                                            const bool keep_old,
-                                            const bool delete_old) const
-{
-  assert(old_entity_list.size() > 0 || keep_old );
+      // need to build a new body or bodies
 
-    // don't do a topology check in this version of get_new_Body
+      if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_FALSE &&
+	  keep_old == CUBIT_FALSE)
+	{
+	  // if we're reusing old refentities, prepare by marking
+	  // deactivated the ones that don't get reused, then delete
+	  // those
+	  int i, j, num_deactivd = 0, num_reactivd = 0;
 
-    // need to build a new body or bodies
+	  ENTITY_LIST old_ENTITY_list, tmp_ENTITY_list;
+	  old_entity_list.reset();
+	  for (i = old_entity_list.size(); i--; )
+	    {
+	      tmp_ENTITY_list.clear();
+	      TopologyBridge* geom_ptr = old_entity_list.get_and_step();
+	      AcisBridge* bridge_ptr = dynamic_cast<AcisBridge*>(geom_ptr);
+	      if (!bridge_ptr)
+		{
+		  PRINT_ERROR("Non-ACIS geometry at %s:%d\n",__FILE__,__LINE__);
+		  continue;
+		}
+	      ENTITY* ENTITY_ptr = bridge_ptr->ENTITY_ptr();
+	      if (!ENTITY_ptr)
+		continue;
 
-  if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_FALSE &&
-      keep_old == CUBIT_FALSE)
-  {
-      // if we're reusing old refentities, prepare by marking
-      // deactivated the ones that don't get reused, then delete
-      // those
-    int i, j, num_deactivd = 0, num_reactivd = 0;
+	      old_ENTITY_list.add(ENTITY_ptr);
 
-    ENTITY_LIST old_ENTITY_list, tmp_ENTITY_list;
-    old_entity_list.reset();
-    for (i = old_entity_list.size(); i--; )
-    {
-      tmp_ENTITY_list.clear();
-      TopologyBridge* geom_ptr = old_entity_list.get_and_step();
-      AcisBridge* bridge_ptr = dynamic_cast<AcisBridge*>(geom_ptr);
-      if (!bridge_ptr)
-      {
-        PRINT_ERROR("Non-ACIS geometry at %s:%d\n",__FILE__,__LINE__);
-        continue;
-      }
-      ENTITY* ENTITY_ptr = bridge_ptr->ENTITY_ptr();
-      if (!ENTITY_ptr)
-        continue;
 
-      old_ENTITY_list.add(ENTITY_ptr);
+	      CubitStatus stat = AcisQueryEngine::instance()->
+		get_child_ENTITYs( ENTITY_ptr, tmp_ENTITY_list, true);
+	      if (!stat)
+		{
+		  PRINT_ERROR("AcisQueryEngine::get_child_ENTITYs failed at %s:%d\n",__FILE__,__LINE__);
+		  continue;
+		}
 
+	      for (j = 0; j < tmp_ENTITY_list.count(); j++)
+		{
+		  old_ENTITY_list.add( tmp_ENTITY_list[j] );
+		}
+	    }
 
-      CubitStatus stat = AcisQueryEngine::instance()->
-        get_child_ENTITYs( ENTITY_ptr, tmp_ENTITY_list, true);
-      if (!stat)
-      {
-        PRINT_ERROR("AcisQueryEngine::get_child_ENTITYs failed at %s:%d\n",__FILE__,__LINE__);
-        continue;
-      }
+	  for (i = 0; i < old_ENTITY_list.count(); i++)
+	    {
+	      // mark the owners deactivated, but don't recurse, since we've got all
+	      // the lower order topology already
+	      num_deactivd += mark_owners_deactivated_flag(old_ENTITY_list[i],
+							   CUBIT_TRUE,
+							   CUBIT_FALSE);
+	    }
 
-      for (j = 0; j < tmp_ENTITY_list.count(); j++)
-      {
-        old_ENTITY_list.add( tmp_ENTITY_list[j] );
-      }
-    }
 
-    for (i = 0; i < old_ENTITY_list.count(); i++)
-    {
-         // mark the owners deactivated, but don't recurse, since we've got all
-         // the lower order topology already
-       num_deactivd += mark_owners_deactivated_flag(old_ENTITY_list[i],
-                                                    CUBIT_TRUE,
-                                                    CUBIT_FALSE);
-    }
+	  for (i = new_BODY_list.size(); i > 0; i--)
+	    num_reactivd += mark_owners_deactivated_flag(new_BODY_list.get_and_step(),
+							 CUBIT_FALSE);
+	  if (DEBUG_FLAG(99))
+	    {
+	      PRINT_DEBUG_99( "Number of entities deactivated = %d,"
+			      " reactivated = %d\n", num_deactivd, num_reactivd);
+	    }
 
+	  // ok, now unhook the old body from the vgi data (only done if
+	  // we aren't keeping old geometry)
+	  if (keep_old == CUBIT_FALSE)
+	    {
+	      ENTITY_LIST to_be_deleted;
+	      for (i = 0; i < old_ENTITY_list.count(); i++)
+		{
+		  // need to check to make sure the old entity isn't in the new body
+		  ENTITY *this_ENTITY = old_ENTITY_list[i];
+		  BODY *this_BODY = AcisQueryEngine::instance()->get_BODY_of_ENTITY(this_ENTITY);
+		  //if the entity is not in the new body, add it to a list of
+		  //entities to be deleted
+		  if (!new_BODY_list.move_to(this_BODY))
+		    to_be_deleted.add(this_ENTITY);
+		}
+	      //delete the ENTITYs in the list
+	      AcisQueryEngine::instance()->delete_ACIS_ENTITY(to_be_deleted);
+	    }
 
-    for (i = new_BODY_list.size(); i > 0; i--)
-      num_reactivd += mark_owners_deactivated_flag(new_BODY_list.get_and_step(),
-                                                   CUBIT_FALSE);
-    if (DEBUG_FLAG(99))
-    {
-      PRINT_DEBUG_99( "Number of entities deactivated = %d,"
-                      " reactivated = %d\n", num_deactivd, num_reactivd);
-    }
+	  // now cleanout the deactivated geometry; automatically unhooks
+	  // from the dag
+	  cleanout_deactivated_geometry();
+	}
 
-      // ok, now unhook the old body from the vgi data (only done if
-      // we aren't keeping old geometry)
-    if (keep_old == CUBIT_FALSE)
-    {
-      ENTITY_LIST to_be_deleted;
-      for (i = 0; i < old_ENTITY_list.count(); i++)
-      {
-          // need to check to make sure the old entity isn't in the new body
-        ENTITY *this_ENTITY = old_ENTITY_list[i];
-        BODY *this_BODY = AcisQueryEngine::instance()->get_BODY_of_ENTITY(this_ENTITY);
-	        //if the entity is not in the new body, add it to a list of
-          //entities to be deleted
-        if (!new_BODY_list.move_to(this_BODY))
-          to_be_deleted.add(this_ENTITY);
-      }
-      //delete the ENTITYs in the list
-      AcisQueryEngine::instance()->delete_ACIS_ENTITY(to_be_deleted);
-    }
 
-      // now cleanout the deactivated geometry; automatically unhooks
-      // from the dag
-    cleanout_deactivated_geometry();
-  }
+      // now delete the old body, either obeying or not obeying the
+      // deactivated flags (which is opposite of the
+      // create_new_refents flag)
+      int i;
+      if (GeometryModifyTool::instance()->get_new_ids() && !keep_old && delete_old)
+	{
+	  for (i = old_entity_list.size(); i > 0; i--)
+	    {
+	      TopologyBridge *old_entity = old_entity_list.get_and_step();
+	      if (BodySM* bod_ptr = dynamic_cast<BodySM*>(old_entity))
+		AcisQueryEngine::instance()->delete_solid_model_entities(bod_ptr);
+	      else
+		AcisQueryEngine::instance()->delete_solid_model_entities(
+									 dynamic_cast<GeometryEntity*>(old_entity),true);
+	    }
+	  cleanout_deactivated_geometry();
+	}
 
+      for (i = new_BODY_list.size(); i > 0; i--)
+	{
+	  BodySM *new_Body = AcisQueryEngine::instance()->populate_topology_bridges(new_BODY_list.get_and_step());
+	  if (new_Body != NULL)
+	    new_Body_list.append(new_Body);
+	  else
+	    {
+	      PRINT_ERROR("Problems creating new Body from new BODY.\n"
+			  "       get_new_Body failed.\n") ;
+	      return CUBIT_FAILURE;
+	    }
+	}
 
-    // now delete the old body, either obeying or not obeying the
-    // deactivated flags (which is opposite of the
-    // create_new_refents flag)
-  int i;
-  if (GeometryModifyTool::instance()->get_new_ids() && !keep_old && delete_old)
-  {
-    for (i = old_entity_list.size(); i > 0; i--)
-    {
-      TopologyBridge *old_entity = old_entity_list.get_and_step();
-      if (BodySM* bod_ptr = dynamic_cast<BodySM*>(old_entity))
-        AcisQueryEngine::instance()->delete_solid_model_entities(bod_ptr);
-      else
-        AcisQueryEngine::instance()->delete_solid_model_entities(
-          dynamic_cast<GeometryEntity*>(old_entity),true);
+      return CUBIT_SUCCESS;
     }
-    cleanout_deactivated_geometry();
-  }
 
-  for (i = new_BODY_list.size(); i > 0; i--)
-  {
-    BodySM *new_Body = AcisQueryEngine::instance()->populate_topology_bridges(new_BODY_list.get_and_step());
-    if (new_Body != NULL)
-      new_Body_list.append(new_Body);
-    else
-    {
-      PRINT_ERROR("Problems creating new Body from new BODY.\n"
-                  "       get_new_Body failed.\n") ;
-      return CUBIT_FAILURE;
-    }
-  }
-
-  return CUBIT_SUCCESS;
-}
-
-int AcisModifyEngine::mark_owners_deactivated_flag(ENTITY *this_ENTITY,
+  int AcisModifyEngine::mark_owners_deactivated_flag(ENTITY *this_ENTITY,
                                                      bool flag,
                                                      bool recurse) const
 
-{
-    // marks as deactivated all the owners of the input BODY,
-    // along with all its children
-    //
-    // order is important here; entities must be put in the
-    // deactivated list from lower order to higher order, that saves
-    // work when removing the DAG nodes from the DAG
-    // (not sure it's absolutely necessary though, since the
-    // remove_from_DAG() function calls that function recursively for
-    // lower order entities)
+    {
+      // marks as deactivated all the owners of the input BODY,
+      // along with all its children
+      //
+      // order is important here; entities must be put in the
+      // deactivated list from lower order to higher order, that saves
+      // work when removing the DAG nodes from the DAG
+      // (not sure it's absolutely necessary though, since the
+      // remove_from_DAG() function calls that function recursively for
+      // lower order entities)
 
-  int num_deactivated = 0;
+      int num_deactivated = 0;
 
-    // if we're not recursing, set the skip flag to true
-  CubitBoolean skip = (recurse ? CUBIT_FALSE : CUBIT_TRUE);
-  ENTITY_LIST ENTITIES;
-  outcome result;
+      // if we're not recursing, set the skip flag to true
+      CubitBoolean skip = (recurse ? CUBIT_FALSE : CUBIT_TRUE);
+      ENTITY_LIST ENTITIES;
+      outcome result;
 
-    // vertices
-  if (IS_ENTITY_TYPE( this_ENTITY, VERTEX )) skip = CUBIT_TRUE;
-  if (!skip) {
-    result = api_get_vertices( this_ENTITY, ENTITIES);
-    num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
-    ENTITIES.clear();
-  }
+      // vertices
+      if (IS_ENTITY_TYPE( this_ENTITY, VERTEX )) skip = CUBIT_TRUE;
+      if (!skip) {
+	result = api_get_vertices( this_ENTITY, ENTITIES);
+	num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
+	ENTITIES.clear();
+      }
 
-    // edges
-  if (IS_ENTITY_TYPE( this_ENTITY, EDGE )) skip = CUBIT_TRUE;
-  if (!skip) {
-    result = api_get_edges( this_ENTITY, ENTITIES);
-    num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
-    ENTITIES.clear();
-  }
+      // edges
+      if (IS_ENTITY_TYPE( this_ENTITY, EDGE )) skip = CUBIT_TRUE;
+      if (!skip) {
+	result = api_get_edges( this_ENTITY, ENTITIES);
+	num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
+	ENTITIES.clear();
+      }
 
-    // coedges
-  if (IS_ENTITY_TYPE( this_ENTITY, COEDGE )) skip = CUBIT_TRUE;
-  if (!skip) {
-    result = api_get_coedges( this_ENTITY, ENTITIES);
-    num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
-    ENTITIES.clear();
-  }
+      // coedges
+      if (IS_ENTITY_TYPE( this_ENTITY, COEDGE )) skip = CUBIT_TRUE;
+      if (!skip) {
+	result = api_get_coedges( this_ENTITY, ENTITIES);
+	num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
+	ENTITIES.clear();
+      }
 
-    // loops
-  if (IS_ENTITY_TYPE( this_ENTITY, LOOP )) skip = CUBIT_TRUE;
-  if (!skip) {
-    result = api_get_loops( this_ENTITY, ENTITIES);
-    num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
-    ENTITIES.clear();
-  }
+      // loops
+      if (IS_ENTITY_TYPE( this_ENTITY, LOOP )) skip = CUBIT_TRUE;
+      if (!skip) {
+	result = api_get_loops( this_ENTITY, ENTITIES);
+	num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
+	ENTITIES.clear();
+      }
 
-    // faces
-  if (IS_ENTITY_TYPE( this_ENTITY, FACE )) skip = CUBIT_TRUE;
-  if (!skip) {
-    result = api_get_faces( this_ENTITY, ENTITIES);
-    num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
-    ENTITIES.clear();
-  }
+      // faces
+      if (IS_ENTITY_TYPE( this_ENTITY, FACE )) skip = CUBIT_TRUE;
+      if (!skip) {
+	result = api_get_faces( this_ENTITY, ENTITIES);
+	num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
+	ENTITIES.clear();
+      }
 
-    // shells
-  if (IS_ENTITY_TYPE( this_ENTITY, SHELL )) skip = CUBIT_TRUE;
-  if (!skip) {
-    result = api_get_shells( this_ENTITY, ENTITIES);
-    num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
-    ENTITIES.clear();
-  }
+      // shells
+      if (IS_ENTITY_TYPE( this_ENTITY, SHELL )) skip = CUBIT_TRUE;
+      if (!skip) {
+	result = api_get_shells( this_ENTITY, ENTITIES);
+	num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
+	ENTITIES.clear();
+      }
 
-    // volumes
-  if (IS_ENTITY_TYPE( this_ENTITY, LUMP )) skip = CUBIT_TRUE;
-  if (!skip) {
-    result = api_get_lumps( this_ENTITY, ENTITIES);
-    num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
-    ENTITIES.clear();
-  }
+      // volumes
+      if (IS_ENTITY_TYPE( this_ENTITY, LUMP )) skip = CUBIT_TRUE;
+      if (!skip) {
+	result = api_get_lumps( this_ENTITY, ENTITIES);
+	num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
+	ENTITIES.clear();
+      }
 
-    // now, finally, do the entity itself
-  ENTITIES.add(this_ENTITY);
-  num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
+      // now, finally, do the entity itself
+      ENTITIES.add(this_ENTITY);
+      num_deactivated += mark_owners_deactivated_flag( ENTITIES, flag );
 
-  return num_deactivated;
-}
+      return num_deactivated;
+    }
 
-int AcisModifyEngine::mark_owners_deactivated_flag( ENTITY_LIST& ENTITIES,
-                                                    bool flag ) const
+  int AcisModifyEngine::mark_owners_deactivated_flag( ENTITY_LIST& ENTITIES,
+						      bool flag ) const
 
-{
-  int num_deactivated = 0;
-
-  for (int i = 0; i < ENTITIES.count(); i++)
-  {
-    AcisBridge *acis_bridge = ATTRIB_CUBIT_OWNER::cubit_owner(ENTITIES[i]);
-    if (acis_bridge != NULL)
     {
-      if (flag == false)
-      {
-          // if bridge was deactivated, re-activate it and...
-        if (reactivate_bridge(acis_bridge))
-        {
-              // ...and get the pointers between
-              // ACIS and the TB right.
-          acis_bridge->ENTITY_ptr(ENTITIES[i]);
-          num_deactivated++;
-        }
-        else // bridge was already reactivated
-        {
-            // if we're reactivating an entity and it has already been reactivated,
-            // that means another acis entity is using it - make this acis entity
-            // get a new one
-          ATTRIB_CUBIT_OWNER::remove_cubit_owner(ENTITIES[i]);
-        }
-      }
+      int num_deactivated = 0;
 
-        // if flag is true and acis_bridge is NOT deactivated,
-        // deactivate it.
-      else if (deactivate_bridge(acis_bridge))
-      {
-        num_deactivated++;
-      }
-    }
-  }
+      for (int i = 0; i < ENTITIES.count(); i++)
+	{
+	  AcisBridge *acis_bridge = ATTRIB_CUBIT_OWNER::cubit_owner(ENTITIES[i]);
+	  if (acis_bridge != NULL)
+	    {
+	      if (flag == false)
+		{
+		  // if bridge was deactivated, re-activate it and...
+		  if (reactivate_bridge(acis_bridge))
+		    {
+		      // ...and get the pointers between
+		      // ACIS and the TB right.
+		      acis_bridge->ENTITY_ptr(ENTITIES[i]);
+		      num_deactivated++;
+		    }
+		  else // bridge was already reactivated
+		    {
+		      // if we're reactivating an entity and it has already been reactivated,
+		      // that means another acis entity is using it - make this acis entity
+		      // get a new one
+		      ATTRIB_CUBIT_OWNER::remove_cubit_owner(ENTITIES[i]);
+		    }
+		}
 
-  return num_deactivated;
-}
+	      // if flag is true and acis_bridge is NOT deactivated,
+	      // deactivate it.
+	      else if (deactivate_bridge(acis_bridge))
+		{
+		  num_deactivated++;
+		}
+	    }
+	}
 
-void AcisModifyEngine::print_deleted_reused(DLIList<BODY*> &old_BODY_list,
+      return num_deactivated;
+    }
+
+  void AcisModifyEngine::print_deleted_reused(DLIList<BODY*> &old_BODY_list,
                                               DLIList<BODY*> &new_BODY_list) const
-{
+    {
 
-    // print out what's saved and what's not
-  DLIList<TopologyBridge*> deact_list, react_list;
-  int i;
-  for (i = old_BODY_list.size(); i > 0; i--)
-    AcisQueryEngine::instance()->get_all_cubit_owners(old_BODY_list.get_and_step(), deact_list);
-  for (i = new_BODY_list.size(); i > 0; i--)
-    AcisQueryEngine::instance()->get_all_cubit_owners(new_BODY_list.get_and_step(), react_list);
-  for (i = react_list.size(); i > 0; i--)
-    deact_list.remove(react_list.get_and_step());
-  PRINT_DEBUG_99( "Deleted entities:\n");
-  for (i = deact_list.size(); i > 0; i--) {
-    TopologyBridge* bridge = deact_list.get_and_step();
-    TopologyEntity *entity = bridge->topology_entity();
-    BasicTopologyEntity *bte = CAST_TO(entity, BasicTopologyEntity);
-    GroupingEntity *grpe = CAST_TO(entity, GroupingEntity);
-    SenseEntity *se = CAST_TO(entity, SenseEntity);
-    if (bte != NULL) {
-      PRINT_DEBUG_99( "%s %d\n",
-                      bte->class_name(),
-                      bte->id());
+      // print out what's saved and what's not
+      DLIList<TopologyBridge*> deact_list, react_list;
+      int i;
+      for (i = old_BODY_list.size(); i > 0; i--)
+	AcisQueryEngine::instance()->get_all_cubit_owners(old_BODY_list.get_and_step(), deact_list);
+      for (i = new_BODY_list.size(); i > 0; i--)
+	AcisQueryEngine::instance()->get_all_cubit_owners(new_BODY_list.get_and_step(), react_list);
+      for (i = react_list.size(); i > 0; i--)
+	deact_list.remove(react_list.get_and_step());
+      PRINT_DEBUG_99( "Deleted entities:\n");
+      for (i = deact_list.size(); i > 0; i--) {
+	TopologyBridge* bridge = deact_list.get_and_step();
+	TopologyEntity *entity = bridge->topology_entity();
+	BasicTopologyEntity *bte = CAST_TO(entity, BasicTopologyEntity);
+	GroupingEntity *grpe = CAST_TO(entity, GroupingEntity);
+	SenseEntity *se = CAST_TO(entity, SenseEntity);
+	if (bte != NULL) {
+	  PRINT_DEBUG_99( "%s %d\n",
+			  bte->class_name(),
+			  bte->id());
+	}
+	else if (se != NULL) {
+	  PRINT_DEBUG_99( "%s (lower BTE: %d)\n",
+			  entity->class_name(),
+			  (se->get_basic_topology_entity_ptr() ?
+			   se->get_basic_topology_entity_ptr()->id() : 0));
+	}
+	else if (grpe != NULL) {
+	  PRINT_DEBUG_99( "%s (upper BTE: %d)\n",
+			  entity->class_name(),
+			  (grpe->get_basic_topology_entity_ptr() ?
+			   grpe->get_basic_topology_entity_ptr()->id() : 0));
+	}
+      }
+      PRINT_DEBUG_99( "ReUsed entities:\n");
+      for (i = react_list.size(); i > 0; i--) {
+	TopologyBridge* bridge = react_list.get_and_step();
+	TopologyEntity *entity = bridge->topology_entity();
+	BasicTopologyEntity *bte = CAST_TO(entity, BasicTopologyEntity);
+	GroupingEntity *grpe = CAST_TO(entity, GroupingEntity);
+	SenseEntity *se = CAST_TO(entity, SenseEntity);
+	if (bte != NULL) {
+	  PRINT_DEBUG_99( "%s %d\n",
+			  bte->class_name(),
+			  bte->id());
+	}
+	else if (se != NULL) {
+	  PRINT_DEBUG_99( "%s (lower BTE: %d)\n",
+			  entity->class_name(),
+			  (se->get_basic_topology_entity_ptr() ?
+			   se->get_basic_topology_entity_ptr()->id() : 0));
+	}
+	else if (grpe != NULL) {
+	  PRINT_DEBUG_99( "%s (upper BTE: %d)\n",
+			  entity->class_name(),
+			  (grpe->get_basic_topology_entity_ptr() ?
+			   grpe->get_basic_topology_entity_ptr()->id() : 0));
+	}
+      }
     }
-    else if (se != NULL) {
-      PRINT_DEBUG_99( "%s (lower BTE: %d)\n",
-                      entity->class_name(),
-                      (se->get_basic_topology_entity_ptr() ?
-                      se->get_basic_topology_entity_ptr()->id() : 0));
-    }
-    else if (grpe != NULL) {
-      PRINT_DEBUG_99( "%s (upper BTE: %d)\n",
-                      entity->class_name(),
-                      (grpe->get_basic_topology_entity_ptr() ?
-                       grpe->get_basic_topology_entity_ptr()->id() : 0));
-    }
-  }
-  PRINT_DEBUG_99( "ReUsed entities:\n");
-  for (i = react_list.size(); i > 0; i--) {
-    TopologyBridge* bridge = react_list.get_and_step();
-    TopologyEntity *entity = bridge->topology_entity();
-    BasicTopologyEntity *bte = CAST_TO(entity, BasicTopologyEntity);
-    GroupingEntity *grpe = CAST_TO(entity, GroupingEntity);
-    SenseEntity *se = CAST_TO(entity, SenseEntity);
-    if (bte != NULL) {
-      PRINT_DEBUG_99( "%s %d\n",
-                      bte->class_name(),
-                      bte->id());
-    }
-    else if (se != NULL) {
-      PRINT_DEBUG_99( "%s (lower BTE: %d)\n",
-                      entity->class_name(),
-                      (se->get_basic_topology_entity_ptr() ?
-                      se->get_basic_topology_entity_ptr()->id() : 0));
-    }
-    else if (grpe != NULL) {
-      PRINT_DEBUG_99( "%s (upper BTE: %d)\n",
-                      entity->class_name(),
-                      (grpe->get_basic_topology_entity_ptr() ?
-                       grpe->get_basic_topology_entity_ptr()->id() : 0));
-    }
-  }
-}
 
-//-------------------------------------------------------------------------
-// Purpose       : Imprint multiple bodies at once
-//
-// Special Notes :
-//
-// Creator       : Tim Tautges
-//
-// Creation Date : 12/8/98
-//-------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::imprint(DLIList<BodySM*> &from_body_list,
-                                      DLIList<BodySM*> &new_from_body_list,
-                                      bool keep_old,
-                                      DLIList<TopologyBridge*> *new_tbs,
-                                      DLIList<TopologyBridge*> *att_tbs) const
-{
+  //-------------------------------------------------------------------------
+  // Purpose       : Imprint multiple bodies at once
+  //
+  // Special Notes :
+  //
+  // Creator       : Tim Tautges
+  //
+  // Creation Date : 12/8/98
+  //-------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::imprint(DLIList<BodySM*> &from_body_list,
+					DLIList<BodySM*> &new_from_body_list,
+					bool keep_old,
+					DLIList<TopologyBridge*> *new_tbs,
+					DLIList<TopologyBridge*> *att_tbs) const
+    {
 
-  DLIList<BODY*> from_BODY_list;
-  DLIList<BODY*> from_BODY_list_copy;
-  CubitStatus success = CUBIT_SUCCESS;
+      DLIList<BODY*> from_BODY_list;
+      DLIList<BODY*> from_BODY_list_copy;
+      CubitStatus success = CUBIT_SUCCESS;
 
-  // get acis bodies, and copy them
-  from_body_list.reset();
-  int i, j;
+      // get acis bodies, and copy them
+      from_body_list.reset();
+      int i, j;
 
-    // pass in keep_old to the delete_owner_attrib flag; if we're not keeping
-    // old bodies, we want to keep the owner attrib, so we can pick up entities
-    // that didn't change
-  bool delete_attribs =
-      (GeometryModifyTool::instance()->get_new_ids() || keep_old);
+      // pass in keep_old to the delete_owner_attrib flag; if we're not keeping
+      // old bodies, we want to keep the owner attrib, so we can pick up entities
+      // that didn't change
+      bool delete_attribs =
+	(GeometryModifyTool::instance()->get_new_ids() || keep_old);
 
-  const int num_bodies = from_body_list.size();
-  from_body_list.reset();
-  for (i = 0; i < num_bodies; i++) {
-    BODY *BODYPtr1 = AcisQueryEngine::get_BODY(from_body_list.next(i));
-    from_BODY_list.append(BODYPtr1);
-    //BODY *BODYPtr1Save = this->copy_BODY(BODYPtr1, delete_attribs);
-    //from_BODY_list_copy.append(BODYPtr1Save);
-    from_BODY_list_copy.append(NULL);
-  }
+      const int num_bodies = from_body_list.size();
+      from_body_list.reset();
+      for (i = 0; i < num_bodies; i++) {
+	BODY *BODYPtr1 = AcisQueryEngine::get_BODY(from_body_list.next(i));
+	from_BODY_list.append(BODYPtr1);
+	//BODY *BODYPtr1Save = this->copy_BODY(BODYPtr1, delete_attribs);
+	//from_BODY_list_copy.append(BODYPtr1Save);
+	from_BODY_list_copy.append(NULL);
+      }
 
-  if (from_BODY_list.is_in_list(NULL))
-    return CUBIT_FAILURE;
+      if (from_BODY_list.is_in_list(NULL))
+	return CUBIT_FAILURE;
 
-  // set the free_edges acis option
-  if ( GeometryModifyTool::get_all_edges_imprint() )
-  {
-    api_set_int_option("all_free_edges", TRUE );
-  }
+      // set the free_edges acis option
+      if ( GeometryModifyTool::get_all_edges_imprint() )
+	{
+	  api_set_int_option("all_free_edges", TRUE );
+	}
 
       // total number of imprints to be done
-  int total_imprints = (from_body_list.size() *
-                        (from_body_list.size()-1))/2;
+      int total_imprints = (from_body_list.size() *
+			    (from_body_list.size()-1))/2;
 
-  if( num_bodies > 2 )
-  {
-     char message[128];
-     sprintf(message, "Imprinting %d ACIS Bodies", from_BODY_list.size() );
-     AppUtil::instance()->progress_tool()->start(0, total_imprints, message);
-  }
+      if( num_bodies > 2 )
+	{
+	  char message[128];
+	  sprintf(message, "Imprinting %d ACIS Bodies", from_BODY_list.size() );
+	  AppUtil::instance()->progress_tool()->start(0, total_imprints, message);
+	}
 
-    // imprint each body with each one later in the list
-  from_BODY_list.reset();
-  from_BODY_list_copy.reset();
-  for (i = 0; success && i < num_bodies - 1; i++) {
-    //BODY *BODY_Ptr1 = from_BODY_list_copy.next(i);
-    BodySM *Body_Ptr1 = from_body_list.next(i);
-    CubitBox box1 = AcisQueryEngine::instance()->bounding_box(Body_Ptr1);
+      // imprint each body with each one later in the list
+      from_BODY_list.reset();
+      from_BODY_list_copy.reset();
+      for (i = 0; success && i < num_bodies - 1; i++) {
+	//BODY *BODY_Ptr1 = from_BODY_list_copy.next(i);
+	BodySM *Body_Ptr1 = from_body_list.next(i);
+	CubitBox box1 = AcisQueryEngine::instance()->bounding_box(Body_Ptr1);
 
-    for (j = i + 1; j < num_bodies; j++) {
+	for (j = i + 1; j < num_bodies; j++) {
 
-      if (CubitMessage::instance()->Interrupt())
-      {
-        success = CUBIT_FAILURE;
-        break;
-      }
+	  if (CubitMessage::instance()->Interrupt())
+	    {
+	      success = CUBIT_FAILURE;
+	      break;
+	    }
 
-      //BODY *BODY_Ptr2 = from_BODY_list_copy.next(j);
-      BodySM *Body_Ptr2 = from_body_list.next(j);
-      CubitBox box2 = AcisQueryEngine::instance()->bounding_box(Body_Ptr2);
+	  //BODY *BODY_Ptr2 = from_BODY_list_copy.next(j);
+	  BodySM *Body_Ptr2 = from_body_list.next(j);
+	  CubitBox box2 = AcisQueryEngine::instance()->bounding_box(Body_Ptr2);
 
-        // first, check bounding SPAbox; if they don't intersect, imprint will fail
+	  // first, check bounding SPAbox; if they don't intersect, imprint will fail
 
-      if (box1.overlap(SPAresabs, box2)) 
-      {
-        if (DEBUG_FLAG(95))
-        {
-          TopologyEntity *te1 = Body_Ptr1->topology_entity();
-          TopologyEntity *te2 = Body_Ptr2->topology_entity();
-          RefEntity *ref1 = CAST_TO(te1, RefEntity );
-          RefEntity *ref2 = CAST_TO(te2, RefEntity );
-          PRINT_INFO("Imprinting bodies %d and %d\n", ref1->id(), ref2->id() );
-        }
+	  if (box1.overlap(SPAresabs, box2)) 
+	    {
+	      if (DEBUG_FLAG(95))
+		{
+		  TopologyEntity *te1 = Body_Ptr1->topology_entity();
+		  TopologyEntity *te2 = Body_Ptr2->topology_entity();
+		  RefEntity *ref1 = CAST_TO(te1, RefEntity );
+		  RefEntity *ref2 = CAST_TO(te2, RefEntity );
+		  PRINT_INFO("Imprinting bodies %d and %d\n", ref1->id(), ref2->id() );
+		}
 
-        BODY* BODY_Ptr1 = from_BODY_list_copy.next(i);
-        BODY* BODY_Ptr2 = from_BODY_list_copy.next(j);
-        if (!BODY_Ptr1)
-          BODY_Ptr1 = from_BODY_list.next(i);
-        if (!BODY_Ptr2)
-          BODY_Ptr2 = from_BODY_list.next(j);
+	      BODY* BODY_Ptr1 = from_BODY_list_copy.next(i);
+	      BODY* BODY_Ptr2 = from_BODY_list_copy.next(j);
+	      if (!BODY_Ptr1)
+		BODY_Ptr1 = from_BODY_list.next(i);
+	      if (!BODY_Ptr2)
+		BODY_Ptr2 = from_BODY_list.next(j);
 
-        BODY_Ptr1 = copy_BODY(BODY_Ptr1, delete_attribs);
-        BODY_Ptr2 = copy_BODY(BODY_Ptr2, delete_attribs);
-        // the bodies overlap; proceed with the imprint
-        outcome result = api_imprint(BODY_Ptr1, BODY_Ptr2);
+	      BODY_Ptr1 = copy_BODY(BODY_Ptr1, delete_attribs);
+	      BODY_Ptr2 = copy_BODY(BODY_Ptr2, delete_attribs);
+	      // the bodies overlap; proceed with the imprint
+	      outcome result = api_imprint(BODY_Ptr1, BODY_Ptr2);
 
-        AcisModifyEngine::instance()->cleanup_slivers( BODY_Ptr1 );
-        AcisModifyEngine::instance()->cleanup_slivers( BODY_Ptr2 );
+	      AcisModifyEngine::instance()->cleanup_slivers( BODY_Ptr1 );
+	      AcisModifyEngine::instance()->cleanup_slivers( BODY_Ptr2 );
 
-        if (result.ok())
-        {
-          from_BODY_list_copy.step(i);
-          if (from_BODY_list_copy.get())
-            api_delent(from_BODY_list_copy.get());
-          from_BODY_list_copy.change_to(BODY_Ptr1);
-          from_BODY_list_copy.reset();
+	      if (result.ok())
+		{
+		  from_BODY_list_copy.step(i);
+		  if (from_BODY_list_copy.get())
+		    api_delent(from_BODY_list_copy.get());
+		  from_BODY_list_copy.change_to(BODY_Ptr1);
+		  from_BODY_list_copy.reset();
 
-          from_BODY_list_copy.step(j);
-          if (from_BODY_list_copy.get())
-            api_delent(from_BODY_list_copy.get());
-          from_BODY_list_copy.change_to(BODY_Ptr2);
-          from_BODY_list_copy.reset();
-        }
-        else
-        {
-          if (DEBUG_FLAG(95)) {
-            AcisQueryEngine::instance()->ACIS_API_error(result, "imprint Bodies");
-          }
+		  from_BODY_list_copy.step(j);
+		  if (from_BODY_list_copy.get())
+		    api_delent(from_BODY_list_copy.get());
+		  from_BODY_list_copy.change_to(BODY_Ptr2);
+		  from_BODY_list_copy.reset();
+		}
+	      else
+		{
+		  if (DEBUG_FLAG(95)) {
+		    AcisQueryEngine::instance()->ACIS_API_error(result, "imprint Bodies");
+		  }
 
-          if (BODY_Ptr1)
-            api_delent(BODY_Ptr1);
-          if (BODY_Ptr2)
-            api_delent(BODY_Ptr2);
-        }
-      } // if overlap
+		  if (BODY_Ptr1)
+		    api_delent(BODY_Ptr1);
+		  if (BODY_Ptr2)
+		    api_delent(BODY_Ptr2);
+		}
+	    } // if overlap
 
+	  if( num_bodies > 2 )
+	    AppUtil::instance()->progress_tool()->step();
+	}
+      }
+
       if( num_bodies > 2 )
-        AppUtil::instance()->progress_tool()->step();
-    }
-  }
+	AppUtil::instance()->progress_tool()->end();
 
-  if( num_bodies > 2 )
-      AppUtil::instance()->progress_tool()->end();
+      if( CubitMessage::instance()->Interrupt() )
+	PRINT_INFO("Imprint aborted.\n");
 
-  if( CubitMessage::instance()->Interrupt() )
-    PRINT_INFO("Imprint aborted.\n");
+      // new_ENTITIES will hold new entities that were created by 
+      // the imprint operation.  att_ENTITIES will hold entities
+      // from the original bodies that had composite attributes
+      // on them.  At the end we will compare the new entities
+      // with the ones that had attributes and if we find matches
+      // we will put a composite attribute on the new entity.
+      // This is how we are handling the imprinting of bodies
+      // with composites.
+      DLIList<ENTITY*> new_ENTITIES;
+      DLIList<ENTITY*> att_ENTITIES;
 
-  // new_ENTITIES will hold new entities that were created by 
-  // the imprint operation.  att_ENTITIES will hold entities
-  // from the original bodies that had composite attributes
-  // on them.  At the end we will compare the new entities
-  // with the ones that had attributes and if we find matches
-  // we will put a composite attribute on the new entity.
-  // This is how we are handling the imprinting of bodies
-  // with composites.
-  DLIList<ENTITY*> new_ENTITIES;
-  DLIList<ENTITY*> att_ENTITIES;
+      // Create/update ACIS Bridges.
+      for ( i = 0; i < num_bodies; i++ )
+	{
+	  BodySM* from_body = from_body_list.next(i);
+	  BODY*   from_BODY = from_BODY_list.next(i);
+	  BODY* new_BODY = from_BODY_list_copy.next(i);
+	  if (new_BODY)
+	    {
+	      // Get the new entities (just edges for now)
+	      // created by the imprint operation.
+	      DLIList<ENTITY*> cur_new_ENTITIES;
+	      if(new_tbs)
+		get_new_ENTITIES(new_BODY, cur_new_ENTITIES);
 
-  // Create/update ACIS Bridges.
-  for ( i = 0; i < num_bodies; i++ )
-  {
-    BodySM* from_body = from_body_list.next(i);
-    BODY*   from_BODY = from_BODY_list.next(i);
-    BODY* new_BODY = from_BODY_list_copy.next(i);
-    if (new_BODY)
-    {
-      // Get the new entities (just edges for now)
-      // created by the imprint operation.
-      DLIList<ENTITY*> cur_new_ENTITIES;
-      if(new_tbs)
-        get_new_ENTITIES(new_BODY, cur_new_ENTITIES);
+	      DLIList<EDGE*> new_edges = AcisModifyEngine::instance()->find_new_EDGES(new_BODY);
 
-      DLIList<EDGE*> new_edges = AcisModifyEngine::instance()->find_new_EDGES(new_BODY);
+	      BodySM* new_body = get_new_Body( from_body, from_BODY, new_BODY, keep_old, true );
+	      if (new_body)
+		{
+		  // Add the new entities to the list we are
+		  // accumulating.
+		  if(new_tbs)
+		    new_ENTITIES += cur_new_ENTITIES;
 
-      BodySM* new_body = get_new_Body( from_body, from_BODY, new_BODY, keep_old, true );
-      if (new_body)
-      {
-        // Add the new entities to the list we are
-        // accumulating.
-        if(new_tbs)
-          new_ENTITIES += cur_new_ENTITIES;
+		  // Get entities with composite attributes.
+		  if(att_tbs)
+		    get_att_ENTITIES(new_BODY, att_ENTITIES, "COMPOSITE_GEOM");
 
-        // Get entities with composite attributes.
-        if(att_tbs)
-          get_att_ENTITIES(new_BODY, att_ENTITIES, "COMPOSITE_GEOM");
+		  // Add a imprint feature to the topo edges
+		  for (int edge_count = new_edges.size(); edge_count--; ) 
+		    {
+		      CubitSimpleAttrib *tmp_attrib = new CubitSimpleAttrib( "SOURCE_FEATURE", "IMPRINT" );
+		      new ATTRIB_SNL_SIMPLE( new_edges[edge_count], tmp_attrib );
+		      delete tmp_attrib;
+		    }
+		  new_from_body_list.append(new_body);
+		}
+	      else
+		{
+		  // Get entities with composite attributes.
+		  if(att_tbs)
+		    get_att_ENTITIES(from_BODY, att_ENTITIES, "COMPOSITE_GEOM");
+		}
+	    }
+	}
 
-        // Add a imprint feature to the topo edges
-        for (int edge_count = new_edges.size(); edge_count--; ) 
-        {
-            CubitSimpleAttrib *tmp_attrib = new CubitSimpleAttrib( "SOURCE_FEATURE", "IMPRINT" );
-            new ATTRIB_SNL_SIMPLE( new_edges[edge_count], tmp_attrib );
-            delete tmp_attrib;
-        }
-        new_from_body_list.append(new_body);
-      }
-      else
-      {
-        // Get entities with composite attributes.
-        if(att_tbs)
-          get_att_ENTITIES(from_BODY, att_ENTITIES, "COMPOSITE_GEOM");
-      }
-    }
-  }
+      // Convert the new_ENTITIES/att_ENTITIES lists into
+      // topology bridge lists.
+      if(new_tbs)
+	{
+	  for(i=new_ENTITIES.size(); i--;)
+	    {
+	      ENTITY *cur_ENT = new_ENTITIES.get_and_step();
+	      AcisBridge *acis_bridge = ATTRIB_CUBIT_OWNER::cubit_owner(cur_ENT);
+	      if(dynamic_cast<TopologyBridge*>(acis_bridge))
+		new_tbs->append_unique(dynamic_cast<TopologyBridge*>(acis_bridge));
+	    }
+	}
+      if(att_tbs)
+	{
+	  for(i=att_ENTITIES.size(); i--;)
+	    {
+	      ENTITY *cur_ENT = att_ENTITIES.get_and_step();
+	      AcisBridge *acis_bridge = ATTRIB_CUBIT_OWNER::cubit_owner(cur_ENT);
+	      if(dynamic_cast<TopologyBridge*>(acis_bridge))
+		att_tbs->append_unique(dynamic_cast<TopologyBridge*>(acis_bridge));
+	    }
+	}
 
-  // Convert the new_ENTITIES/att_ENTITIES lists into
-  // topology bridge lists.
-  if(new_tbs)
-  {
-    for(i=new_ENTITIES.size(); i--;)
-    {
-      ENTITY *cur_ENT = new_ENTITIES.get_and_step();
-      AcisBridge *acis_bridge = ATTRIB_CUBIT_OWNER::cubit_owner(cur_ENT);
-      if(dynamic_cast<TopologyBridge*>(acis_bridge))
-        new_tbs->append_unique(dynamic_cast<TopologyBridge*>(acis_bridge));
-    }
-  }
-  if(att_tbs)
-  {
-    for(i=att_ENTITIES.size(); i--;)
-    {
-      ENTITY *cur_ENT = att_ENTITIES.get_and_step();
-      AcisBridge *acis_bridge = ATTRIB_CUBIT_OWNER::cubit_owner(cur_ENT);
-      if(dynamic_cast<TopologyBridge*>(acis_bridge))
-        att_tbs->append_unique(dynamic_cast<TopologyBridge*>(acis_bridge));
-    }
-  }
 
+      PRINT_INFO("Group imprint finished.\n");
 
-  PRINT_INFO("Group imprint finished.\n");
+      // reset the free_edges acis option
+      api_set_int_option("all_free_edges", FALSE );
 
-  // reset the free_edges acis option
-  api_set_int_option("all_free_edges", FALSE );
+      return success;
+    }
 
-  return success;
-}
+  //-------------------------------------------------------------------------
+  // Purpose       : Projects an EDGE to a FACE
+  //
+  // Special Notes :
+  //
+  //
+  // Creator       : Eric Nielsen
+  //
+  // Creation Date : 06/14/00
+  //-------------------------------------------------------------------------
+  EDGE* AcisModifyEngine::project_EDGE(EDGE* EDGE_in_ptr, FACE* FACE_ptr, bool print_error ) const
+    {
+      curve* in_crv=NULL;
+      surface *in_srf=NULL;
+      curve * out_crv = NULL;
+      EDGE * new_EDGE = NULL;
 
-//-------------------------------------------------------------------------
-// Purpose       : Projects an EDGE to a FACE
-//
-// Special Notes :
-//
-//
-// Creator       : Eric Nielsen
-//
-// Creation Date : 06/14/00
-//-------------------------------------------------------------------------
-EDGE* AcisModifyEngine::project_EDGE(EDGE* EDGE_in_ptr, FACE* FACE_ptr, bool print_error ) const
-{
-  curve* in_crv=NULL;
-  surface *in_srf=NULL;
-  curve * out_crv = NULL;
-  EDGE * new_EDGE = NULL;
+      if(FACE_ptr && FACE_ptr->geometry())
+	{
+	  SPAtransf t= get_owner_transf(FACE_ptr);
+	  in_srf = FACE_ptr->geometry()->trans_surface(t);
+	}
 
-  if(FACE_ptr && FACE_ptr->geometry())
-  {
-    SPAtransf t= get_owner_transf(FACE_ptr);
-    in_srf = FACE_ptr->geometry()->trans_surface(t);
-  }
+      if(EDGE_in_ptr && EDGE_in_ptr->geometry())
+	{
+	  SPAtransf t= get_owner_transf(EDGE_in_ptr);
+	  in_crv = EDGE_in_ptr->geometry()->trans_curve(t);
+	}
 
-  if(EDGE_in_ptr && EDGE_in_ptr->geometry())
-  {
-    SPAtransf t= get_owner_transf(EDGE_in_ptr);
-    in_crv = EDGE_in_ptr->geometry()->trans_curve(t);
-  }
+      if(in_crv && in_srf)
+	{
+	  // create the curve
+	  SPAinterval in_range = EDGE_in_ptr->param_range();
 
-  if(in_crv && in_srf)
-  {
-    // create the curve
-    SPAinterval in_range = EDGE_in_ptr->param_range();
+	  if( EDGE_in_ptr->sense() )
+	    in_range.negate();
 
-    if( EDGE_in_ptr->sense() )
-      in_range.negate();
+	  outcome result = api_project_curve_to_surface(*in_crv, in_range, *in_srf, out_crv);
 
-    outcome result = api_project_curve_to_surface(*in_crv, in_range, *in_srf, out_crv);
+	  if (!result.ok() || out_crv == NULL) //out_crv check added 6/18/04 by aga at cat
+	    //api CAN return a null curve in some failures- if so we'll end the fcn here and return
+	    {
+	      if( print_error )
+		{
+		  AcisQueryEngine::instance()->ACIS_API_error (result);
+		  PRINT_ERROR( "api_project_curve_to_surface failed ");
+		}
+	      return (EDGE *)NULL;
+	    }
 
-    if (!result.ok() || out_crv == NULL) //out_crv check added 6/18/04 by aga at cat
-    //api CAN return a null curve in some failures- if so we'll end the fcn here and return
-    {
-      if( print_error )
-      {
-        AcisQueryEngine::instance()->ACIS_API_error (result);
-        PRINT_ERROR( "api_project_curve_to_surface failed ");
-      }
-      return (EDGE *)NULL;
-    }
+	  // create the CURVE
+	  CURVE *the_curve=make_curve(*out_crv);
 
-    // create the CURVE
-    CURVE *the_curve=make_curve(*out_crv);
+	  // get ends of the edge
+	  SPAposition pt0=out_crv->eval_position(in_range.start_pt());
+	  SPAposition pt1=out_crv->eval_position(in_range.end_pt());
 
-    // get ends of the edge
-    SPAposition pt0=out_crv->eval_position(in_range.start_pt());
-    SPAposition pt1=out_crv->eval_position(in_range.end_pt());
+	  ACIS_DELETE out_crv;
 
-    ACIS_DELETE out_crv;
+	  // create the vertices
+	  VERTEX *svert= ACIS_NEW VERTEX( ACIS_NEW APOINT(pt0));
 
-    // create the vertices
-    VERTEX *svert= ACIS_NEW VERTEX( ACIS_NEW APOINT(pt0));
+	  // -- check for a closed edge
+	  VERTEX *evert= NULL;
+	  if ( pt0 != pt1 )
+	    evert = ACIS_NEW VERTEX( ACIS_NEW APOINT(pt1));
+	  else
+	    evert = svert;
 
-    // -- check for a closed edge
-    VERTEX *evert= NULL;
-    if ( pt0 != pt1 )
-      evert = ACIS_NEW VERTEX( ACIS_NEW APOINT(pt1));
-    else
-      evert = svert;
+	  // make the edge
+	  new_EDGE= ACIS_NEW EDGE(svert,evert,the_curve,FORWARD,EDGE_cvty_unknown,in_range);
+	}
 
-    // make the edge
-    new_EDGE= ACIS_NEW EDGE(svert,evert,the_curve,FORWARD,EDGE_cvty_unknown,in_range);
-  }
+      if(in_crv)
+	ACIS_DELETE in_crv;
+      if(in_srf)
+	ACIS_DELETE in_srf;
 
-  if(in_crv)
-    ACIS_DELETE in_crv;
-  if(in_srf)
-    ACIS_DELETE in_srf;
+      if(new_EDGE)
+	{
+	  ENTITY *edge_entity = (ENTITY*)new_EDGE;
+	  api_simplify_entity( edge_entity );
+	  return new_EDGE;
+	}
+      else
+	return (EDGE *)NULL;
+    }
 
-  if(new_EDGE)
-  {
-    ENTITY *edge_entity = (ENTITY*)new_EDGE;
-    api_simplify_entity( edge_entity );
-    return new_EDGE;
-  }
-  else
-    return (EDGE *)NULL;
-}
+  //-------------------------------------------------------------------------
+  // Purpose       : Projects a list of RefEdges on to a list of RefFaces
+  //                 returning a list of new RefEdges
+  //
+  // Special Notes :
+  //
+  //
+  // Creator       : Eric Nielsen
+  //
+  // Creation Date : 06/14/00
+  //-------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::project_edges( DLIList<Surface*> &ref_face_list,
+					       DLIList<Curve*> &ref_edge_list_in,
+					       DLIList<Curve*> &ref_edge_list_new,
+					       bool print_error ) const
+    {
+      Curve* ref_edge = NULL;
+      Surface* ref_face = NULL;
+      EDGE *new_EDGE_ptr = NULL;
 
-//-------------------------------------------------------------------------
-// Purpose       : Projects a list of RefEdges on to a list of RefFaces
-//                 returning a list of new RefEdges
-//
-// Special Notes :
-//
-//
-// Creator       : Eric Nielsen
-//
-// Creation Date : 06/14/00
-//-------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::project_edges( DLIList<Surface*> &ref_face_list,
-                                             DLIList<Curve*> &ref_edge_list_in,
-                                             DLIList<Curve*> &ref_edge_list_new,
-                                             bool print_error ) const
-{
-  Curve* ref_edge = NULL;
-  Surface* ref_face = NULL;
-  EDGE *new_EDGE_ptr = NULL;
+      for(int j=0; j< ref_face_list.size(); j++)
+	{
+	  ref_face = ref_face_list.get_and_step();
 
-  for(int j=0; j< ref_face_list.size(); j++)
-  {
-    ref_face = ref_face_list.get_and_step();
+	  FACE *FACE_ptr = AcisQueryEngine::get_FACE( ref_face );
 
-    FACE *FACE_ptr = AcisQueryEngine::get_FACE( ref_face );
+	  for(int i=0; i< ref_edge_list_in.size(); i++)
+	    {
+	      ref_edge = ref_edge_list_in.get_and_step();
 
-    for(int i=0; i< ref_edge_list_in.size(); i++)
-    {
-      ref_edge = ref_edge_list_in.get_and_step();
+	      EDGE *EDGE_ptr = AcisQueryEngine::get_EDGE(ref_edge);
 
-      EDGE *EDGE_ptr = AcisQueryEngine::get_EDGE(ref_edge);
+	      new_EDGE_ptr = project_EDGE(EDGE_ptr,FACE_ptr, print_error );
 
-      new_EDGE_ptr = project_EDGE(EDGE_ptr,FACE_ptr, print_error );
+	      if (!new_EDGE_ptr)
+		{
+		  if( print_error )
+		    PRINT_ERROR( "Unable to project curve on surface\n" );
+		  continue;
+		}
+	      else{
+		Curve *curve_ptr = AcisQueryEngine::instance()->populate_topology_bridges(new_EDGE_ptr);
+		ref_edge_list_new.append(curve_ptr);
+	      }
 
-      if (!new_EDGE_ptr)
-      {
-        if( print_error )
-          PRINT_ERROR( "Unable to project curve on surface\n" );
-        continue;
-      }
-      else{
-        Curve *curve_ptr = AcisQueryEngine::instance()->populate_topology_bridges(new_EDGE_ptr);
-        ref_edge_list_new.append(curve_ptr);
-      }
+	    }
+	}
 
+      if (ref_edge_list_new.size() == ref_edge_list_in.size())
+	return CUBIT_SUCCESS;
+      else
+	return CUBIT_FAILURE;
     }
-  }
 
-  if (ref_edge_list_new.size() == ref_edge_list_in.size())
-    return CUBIT_SUCCESS;
-  else
-    return CUBIT_FAILURE;
-}
+  //-------------------------------------------------------------------------
+  // Purpose       : Projects a list of RefEdges on to a list of RefFaces
+  //                 and imprint the faces with the new RefEdges
+  //
+  // Special Notes :
+  //
+  //
+  // Creator       : Eric Nielsen
+  //
+  // Creation Date : 06/14/00
+  //-------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::imprint_projected_edges(DLIList<Surface*> &ref_face_list,
+							DLIList<Curve*> &ref_edge_list_in,
+							DLIList<BodySM*>& new_body_list,
+							bool keep_old_body,
+							bool keep_free_edges) const
+    {
+      CubitStatus status;
 
-//-------------------------------------------------------------------------
-// Purpose       : Projects a list of RefEdges on to a list of RefFaces
-//                 and imprint the faces with the new RefEdges
-//
-// Special Notes :
-//
-//
-// Creator       : Eric Nielsen
-//
-// Creation Date : 06/14/00
-//-------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::imprint_projected_edges(DLIList<Surface*> &ref_face_list,
-                                                      DLIList<Curve*> &ref_edge_list_in,
-                                                      DLIList<BodySM*>& new_body_list,
-                                                      bool keep_old_body,
-                                                      bool keep_free_edges) const
-{
-  CubitStatus status;
+      DLIList<Curve*> ref_edge_list_new;
 
-  DLIList<Curve*> ref_edge_list_new;
+      project_edges(ref_face_list, ref_edge_list_in, ref_edge_list_new);
 
-  project_edges(ref_face_list, ref_edge_list_in, ref_edge_list_new);
+      // imprint Surface with curves
+      status = imprint(ref_face_list, ref_edge_list_new, new_body_list, keep_old_body );
 
-  // imprint Surface with curves
-  status = imprint(ref_face_list, ref_edge_list_new, new_body_list, keep_old_body );
+      if (keep_free_edges)
+	return  status;
 
-  if (keep_free_edges)
-    return  status;
+      PRINT_INFO( "Removing projected curves \n");
+      for(int i=0; i< ref_edge_list_new.size();i++){
+	// Now delete this RefEdge and its underlying solid model entities
 
-  PRINT_INFO( "Removing projected curves \n");
-  for(int i=0; i< ref_edge_list_new.size();i++){
-    // Now delete this RefEdge and its underlying solid model entities
+	Curve* ref_edge = ref_edge_list_new.get_and_step();
+	status = AcisQueryEngine::instance()->
+	  delete_solid_model_entities( ref_edge );
+	if (status == CUBIT_FAILURE)
+	  {
+	    PRINT_ERROR("In GeometryQueryTool::delete_geometry\n"
+			"       Could not delete RefEdge.\n"
+			"       The Model database is likely corrupted "
+			"due to\n       this unsuccessful deletion.\n" );
+	  }
+      }
+      return status;
+    }
 
-    Curve* ref_edge = ref_edge_list_new.get_and_step();
-    status = AcisQueryEngine::instance()->
-      delete_solid_model_entities( ref_edge );
-    if (status == CUBIT_FAILURE)
+  //-------------------------------------------------------------------------
+  // Purpose       : Projects a list of RefEdges on to a list of RefFaces
+  //                 and imprint the bodies with the new RefEdges
+  //
+  // Special Notes :
+  //
+  //
+  // Creator       : Eric Nielsen
+  //
+  // Creation Date : 06/14/00
+  //-------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::imprint_projected_edges(DLIList<Surface*> &ref_face_list,
+							DLIList<BodySM*> &body_list,
+							DLIList<Curve*> &ref_edge_list_in,
+							DLIList<BodySM*>& new_body_list,
+							bool keep_old_body,
+							bool keep_free_edges) const
     {
-      PRINT_ERROR("In GeometryQueryTool::delete_geometry\n"
-        "       Could not delete RefEdge.\n"
-        "       The Model database is likely corrupted "
-        "due to\n       this unsuccessful deletion.\n" );
-    }
-  }
-  return status;
-}
+      CubitStatus status;
 
-//-------------------------------------------------------------------------
-// Purpose       : Projects a list of RefEdges on to a list of RefFaces
-//                 and imprint the bodies with the new RefEdges
-//
-// Special Notes :
-//
-//
-// Creator       : Eric Nielsen
-//
-// Creation Date : 06/14/00
-//-------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::imprint_projected_edges(DLIList<Surface*> &ref_face_list,
-                                                      DLIList<BodySM*> &body_list,
-                                                      DLIList<Curve*> &ref_edge_list_in,
-                                                      DLIList<BodySM*>& new_body_list,
-                                                      bool keep_old_body,
-                                                      bool keep_free_edges) const
-{
-  CubitStatus status;
+      DLIList<Curve*> ref_edge_list_new;
 
-  DLIList<Curve*> ref_edge_list_new;
+      project_edges(ref_face_list, ref_edge_list_in, ref_edge_list_new);
 
-  project_edges(ref_face_list, ref_edge_list_in, ref_edge_list_new);
+      // imprint bodies with curves
+      status = imprint(body_list,ref_edge_list_new,new_body_list, keep_old_body );
 
-  // imprint bodies with curves
-  status = imprint(body_list,ref_edge_list_new,new_body_list, keep_old_body );
+      if (keep_free_edges)
+	return  status;
 
-  if (keep_free_edges)
-    return  status;
+      PRINT_INFO( "Removing projected curves \n");
+      for(int i=0; i< ref_edge_list_new.size();i++){
+	// Now delete this RefEdge and its underlying solid model entities
 
-  PRINT_INFO( "Removing projected curves \n");
-  for(int i=0; i< ref_edge_list_new.size();i++){
-    // Now delete this RefEdge and its underlying solid model entities
-
-    Curve* ref_edge = ref_edge_list_new.get_and_step();
-    status = AcisQueryEngine::instance()->
-      delete_solid_model_entities( ref_edge );
-    if (status == CUBIT_FAILURE)
-    {
-      PRINT_ERROR("In GeometryModifyTool::delete_geometry\n"
-        "       Could not delete RefEdge.\n"
-        "       The Model database is likely corrupted "
-        "due to\n       this unsuccessful deletion.\n" );
+	Curve* ref_edge = ref_edge_list_new.get_and_step();
+	status = AcisQueryEngine::instance()->
+	  delete_solid_model_entities( ref_edge );
+	if (status == CUBIT_FAILURE)
+	  {
+	    PRINT_ERROR("In GeometryModifyTool::delete_geometry\n"
+			"       Could not delete RefEdge.\n"
+			"       The Model database is likely corrupted "
+			"due to\n       this unsuccessful deletion.\n" );
+	  }
+      }
+      return status;
     }
-  }
-  return status;
-}
 
-//-------------------------------------------------------------------------
-// Purpose       : Boolean Operation of body with list of bodies.
-//
-// Special Notes : INTERSECTION
-//
-// Creator       : David White
-//
-// Creation Date : 11/24/97
-//------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::intersect( BodySM* tool_body,
+  //-------------------------------------------------------------------------
+  // Purpose       : Boolean Operation of body with list of bodies.
+  //
+  // Special Notes : INTERSECTION
+  //
+  // Creator       : David White
+  //
+  // Creation Date : 11/24/97
+  //------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::intersect( BodySM* tool_body,
                                            DLIList<BodySM*> &from_bodies,
                                            DLIList<BodySM*> &new_from_bodies,
                                            bool keep_old) const
-{
-    // pass in keep_old to the delete_owner_attrib flag; if we're not keeping
-    // old bodies, we want to keep the owner attrib, so we can pick up entities
-    // that didn't change
-  bool delete_attribs =
-      (GeometryModifyTool::instance()->get_new_ids() || keep_old);
+    {
+      // pass in keep_old to the delete_owner_attrib flag; if we're not keeping
+      // old bodies, we want to keep the owner attrib, so we can pick up entities
+      // that didn't change
+      bool delete_attribs =
+	(GeometryModifyTool::instance()->get_new_ids() || keep_old);
 
 
-  int ii;
-  CubitBox tool_box = AcisQueryEngine::instance()->bounding_box(tool_body);
+      int ii;
+      CubitBox tool_box = AcisQueryEngine::instance()->bounding_box(tool_body);
 
-  DLIList<BODY*> from_BODY_list;
-  DLIList<BODY*> from_BODY_list_copy;
+      DLIList<BODY*> from_BODY_list;
+      DLIList<BODY*> from_BODY_list_copy;
 
-  // get acis bodies, and copy them
-  from_bodies.reset();
+      // get acis bodies, and copy them
+      from_bodies.reset();
 
-  for (ii = from_bodies.size(); ii > 0; ii--) {
-    BODY *BODYPtr1 = AcisQueryEngine::get_BODY(from_bodies.get_and_step());
-    from_BODY_list.append(BODYPtr1);
-    BODYPtr1 = this->copy_BODY(BODYPtr1, delete_attribs);
-    from_BODY_list_copy.append(BODYPtr1);
-  }
+      for (ii = from_bodies.size(); ii > 0; ii--) {
+	BODY *BODYPtr1 = AcisQueryEngine::get_BODY(from_bodies.get_and_step());
+	from_BODY_list.append(BODYPtr1);
+	BODYPtr1 = this->copy_BODY(BODYPtr1, delete_attribs);
+	from_BODY_list_copy.append(BODYPtr1);
+      }
 
-  if (from_BODY_list.size() != from_bodies.size())
-    return CUBIT_FAILURE;
+      if (from_BODY_list.size() != from_bodies.size())
+	return CUBIT_FAILURE;
 
-    // check if the boolean operation is regularized or nonregularized
-  BOOL_TYPE bool_type = INTERSECTION;
-  CubitBoolean boolean_regularize = GeometryModifyTool::instance()->boolean_regularize();
+      // check if the boolean operation is regularized or nonregularized
+      BOOL_TYPE bool_type = INTERSECTION;
+      CubitBoolean boolean_regularize = GeometryModifyTool::instance()->boolean_regularize();
 
-  if (boolean_regularize == FALSE)
-  {
-    bool_type = NONREG_INTERSECTION;
-  }
+      if (boolean_regularize == FALSE)
+	{
+	  bool_type = NONREG_INTERSECTION;
+	}
 
-  // now, intersect the tool with the list of bodies
-  from_BODY_list.reset();
-  from_BODY_list_copy.reset();
-  from_bodies.reset();
+      // now, intersect the tool with the list of bodies
+      from_BODY_list.reset();
+      from_BODY_list_copy.reset();
+      from_bodies.reset();
 
-  CubitStatus int_stat = CUBIT_SUCCESS;
+      CubitStatus int_stat = CUBIT_SUCCESS;
 
-    // intersect the tool body with each body in the list
-  for (ii = 1; ii <= from_BODY_list.size(); ii++) {
-    BODY *from_BODY = from_BODY_list.get();
-    BODY *from_BODY_copy = from_BODY_list_copy.get();
-    BodySM *from_Body = from_bodies.get();
-    CubitBox box1 = AcisQueryEngine::instance()->bounding_box(from_Body);
+      // intersect the tool body with each body in the list
+      for (ii = 1; ii <= from_BODY_list.size(); ii++) {
+	BODY *from_BODY = from_BODY_list.get();
+	BODY *from_BODY_copy = from_BODY_list_copy.get();
+	BodySM *from_Body = from_bodies.get();
+	CubitBox box1 = AcisQueryEngine::instance()->bounding_box(from_Body);
 
-      // first, check bounding SPAbox; if they don't intersect, don't do the intersection
+	// first, check bounding SPAbox; if they don't intersect, don't do the intersection
 
-    if (from_Body == tool_body) {
-      PRINT_ERROR("Can't intersect volume with itself.\n");
-    }
+	if (from_Body == tool_body) {
+	  PRINT_ERROR("Can't intersect volume with itself.\n");
+	}
 
-    else if (tool_box.overlap(SPAresabs, box1)) {
+	else if (tool_box.overlap(SPAresabs, box1)) {
 
-        // the bodies overlap; proceed with the intersect
-      BODY* tool_BODY = AcisQueryEngine::get_BODY(tool_body);
-      BODY *tool_BODY_copy = this->copy_BODY(tool_BODY);
+	  // the bodies overlap; proceed with the intersect
+	  BODY* tool_BODY = AcisQueryEngine::get_BODY(tool_body);
+	  BODY *tool_BODY_copy = this->copy_BODY(tool_BODY);
 
 
-        // Intersect body1 with body2.
-        //outcome result = api_intersect( tool_BODY_copy, from_BODY_copy );
-       outcome result = api_boolean(tool_BODY_copy, from_BODY_copy, bool_type );
+	  // Intersect body1 with body2.
+	  //outcome result = api_intersect( tool_BODY_copy, from_BODY_copy );
+	  outcome result = api_boolean(tool_BODY_copy, from_BODY_copy, bool_type );
 
-        // We may or may not get an error if the resulting BODY is
-        // empty
-        // Also check the result.
-      if (from_BODY_copy == NULL ||
-          (from_BODY_copy->lump() == NULL && from_BODY_copy->wire() == NULL) ||
-          !result.ok())
-      {
-        if (!result.ok())
-        {
-          PRINT_ERROR("Intersection operation failed.\n");
-          AcisQueryEngine::instance()->ACIS_API_error(result, "intersect Bodies");
-          int_stat = CUBIT_FAILURE;
+	  // We may or may not get an error if the resulting BODY is
+	  // empty
+	  // Also check the result.
+	  if (from_BODY_copy == NULL ||
+	      (from_BODY_copy->lump() == NULL && from_BODY_copy->wire() == NULL) ||
+	      !result.ok())
+	    {
+	      if (!result.ok())
+		{
+		  PRINT_ERROR("Intersection operation failed.\n");
+		  AcisQueryEngine::instance()->ACIS_API_error(result, "intersect Bodies");
+		  int_stat = CUBIT_FAILURE;
 
-          //I might need to take this out.  Not sure. CDE 10/17/2003
-          if (tool_BODY_copy != NULL)
-          {
-            AcisQueryEngine::instance()->delete_ACIS_BODY(tool_BODY_copy, CUBIT_TRUE);
-          }
-        }
-        else
-          PRINT_ERROR("Intersection operation failed.\n"
-                      "       Empty volume created and will be deleted.\n");
-        if (from_BODY_copy != NULL)
-        {
-          AcisQueryEngine::instance()->delete_ACIS_BODY(from_BODY_copy, CUBIT_TRUE);
-        }
+		  //I might need to take this out.  Not sure. CDE 10/17/2003
+		  if (tool_BODY_copy != NULL)
+		    {
+		      AcisQueryEngine::instance()->delete_ACIS_BODY(tool_BODY_copy, CUBIT_TRUE);
+		    }
+		}
+	      else
+		PRINT_ERROR("Intersection operation failed.\n"
+			    "       Empty volume created and will be deleted.\n");
+	      if (from_BODY_copy != NULL)
+		{
+		  AcisQueryEngine::instance()->delete_ACIS_BODY(from_BODY_copy, CUBIT_TRUE);
+		}
 
-          // we had an error, so put the original body into the copy list
-        from_BODY_list_copy.change_to(from_BODY);
-      }
+	      // we had an error, so put the original body into the copy list
+	      from_BODY_list_copy.change_to(from_BODY);
+	    }
 
-      if ( bool_type == NONREG_INTERSECTION)
-      {
-		    outcome result1;
-		    // ENTITY_LIST FACES;
-            DLIList<FACE*>  FACE_list ;
-		    FACE *this_FACE;
-            AcisQueryEngine::instance()->get_FACEs(from_BODY_copy,FACE_list);
-		     // loop through all faces
-		    for( int i = 0; i< FACE_list.size(); i++)
+	  if ( bool_type == NONREG_INTERSECTION)
+	    {
+	      outcome result1;
+	      // ENTITY_LIST FACES;
+	      DLIList<FACE*>  FACE_list ;
+	      FACE *this_FACE;
+	      AcisQueryEngine::instance()->get_FACEs(from_BODY_copy,FACE_list);
+	      // loop through all faces
+	      for( int i = 0; i< FACE_list.size(); i++)
+		{
+		  this_FACE = FACE_list.get_and_step();
+		  assert( this_FACE != NULL );
+		  // Make sure this is a DOUBLE_SIDED FACE
+		  if (this_FACE->sides() == DOUBLE_SIDED)
 		    {
-			    this_FACE = FACE_list.get_and_step();
-			    assert( this_FACE != NULL );
-			    // Make sure this is a DOUBLE_SIDED FACE
-			    if (this_FACE->sides() == DOUBLE_SIDED)
+		      if (this_FACE->cont()==BOTH_INSIDE)
+			{
+			  // found internal faces
+			  // Now we have the FACE - unhook it  from the BODY.  Keep track of new
+			  // BODIES that are created as this is done.
+			  PRINT_INFO( " Unhooking and deleting each internal surface...\n" );
+			  BODY *new_BODY_ptr;
+			  result1 = api_unhook_face( this_FACE, new_BODY_ptr );
+			  if( !result1.ok() )
 			    {
-				    if (this_FACE->cont()==BOTH_INSIDE)
-				    {
-					    // found internal faces
-					    // Now we have the FACE - unhook it  from the BODY.  Keep track of new
-					    // BODIES that are created as this is done.
-					     PRINT_INFO( " Unhooking and deleting each internal surface...\n" );
-					     BODY *new_BODY_ptr;
-					     result1 = api_unhook_face( this_FACE, new_BODY_ptr );
-					     if( !result1.ok() )
-					     {
-						     AcisModifyEngine::instance()->get_acis_query_engine()->ACIS_API_error( result1 );
-						     PRINT_ERROR( " Face unhooking during rebuild of volume didn't work\n" );
-						     return CUBIT_FAILURE;
-					     }
-					     AcisQueryEngine::instance()->delete_ACIS_BODY (new_BODY_ptr);
-				    }
+			      AcisModifyEngine::instance()->get_acis_query_engine()->ACIS_API_error( result1 );
+			      PRINT_ERROR( " Face unhooking during rebuild of volume didn't work\n" );
+			      return CUBIT_FAILURE;
 			    }
+			  AcisQueryEngine::instance()->delete_ACIS_BODY (new_BODY_ptr);
+			}
 		    }
+		}
 
-		 // heal the leftover body
-//
-//		   PRINT_INFO(" Healing the leftover volume...\n");
-//		   if( AcisHealerTool::instance()->init_BODY_for_healing( master ) == CUBIT_SUCCESS )
-//		   {
-//			   int percent_before, percent_after, number_splines_simplified;
-//			   if( AcisHealerTool::instance()->heal_BODY( master, percent_before,
-//				   percent_after, number_splines_simplified ) == CUBIT_FAILURE )
-//				   PRINT_ERROR( "Error healing the combined volume\n" );
-//			   else
-//				   PRINT_INFO( "Successfully healed the combined volume.\n" );
-//			   AcisHealerTool::instance()->end_BODY_for_healing( master );
-//		   }
+	      // heal the leftover body
+	      //
+	      //		   PRINT_INFO(" Healing the leftover volume...\n");
+	      //		   if( AcisHealerTool::instance()->init_BODY_for_healing( master ) == CUBIT_SUCCESS )
+	      //		   {
+	      //			   int percent_before, percent_after, number_splines_simplified;
+	      //			   if( AcisHealerTool::instance()->heal_BODY( master, percent_before,
+	      //				   percent_after, number_splines_simplified ) == CUBIT_FAILURE )
+	      //				   PRINT_ERROR( "Error healing the combined volume\n" );
+	      //			   else
+	      //				   PRINT_INFO( "Successfully healed the combined volume.\n" );
+	      //			   AcisHealerTool::instance()->end_BODY_for_healing( master );
+	      //		   }
 	    }
 
-      // done with this j iteration; write out count, if necessary
-//      if (from_bodies.size() > 1) {
-//        int frac_done = (10 * ii) / from_bodies.size();
-//        if ((10 - frac_done) < fraction_remaining) {
-//          PRINT_INFO("%d ", fraction_remaining);
-//          fraction_remaining--;
-//        }
-//      }
-    }
+	  // done with this j iteration; write out count, if necessary
+	  //      if (from_bodies.size() > 1) {
+	  //        int frac_done = (10 * ii) / from_bodies.size();
+	  //        if ((10 - frac_done) < fraction_remaining) {
+	  //          PRINT_INFO("%d ", fraction_remaining);
+	  //          fraction_remaining--;
+	  //        }
+	  //      }
+	}
 
-    else {
-      AcisQueryEngine::instance()->delete_ACIS_BODY(from_BODY_copy, CUBIT_TRUE);
-      from_BODY_list_copy.change_to(from_BODY);
-    }
+	else {
+	  AcisQueryEngine::instance()->delete_ACIS_BODY(from_BODY_copy, CUBIT_TRUE);
+	  from_BODY_list_copy.change_to(from_BODY);
+	}
 
-      // done with iteration over ii; step the lists
-    from_BODY_list_copy.step();
-    from_BODY_list.step();
-    from_bodies.step();
-  }
+	// done with iteration over ii; step the lists
+	from_BODY_list_copy.step();
+	from_BODY_list.step();
+	from_bodies.step();
+      }
 
-//  PRINT_INFO("\n");
+      //  PRINT_INFO("\n");
 
-    // ok, we're done; construct new Body's for the new BODY's
-  from_BODY_list_copy.reset();
-  from_BODY_list.reset();
-  from_bodies.reset();
+      // ok, we're done; construct new Body's for the new BODY's
+      from_BODY_list_copy.reset();
+      from_BODY_list.reset();
+      from_bodies.reset();
 
-  for (ii = from_BODY_list_copy.size(); ii > 0; ii--) {
+      for (ii = from_BODY_list_copy.size(); ii > 0; ii--) {
 
-    BODY *old_BODY = from_BODY_list.get();
-    BODY *new_BODY = from_BODY_list_copy.get();
+	BODY *old_BODY = from_BODY_list.get();
+	BODY *new_BODY = from_BODY_list_copy.get();
 
-    BodySM *new_body = NULL;
-    if (old_BODY != new_BODY)
-      new_body = get_new_Body(from_bodies.get(), old_BODY, new_BODY, keep_old);
-    else if (!keep_old && int_stat == CUBIT_SUCCESS) {
-      //GeometryQueryTool::instance()->delete_Body(from_bodies.get());
-      AcisQueryEngine::instance()->delete_solid_model_entities(from_bodies.get());
-      from_bodies.change_to(NULL);
-    }
+	BodySM *new_body = NULL;
+	if (old_BODY != new_BODY)
+	  new_body = get_new_Body(from_bodies.get(), old_BODY, new_BODY, keep_old);
+	else if (!keep_old && int_stat == CUBIT_SUCCESS) {
+	  //GeometryQueryTool::instance()->delete_Body(from_bodies.get());
+	  AcisQueryEngine::instance()->delete_solid_model_entities(from_bodies.get());
+	  from_bodies.change_to(NULL);
+	}
 
-    if (new_body) {
-      new_from_bodies.append(new_body);
-      from_bodies.change_to(NULL);
-    }
+	if (new_body) {
+	  new_from_bodies.append(new_body);
+	  from_bodies.change_to(NULL);
+	}
 
-      // now step all the lists
-    from_BODY_list.step();
-    from_BODY_list_copy.step();
-    from_bodies.step();
-  }
+	// now step all the lists
+	from_BODY_list.step();
+	from_BODY_list_copy.step();
+	from_bodies.step();
+      }
 
-  from_bodies.remove_all_with_value(NULL);
-  from_bodies.reset();
-  new_from_bodies.reset();
+      from_bodies.remove_all_with_value(NULL);
+      from_bodies.reset();
+      new_from_bodies.reset();
 
-  if (int_stat == CUBIT_SUCCESS && !keep_old )
-    //GeometryQueryTool::instance()->delete_Body(tool_body);
-    AcisQueryEngine::instance()->delete_solid_model_entities(tool_body);
-/*
-    // write the message about bodies kept and not kept
-//NOTE TO JS:
-  PRINT_INFO("Intersect finished; \n"
-             "Old bodies retained: ");
-  if (from_bodies.size() > 0) {
-    for (ii = from_bodies.size(); ii > 0; ii--)
+      if (int_stat == CUBIT_SUCCESS && !keep_old )
+	//GeometryQueryTool::instance()->delete_Body(tool_body);
+	AcisQueryEngine::instance()->delete_solid_model_entities(tool_body);
+      /*
+      // write the message about bodies kept and not kept
+      //NOTE TO JS:
+      PRINT_INFO("Intersect finished; \n"
+      "Old bodies retained: ");
+      if (from_bodies.size() > 0) {
+      for (ii = from_bodies.size(); ii > 0; ii--)
       PRINT_INFO("%d ", from_bodies.get_and_step()->id());
-  }
-  else {
-    PRINT_INFO(" (none)");
-  }
+      }
+      else {
+      PRINT_INFO(" (none)");
+      }
 
-  PRINT_INFO("\n");
+      PRINT_INFO("\n");
 
-//NOTE TO JS:
-  PRINT_INFO("New bodies created: ");
-  if (new_from_bodies.size() > 0) {
-    for (ii = new_from_bodies.size(); ii > 0; ii--)
+      //NOTE TO JS:
+      PRINT_INFO("New bodies created: ");
+      if (new_from_bodies.size() > 0) {
+      for (ii = new_from_bodies.size(); ii > 0; ii--)
       PRINT_INFO("%d ", new_from_bodies.get_and_step()->id());
-  }
-  else {
-    PRINT_INFO(" (none)");
-  }
-  PRINT_INFO("\n");
-*/
-  return CUBIT_SUCCESS;
-}
-
-//-------------------------------------------------------------------------
-// Purpose       : Perform a rotational sweep
-//
-// Special Notes :
-//
-// Creator       : Malcolm J. Panthaki
-//
-// Creation Date : 10/31/96
-//-------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::sweep_rotational(
-  DLIList<GeometryEntity*>& ref_ent_list,
-  DLIList<BodySM*>& result_body_list,
-  const CubitVector& point,
-  const CubitVector& sweep_axis,
-  double angle,
-  int steps,
-  double draft_angle,
-  int draft_type,
-  bool switchside,
-  bool make_solid,
-  bool rigid) const
-{
-
-  DLIList<FACE*> FACEs_to_be_swept_list;
-  DLIList<EDGE*> EDGEs_to_be_swept_list;
-  DLIList<Surface*> ref_faces_list;
-  DLIList<Curve*> ref_edges_list;
-
-    // First get the ACIS FACEs associated with the input RefFaces
-  //DLIList<FACE*> temp_faces;
-  int i;
-  for (i = ref_ent_list.size(); i > 0; i--)
-  {
-    GeometryEntity *ref_ent = ref_ent_list.get_and_step();
-    Surface *ref_face = CAST_TO(ref_ent, Surface);
-    Curve* ref_edge = CAST_TO(ref_ent, Curve);
-
-    if(ref_face != NULL)
-    {
-      FACE* FACE_ptr = AcisQueryEngine::get_FACE(ref_face);
-      if (!FACE_ptr)
-        return CUBIT_FAILURE;
-      //SurfaceACIS::get_FACEs_of_RefFace( ref_face, temp_faces);
-      //if (temp_faces.size() > 1) {
-      //  PRINT_ERROR("Surface %d cannot be swept as the number of ACIS FACEs associated \n"
-      //              "       with it is not 1.\n",
-      //              ref_face->id());
-      //  return CUBIT_FAILURE;
-      //}
-      //
-      //if (temp_faces.size() > 0)
-      //   FACEs_to_be_swept_list += temp_faces;
-      //temp_faces.clean_out();
-      FACEs_to_be_swept_list.append(FACE_ptr);
-      ref_faces_list.append(ref_face);
+      }
+      else {
+      PRINT_INFO(" (none)");
+      }
+      PRINT_INFO("\n");
+      */
+      return CUBIT_SUCCESS;
     }
-    else if (ref_edge != NULL)
-    {
-      //EDGEs_to_be_swept_list.append(CurveACIS::get_first_EDGE(ref_edge));
-      EDGEs_to_be_swept_list.append(AcisQueryEngine::get_EDGE(ref_edge));
-      ref_edges_list.append(ref_edge);
-    }
-  }
 
-  ref_edges_list.reset();
-  ref_faces_list.reset();
-
-      // Next, call ACIS to do the real work for each of the FACEs in the list!!
-  FACEs_to_be_swept_list.reset();
-  EDGEs_to_be_swept_list.reset();
-  FACE* FACE_ptr = NULL;
-  FACE* copied_FACE_ptr = NULL;
-  EDGE* copied_EDGE_ptr = NULL;
-  Surface* refface_ptr = NULL;
-  BodySM* body_ptr = NULL;
-  BODY* BODY_ptr = NULL;
-  BODY* copy_of_original_BODY_ptr = NULL;
-  bool primary_side = true;
-  bool skip_loop = false;
-  CubitStatus sweep_status = CUBIT_FAILURE;
-  for (i = 0; i < FACEs_to_be_swept_list.size(); i++)
-  {
-    skip_loop = CUBIT_FALSE;
-    copied_FACE_ptr = NULL;
-
-      // Get the RefFace we're going to sweep
-    GeometryEntity* ref_ent = ref_ent_list.get_and_step();
-    refface_ptr = CAST_TO(ref_ent, Surface);
-    if(make_solid)
+  //-------------------------------------------------------------------------
+  // Purpose       : Perform a rotational sweep
+  //
+  // Special Notes :
+  //
+  // Creator       : Malcolm J. Panthaki
+  //
+  // Creation Date : 10/31/96
+  //-------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::sweep_rotational(
+						 DLIList<GeometryEntity*>& ref_ent_list,
+						 DLIList<BodySM*>& result_body_list,
+						 const CubitVector& point,
+						 const CubitVector& sweep_axis,
+						 double angle,
+						 int steps,
+						 double draft_angle,
+						 int draft_type,
+						 bool switchside,
+						 bool make_solid,
+						 bool rigid,
+						 Surface *stop_surf,
+						 BodySM* stop_body) const 
     {
-      PRINT_WARNING("The make_solid option is ignored for surface\n");
-    }
 
-      // Get the FACE we're going to sweep
-    FACE_ptr = FACEs_to_be_swept_list.get_and_step();
+      DLIList<FACE*> FACEs_to_be_swept_list;
+      DLIList<EDGE*> EDGEs_to_be_swept_list;
+      DLIList<Surface*> ref_faces_list;
+      DLIList<Curve*> ref_edges_list;
 
-      // If the FACE is DOUBLE-SIDED; deal with the switchside option
-    if (FACE_ptr->sides() && switchside)
-    {
-      primary_side = CUBIT_FALSE;
-    }
+      // First get the ACIS FACEs associated with the input RefFaces
+      //DLIList<FACE*> temp_faces;
+      int i;
+      for (i = ref_ent_list.size(); i > 0; i--)
+	{
+	  GeometryEntity *ref_ent = ref_ent_list.get_and_step();
+	  Surface *ref_face = CAST_TO(ref_ent, Surface);
+	  Curve* ref_edge = CAST_TO(ref_ent, Curve);
 
-      // Make sure the FACE has a plane surface as it's underlying geometry
-    if (FACE_ptr->geometry()->equation().type() != plane_type)
-    {
-      PRINT_ERROR("One of the surfaces being swept is not planar.\n"
-                  "       Skipping to the next surface.\n");
-      skip_loop = CUBIT_TRUE;
-    }
+	  if(ref_face != NULL)
+	    {
+	      FACE* FACE_ptr = AcisQueryEngine::get_FACE(ref_face);
+	      if (!FACE_ptr)
+		return CUBIT_FAILURE;
+	      //SurfaceACIS::get_FACEs_of_RefFace( ref_face, temp_faces);
+	      //if (temp_faces.size() > 1) {
+	      //  PRINT_ERROR("Surface %d cannot be swept as the number of ACIS FACEs associated \n"
+	      //              "       with it is not 1.\n",
+	      //              ref_face->id());
+	      //  return CUBIT_FAILURE;
+	      //}
+	      //
+	      //if (temp_faces.size() > 0)
+	      //   FACEs_to_be_swept_list += temp_faces;
+	      //temp_faces.clean_out();
+	      FACEs_to_be_swept_list.append(FACE_ptr);
+	      ref_faces_list.append(ref_face);
+	    }
+	  else if (ref_edge != NULL)
+	    {
+	      //EDGEs_to_be_swept_list.append(CurveACIS::get_first_EDGE(ref_edge));
+	      EDGEs_to_be_swept_list.append(AcisQueryEngine::get_EDGE(ref_edge));
+	      ref_edges_list.append(ref_edge);
+	    }
+	}
 
-      // If this FACE is planar, continue
-    if( !skip_loop )
-    {
-        // Get the associated Body and it's ACIS BODY
-      body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY(FACE_ptr);
-      if (body_ptr != NULL)
-      {
-        BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
+      //see if surface-where-sweep-is-to-stop has been specified
+      FACE *stop_FACE= NULL;
+      BODY *stop_BODY = NULL;
+      if( stop_surf )
+	{
+	  SurfaceACIS *surf_ACIS = CAST_TO(stop_surf, SurfaceACIS );
+	  stop_FACE = surf_ACIS->get_FACE_ptr();
+	}
 
-          // Make sure we have a valid ACIS BODY associated with this Body
-          // and FACE
-        if (BODY_ptr == NULL)
-        {
-          PRINT_ERROR("No valid volume associated with the RefFace.\n");
-          skip_loop = CUBIT_TRUE;
-        }
-      }
+      if( stop_body )
+	{
+	  BodyACIS* bodyACISPtr = CAST_TO(stop_body, BodyACIS) ;
+	  assert(bodyACISPtr);
+	  stop_BODY = bodyACISPtr->get_BODY_ptr() ;
+	}
 
-      else
-      {
-        PRINT_WARNING("No volume associated with this surface.\n"
-                      "         Sweeping will continue with the ACIS BODY.\n");
-        BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr);
-        if (BODY_ptr == NULL)
-        {
-          PRINT_ERROR("No valid volume associated with the RefFace.\n");
-          skip_loop = CUBIT_TRUE;
-        }
-      }
+      ref_edges_list.reset();
+      ref_faces_list.reset();
 
-        // If there were no problems finding an associated ACIS BODY, proceed
-      if( !skip_loop )
-      {
-          // Make a copy of the original BODY before doing the sweep.
-          // We will perform the sweep on the copy, not on the original body.
-        copy_of_original_BODY_ptr = this->copy_BODY(BODY_ptr,
-                                                    CUBIT_FALSE);
+      // Next, call ACIS to do the real work for each of the FACEs in the list!!
+      FACEs_to_be_swept_list.reset();
+      EDGEs_to_be_swept_list.reset();
+      FACE* FACE_ptr = NULL;
+      FACE* copied_FACE_ptr = NULL;
+      EDGE* copied_EDGE_ptr = NULL;
+      Surface* refface_ptr = NULL;
+      BodySM* body_ptr = NULL;
+      BODY* BODY_ptr = NULL;
+      BODY* copy_of_original_BODY_ptr = NULL;
+      bool primary_side = true;
+      bool skip_loop = false;
+      CubitStatus sweep_status = CUBIT_FAILURE;
+      for (i = 0; i < FACEs_to_be_swept_list.size(); i++)
+	{
+	  skip_loop = CUBIT_FALSE;
+	  copied_FACE_ptr = NULL;
 
-          // Find the FACE in the copied BODY that corresponds to the FACE
-          // being swept in the original BODY.  Note that when we made a copy
-          // of the original BODY, all the "parent" attributes were copied
-          // over to the new BODY.
-        if (copy_of_original_BODY_ptr)
-        {
-          copied_FACE_ptr = (FACE *) (AcisQueryEngine::instance()->
-            get_ENTITY_of_entity( copy_of_original_BODY_ptr, refface_ptr) );
-        }
+	  // Get the RefFace we're going to sweep
+	  GeometryEntity* ref_ent = ref_ent_list.get_and_step();
+	  refface_ptr = CAST_TO(ref_ent, Surface);
+	  if(make_solid)
+	    {
+	      PRINT_WARNING("The make_solid option is ignored for surface\n");
+	    }
 
-        if (copied_FACE_ptr)
-        {
-            // Remove all the CUBIT_OWNER attributes from the copied BODY
-            // as we're going to sweep it.
-          if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_TRUE)
-            AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
+	  // Get the FACE we're going to sweep
+	  FACE_ptr = FACEs_to_be_swept_list.get_and_step();
 
-            // Rotate the FACE about the axis, sweep_vector.
-          int reverse_failed = CUBIT_FALSE;
-          bool volume_is_negative = false;
-          if ( !this->sweep_FACE_about_axis( copied_FACE_ptr,
-                                             sweep_axis,
-                                             point,
-                                             angle,
-                                             volume_is_negative,
-                                             primary_side,
-                                             steps,
-                                             draft_angle,
-                                             draft_type,
-                                             rigid) )
-          {
-              // Volume was negative, so we're going to try to reverse the
-              // BODY
-            if (volume_is_negative)
-            {
-                // Delete the BODY that was just created (the one with the
-                // negative volume).
-                //AcisQueryEngine::instance()->delete_ACIS_BODY(copy_of_original_BODY_ptr);
+	  // If the FACE is DOUBLE-SIDED; deal with the switchside option
+	  if (FACE_ptr->sides() && switchside)
+	    {
+	      primary_side = CUBIT_FALSE;
+	    }
 
-                // Make another copy of the original BODY before attempting
-                // the sweep again. We will perform the sweep on this copy,
-                // not on the original body.
-              copy_of_original_BODY_ptr = this->copy_BODY(BODY_ptr, CUBIT_FALSE);
+	  // Make sure the FACE has a plane surface as it's underlying geometry
+	  if (FACE_ptr->geometry()->equation().type() != plane_type)
+	    {
+	      PRINT_ERROR("One of the surfaces being swept is not planar.\n"
+			  "       Skipping to the next surface.\n");
+	      skip_loop = CUBIT_TRUE;
+	    }
 
-                // Find the FACE in the copied BODY that corresponds to the FACE
-                // being swept in the original BODY.  Note that when we made a copy
-                // of the original BODY, all the "parent" attributes were copied
-                // over to the new BODY.
-              if (copy_of_original_BODY_ptr)
-              {
-                copied_FACE_ptr = (FACE *) (AcisQueryEngine::instance()->
-                  get_ENTITY_of_entity( copy_of_original_BODY_ptr, refface_ptr ));
-              }
+	  // If this FACE is planar, continue
+	  if( !skip_loop )
+	    {
+	      // Get the associated Body and it's ACIS BODY
+	      body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY(FACE_ptr);
+	      if (body_ptr != NULL)
+		{
+		  BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
 
-              if (copied_FACE_ptr)
-              {
-                  // Remove all the CUBIT_OWNER attributes from the copied BODY
-                  // as we're going to sweep it.
-                if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_TRUE)
-                  AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
+		  // Make sure we have a valid ACIS BODY associated with this Body
+		  // and FACE
+		  if (BODY_ptr == NULL)
+		    {
+		      PRINT_ERROR("No valid volume associated with the RefFace.\n");
+		      skip_loop = CUBIT_TRUE;
+		    }
+		}
 
-                  // Find out how many FACEs exist in the BODY that owns
-                  // copied_FACE_ptr
-                DLIList<FACE*> FACE_list;
-                if (AcisQueryEngine::instance()->get_FACEs( (ENTITY *)copy_of_original_BODY_ptr, FACE_list ))
-                {
-                    // If copied_FACE_ptr is the only FACE in this BODY, then we can
-                    // try reversing the BODY before attempting the sweep again
-                  if (FACE_list.size() == 1)
-                  {
-                      // Make sure this is a DOUBLE_SIDED FACE
-                    if (copied_FACE_ptr->sides() == DOUBLE_SIDED)
-                    {
-                        // Reverse the BODY that this FACE belongs to
-                      if (!api_reverse_body(copy_of_original_BODY_ptr).ok())
-                      {
-                        reverse_failed = CUBIT_TRUE;
-                      }
-                    }
+	      else
+		{
+		  PRINT_WARNING("No volume associated with this surface.\n"
+				"         Sweeping will continue with the ACIS BODY.\n");
+		  BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr);
+		  if (BODY_ptr == NULL)
+		    {
+		      PRINT_ERROR("No valid volume associated with the RefFace.\n");
+		      skip_loop = CUBIT_TRUE;
+		    }
+		}
 
-                      // The single FACE in this BODY is *not* DOUBLE_SIDED.
-                      // Cannot do the reversal and sweep.
-                    else
-                    {
-                      reverse_failed = CUBIT_TRUE;
-                    }
-                  }
+	      // If there were no problems finding an associated ACIS BODY, proceed
+	      if( !skip_loop )
+		{
+		  // Make a copy of the original BODY before doing the sweep.
+		  // We will perform the sweep on the copy, not on the original body.
+		  copy_of_original_BODY_ptr = this->copy_BODY(BODY_ptr,
+							      CUBIT_FALSE);
 
-                    // More than 1 FACE in this BODY. Cannot do the reversal and sweep.
-                  else
-                  {
-                    reverse_failed = CUBIT_TRUE;
-                  }
-                }
+		  // Find the FACE in the copied BODY that corresponds to the FACE
+		  // being swept in the original BODY.  Note that when we made a copy
+		  // of the original BODY, all the "parent" attributes were copied
+		  // over to the new BODY.
+		  if (copy_of_original_BODY_ptr)
+		    {
+		      copied_FACE_ptr = (FACE *) (AcisQueryEngine::instance()->
+						  get_ENTITY_of_entity( copy_of_original_BODY_ptr, refface_ptr) );
+		    }
 
-                  // Couldn't get the FACES of the BODY being swept. Cannot do
-                  // the reversal and sweep.
-                else
-                {
-                  reverse_failed = CUBIT_TRUE;
-                }
-              }
+		  if (copied_FACE_ptr)
+		    {
+		      // Remove all the CUBIT_OWNER attributes from the copied BODY
+		      // as we're going to sweep it.
+		      if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_TRUE)
+			AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
 
-                // Couldn't find the FACE in the copied BODY that corresponds to
-                // the FACE being swept in the original BODY.  Cannot do the
-                // reversal and sweep.
-              else
-              {
-                reverse_failed = CUBIT_TRUE;
-              }
-            }
+		      // Rotate the FACE about the axis, sweep_vector.
+		      int reverse_failed = CUBIT_FALSE;
+		      bool volume_is_negative = false;
+                      //copy stop_BODY
+		      BODY* temp_BODY = NULL;
+ 		      if (stop_BODY)
+			copy_BODY(stop_BODY);
 
-              // The sweep failed for reasons other than the creation of a negative
-              // volume.  Doesn't make sense to do the reversal and sweep.
-            else
-            {
-              reverse_failed = CUBIT_TRUE;
-            }
+		      if ( !this->sweep_FACE_about_axis( copied_FACE_ptr,
+							 sweep_axis,
+							 point,
+							 angle,
+							 volume_is_negative,
+							 primary_side,
+							 steps,
+							 draft_angle,
+							 draft_type,
+							 rigid,
+							 stop_FACE,
+							 temp_BODY) )
+			{
+			  // Volume was negative, so we're going to try to reverse the
+			  // BODY
+			  if (volume_is_negative)
+			    {
+			      // Delete the BODY that was just created (the one with the
+			      // negative volume).
+			      //AcisQueryEngine::instance()->delete_ACIS_BODY(copy_of_original_BODY_ptr);
 
-              // If the reverse was successful, then try the sweep again
-            if (reverse_failed == CUBIT_FALSE)
-            {
-              if ( !this->sweep_FACE_about_axis( copied_FACE_ptr,
-                                                 sweep_axis,
-                                                 point,
-                                                 angle,
-                                                 volume_is_negative,
-                                                 primary_side,
-                                                 steps,
-                                                 draft_angle,
-                                                 draft_type,
-                                                 rigid) )
-              {
-                  // The attempt to reverse the BODY and sweep it again failed.
-                PRINT_ERROR("Problem sweeping one of the surfaces.\n");
+			      // Make another copy of the original BODY before attempting
+			      // the sweep again. We will perform the sweep on this copy,
+			      // not on the original body.
+			      copy_of_original_BODY_ptr = this->copy_BODY(BODY_ptr, CUBIT_FALSE);
 
-                  // Delete the BODY created by this sweep
-                AcisQueryEngine::instance()->delete_ACIS_BODY( copy_of_original_BODY_ptr, CUBIT_TRUE);
-                copy_of_original_BODY_ptr = NULL;
+			      // Find the FACE in the copied BODY that corresponds to the FACE
+			      // being swept in the original BODY.  Note that when we made a copy
+			      // of the original BODY, all the "parent" attributes were copied
+			      // over to the new BODY.
+			      if (copy_of_original_BODY_ptr)
+				{
+				  copied_FACE_ptr = (FACE *) (AcisQueryEngine::instance()->
+							      get_ENTITY_of_entity( copy_of_original_BODY_ptr, refface_ptr ));
+				}
 
-                skip_loop = CUBIT_TRUE;
-              }
-            }
+			      if (copied_FACE_ptr)
+				{
+				  // Remove all the CUBIT_OWNER attributes from the copied BODY
+				  // as we're going to sweep it.
+				  if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_TRUE)
+				    AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
 
-            else
-            {
-              skip_loop = CUBIT_TRUE;
-            }
-          } // End of if branch for initial sweep attemp
-        }
+				  // Find out how many FACEs exist in the BODY that owns
+				  // copied_FACE_ptr
+				  DLIList<FACE*> FACE_list;
+				  if (AcisQueryEngine::instance()->get_FACEs( (ENTITY *)copy_of_original_BODY_ptr, FACE_list ))
+				    {
+				      // If copied_FACE_ptr is the only FACE in this BODY, then we can
+				      // try reversing the BODY before attempting the sweep again
+				      if (FACE_list.size() == 1)
+					{
+					  // Make sure this is a DOUBLE_SIDED FACE
+					  if (copied_FACE_ptr->sides() == DOUBLE_SIDED)
+					    {
+					      // Reverse the BODY that this FACE belongs to
+					      if (!api_reverse_body(copy_of_original_BODY_ptr).ok())
+						{
+						  reverse_failed = CUBIT_TRUE;
+						}
+					    }
 
-          // There were problems getting the FACE in the copied BODY, corresponding
-          // to the FACE being swept in the original BODY. We can't proceed with the
-          // sweep of this RefFace.
-        else
-        {
-          skip_loop = CUBIT_TRUE;
-        } // End of if branch if copied_FACE_ptr exists
+					  // The single FACE in this BODY is *not* DOUBLE_SIDED.
+					  // Cannot do the reversal and sweep.
+					  else
+					    {
+					      reverse_failed = CUBIT_TRUE;
+					    }
+					}
 
-          // As all went well (apparently :-), create a new Body using the new
-          // swept solid and get rid of the original Body and its associated
-          // ACIS BODY.
-        if( !skip_loop )
-        {
-          BodySM* new_body_ptr = get_new_Body(body_ptr, BODY_ptr,
-                                            copy_of_original_BODY_ptr,
-                                            CUBIT_FALSE, CUBIT_FALSE);
-          if (new_body_ptr)
-          {
-            sweep_status = CUBIT_SUCCESS;
-            result_body_list.append(new_body_ptr);
-          }
-        } // End of if branch if skip_loop != TRUE of final new_body_ptr construction
-        else
-        {
-            // Get rid of the copied body, if it exists
-          if( copy_of_original_BODY_ptr )
-          {
-            AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
-            AcisQueryEngine::instance()->delete_ACIS_BODY( copy_of_original_BODY_ptr);
-            copy_of_original_BODY_ptr = NULL;
-          }
-        }
-      } // End of if branch if skip_loop != TRUE for problems finding assoc. ACIS BODY
-    } // End of if branch if skip_loop != TRUE for non-planar FACE_ptr
-  }
+				      // More than 1 FACE in this BODY. Cannot do the reversal and sweep.
+				      else
+					{
+					  reverse_failed = CUBIT_TRUE;
+					}
+				    }
 
+				  // Couldn't get the FACES of the BODY being swept. Cannot do
+				  // the reversal and sweep.
+				  else
+				    {
+				      reverse_failed = CUBIT_TRUE;
+				    }
+				}
 
-  for (i = 0; i < EDGEs_to_be_swept_list.size(); i++)
-  {
-      // Get the EDGE we're going to sweep
-    copied_EDGE_ptr = EDGEs_to_be_swept_list.get_and_step();
+			      // Couldn't find the FACE in the copied BODY that corresponds to
+			      // the FACE being swept in the original BODY.  Cannot do the
+			      // reversal and sweep.
+			      else
+				{
+				  reverse_failed = CUBIT_TRUE;
+				}
+			    }
 
-    BODY* new_BODY_ptr = NULL;
-    sweep_status = sweep_EDGE_about_axis( copied_EDGE_ptr,
-                                          new_BODY_ptr,
-                                          sweep_axis,
-                                          point,
-                                          angle,
-                                          steps,
-                                          draft_angle,
-                                          draft_type,
-                                          make_solid,
-                                          rigid);
+			  // The sweep failed for reasons other than the creation of a negative
+			  // volume.  Doesn't make sense to do the reversal and sweep.
+			  else
+			    {
+			      reverse_failed = CUBIT_TRUE;
+			    }
 
-    if(sweep_status == CUBIT_FAILURE)
-    {
-      PRINT_ERROR("Problem sweeping curve.\n");
-      continue;
-    }
+			  // If the reverse was successful, then try the sweep again
+			  if (reverse_failed == CUBIT_FALSE)
+			    {
+			      if ( !this->sweep_FACE_about_axis( copied_FACE_ptr,
+								 sweep_axis,
+								 point,
+								 angle,
+								 volume_is_negative,
+								 primary_side,
+								 steps,
+								 draft_angle,
+								 draft_type,
+								 rigid,
+								 stop_FACE,
+								 stop_BODY) )
+				{
+				  // The attempt to reverse the BODY and sweep it again failed.
+				  PRINT_ERROR("Problem sweeping one of the surfaces.\n");
 
-    BodySM* new_body_ptr = get_new_Body(body_ptr, BODY_ptr,
-                                      new_BODY_ptr,
-                                      CUBIT_FALSE, CUBIT_FALSE);
-    if (new_body_ptr)
-    {
-      result_body_list.append(new_body_ptr);
-      sweep_status = CUBIT_SUCCESS;
-    }
-  } // End of i loop, iterating over EDGEs_to_be_swept_list
+				  // Delete the BODY created by this sweep
+				  AcisQueryEngine::instance()->delete_ACIS_BODY( copy_of_original_BODY_ptr, CUBIT_TRUE);
+				  copy_of_original_BODY_ptr = NULL;
 
-  return sweep_status;
-}
+				  skip_loop = CUBIT_TRUE;
+				}
+			    }
 
-//-------------------------------------------------------------------------
-// Purpose       : Perform a translational sweep operation
-//
-// Special Notes :
-//
-// Creator       : Malcolm J. Panthaki
-//
-// Creation Date : 10/31/96
-//-------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::sweep_translational(
-  DLIList<GeometryEntity*>& ref_ent_list,
-  DLIList<BodySM*>& result_body_list,
-  const CubitVector& sweep_vector,
-  double draft_angle,
-  int draft_type,
-  bool switchside,
-  bool rigid) const
-{
-  DLIList<FACE*> FACEs_to_be_swept_list;
-  DLIList<EDGE*> EDGEs_to_be_swept_list;
-  DLIList<Surface*> ref_faces_list;
-  DLIList<Curve*> ref_edges_list;
+			  else
+			    {
+			      skip_loop = CUBIT_TRUE;
+			    }
+			} // End of if branch for initial sweep attemp
+		    }
 
-    // First get the ACIS FACEs associated with the input RefFaces
-  //DLIList<FACE*> temp_faces;
-  int i;
-  for (i = ref_ent_list.size(); i > 0; i--)
-  {
-    GeometryEntity *ref_ent = ref_ent_list.get_and_step();
-    Surface *ref_face = CAST_TO(ref_ent, Surface);
-    Curve* ref_edge = CAST_TO(ref_ent, Curve);
+		  // There were problems getting the FACE in the copied BODY, corresponding
+		  // to the FACE being swept in the original BODY. We can't proceed with the
+		  // sweep of this RefFace.
+		  else
+		    {
+		      skip_loop = CUBIT_TRUE;
+		    } // End of if branch if copied_FACE_ptr exists
 
-    if(ref_face != NULL)
-    {
-      //SurfaceACIS::get_FACEs_of_RefFace( ref_face, temp_faces);
-      //if (temp_faces.size() > 1) {
-      //  PRINT_ERROR("Surface %d cannot be swept as the number of ACIS FACEs associated \n"
-      //              "       with it is not 1.\n",
-      //              ref_face->id());
-      //  return CUBIT_FAILURE;
-      //}
-      //if (temp_faces.size() > 0)
-      //   FACEs_to_be_swept_list += temp_faces;
-      //temp_faces.clean_out();
-      FACE* FACE_ptr = AcisQueryEngine::get_FACE(ref_face);
-      if (!FACE_ptr)
-        return CUBIT_FAILURE;
-      FACEs_to_be_swept_list.append(FACE_ptr);
-      ref_faces_list.append(ref_face);
-    }
-    else if (ref_edge != NULL)
-    {
-      //EDGEs_to_be_swept_list.append(CurveACIS::get_first_EDGE(ref_edge));
-      EDGEs_to_be_swept_list.append(AcisQueryEngine::get_EDGE(ref_edge));
-      ref_edges_list.append(ref_edge);
-    }
+		  // As all went well (apparently :-), create a new Body using the new
+		  // swept solid and get rid of the original Body and its associated
+		  // ACIS BODY.
+		  copy_of_original_BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(copied_FACE_ptr);
+		  if( !skip_loop )
+		    {		      
+		      BodySM* new_body_ptr = get_new_Body(body_ptr, BODY_ptr,
+							  copy_of_original_BODY_ptr,
+							  CUBIT_FALSE, CUBIT_FALSE);
+		      if (new_body_ptr)
+			{
+			  sweep_status = CUBIT_SUCCESS;
+			  result_body_list.append(new_body_ptr);
+			}
+		    } // End of if branch if skip_loop != TRUE of final new_body_ptr construction
+		  else
+		    {
+		      // Get rid of the copied body, if it exists
+		      if( copy_of_original_BODY_ptr )
+			{
+			  AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
+			  AcisQueryEngine::instance()->delete_ACIS_BODY( copy_of_original_BODY_ptr);
+			  copy_of_original_BODY_ptr = NULL;
+			}
+		    }
+		} // End of if branch if skip_loop != TRUE for problems finding assoc. ACIS BODY
+	    } // End of if branch if skip_loop != TRUE for non-planar FACE_ptr
+	}
 
-  }
 
-  ref_edges_list.reset();
-  ref_faces_list.reset();
+      for (i = 0; i < EDGEs_to_be_swept_list.size(); i++)
+	{
+	  // Get the EDGE we're going to sweep
+	  copied_EDGE_ptr = EDGEs_to_be_swept_list.get_and_step();
 
-    // Now sweep them along the sweep_vector, a distance equal to the length of
-    // the sweep SPAvector, with the input draft angle and draft type.
+	  BODY* new_BODY_ptr = NULL;
+	  sweep_status = sweep_EDGE_about_axis( copied_EDGE_ptr,
+						new_BODY_ptr,
+						sweep_axis,
+						point,
+						angle,
+						steps,
+						draft_angle,
+						draft_type,
+						make_solid,
+						rigid,
+						stop_FACE);
 
-  FACEs_to_be_swept_list.reset();
-  EDGEs_to_be_swept_list.reset();
-  FACE* FACE_ptr = NULL;
-  FACE* copied_FACE_ptr = NULL;
-  EDGE* copied_EDGE_ptr = NULL;
-  Surface* refface_ptr = NULL;
-  BodySM* body_ptr = NULL;
-  BODY* BODY_ptr = NULL;
-  BODY* copy_of_original_BODY_ptr = NULL;
-  bool primary_side = true;
-  bool skip_loop = false;
-  CubitStatus sweep_status = CUBIT_FAILURE;
-  for (i = 0; i < FACEs_to_be_swept_list.size(); i++)
-  {
-    skip_loop = CUBIT_FALSE;
-    copied_FACE_ptr = NULL;
+	  if(sweep_status == CUBIT_FAILURE)
+	    {
+	      PRINT_ERROR("Problem sweeping curve.\n");
+	      continue;
+	    }
 
-      // Get the RefFace we're going to sweep
-    refface_ptr = ref_faces_list.get_and_step();
+	  BodySM* new_body_ptr = get_new_Body(body_ptr, BODY_ptr,
+					      new_BODY_ptr,
+					      CUBIT_FALSE, CUBIT_FALSE);
+	  if (new_body_ptr)
+	    {
+	      result_body_list.append(new_body_ptr);
+	      sweep_status = CUBIT_SUCCESS;
+	    }
+	} // End of i loop, iterating over EDGEs_to_be_swept_list
 
-      // Get the FACE we're going to sweep
-    FACE_ptr = FACEs_to_be_swept_list.get_and_step();
-
-      // If the FACE is DOUBLE-SIDED and the switchside option is TRUE
-    if (FACE_ptr->sides() && switchside)
-    {
-      primary_side = CUBIT_FALSE;
+      return sweep_status;
     }
 
-      // Get the associated Body and its ACIS BODY
-    body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY(FACE_ptr);
-    if (body_ptr != NULL)
+  //-------------------------------------------------------------------------
+  // Purpose       : Perform a translational sweep operation
+  //
+  // Special Notes :
+  //
+  // Creator       : Malcolm J. Panthaki
+  //
+  // Creation Date : 10/31/96
+  //-------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::sweep_translational(
+						    DLIList<GeometryEntity*>& ref_ent_list,
+						    DLIList<BodySM*>& result_body_list,
+						    const CubitVector& sweep_vector,
+						    double draft_angle,
+						    int draft_type,
+						    bool switchside,
+						    bool rigid,
+						    Surface* stop_surf,
+                                                    BodySM*  stop_body) const
     {
-      BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
+      DLIList<FACE*> FACEs_to_be_swept_list;
+      DLIList<EDGE*> EDGEs_to_be_swept_list;
+      DLIList<Surface*> ref_faces_list;
+      DLIList<Curve*> ref_edges_list;
 
-        // Make sure we have a valid ACIS BODY associated with this Body
-        // and FACE
-      if (BODY_ptr == NULL)
-      {
-        PRINT_ERROR("No valid volume associated with the RefFace.\n");
-        skip_loop = CUBIT_TRUE;
-      }
-    }
+      FACE * stop_FACE = NULL;
+      BODY * stop_BODY = NULL;
 
-    else
-    {
-      PRINT_WARNING("No volume associated with this surface.\n"
-                    "         Sweeping will continue with the ACIS BODY.\n");
-      BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr);
-      if (BODY_ptr == NULL)
-      {
-        PRINT_ERROR("No valid volume associated with the RefFace.\n");
-        skip_loop = CUBIT_TRUE;
-      }
-    }
+      if (stop_surf)
+	stop_FACE = AcisQueryEngine::get_FACE(stop_surf);
 
-      // If there were no problems finding an associated ACIS BODY, proceed
-    if( !skip_loop )
-    {
-        // Make a copy of the original BODY before doing the sweep.
-        // We will perform the sweep on the copy, not on the original body.
-      copy_of_original_BODY_ptr = this->copy_BODY(BODY_ptr, CUBIT_FALSE);
+      if (stop_body)
+        {
+          BodyACIS* bodyACISPtr = CAST_TO(stop_body, BodyACIS) ;
+          assert(bodyACISPtr);
+          stop_BODY = bodyACISPtr->get_BODY_ptr() ;
+        }
 
-        // Find the FACE in the copied BODY that corresponds to the FACE
-        // being swept in the original BODY.  Note that when we made a copy
-        // of the original BODY, all the "parent" attributes were copied
-        // over to the new BODY.
-      if (copy_of_original_BODY_ptr)
-      {
-        copied_FACE_ptr = (FACE *) (AcisQueryEngine::instance()->
-          get_ENTITY_of_entity( copy_of_original_BODY_ptr, refface_ptr ));
-      }
+      // First get the ACIS FACEs associated with the input RefFaces
+      //DLIList<FACE*> temp_faces;
+      int i;
+      for (i = ref_ent_list.size(); i > 0; i--)
+	{
+	  GeometryEntity *ref_ent = ref_ent_list.get_and_step();
+	  Surface *ref_face = CAST_TO(ref_ent, Surface);
+	  Curve* ref_edge = CAST_TO(ref_ent, Curve);
 
-      if (copied_FACE_ptr)
-      {
-          // Remove all the CUBIT_OWNER attributes from the copied BODY
-          // as we're going to sweep it.
-        if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_TRUE)
-          AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
+	  if(ref_face != NULL)
+	    {
+	      //SurfaceACIS::get_FACEs_of_RefFace( ref_face, temp_faces);
+	      //if (temp_faces.size() > 1) {
+	      //  PRINT_ERROR("Surface %d cannot be swept as the number of ACIS FACEs associated \n"
+	      //              "       with it is not 1.\n",
+	      //              ref_face->id());
+	      //  return CUBIT_FAILURE;
+	      //}
+	      //if (temp_faces.size() > 0)
+	      //   FACEs_to_be_swept_list += temp_faces;
+	      //temp_faces.clean_out();
+	      FACE* FACE_ptr = AcisQueryEngine::get_FACE(ref_face);
+	      if (!FACE_ptr)
+		return CUBIT_FAILURE;
+	      FACEs_to_be_swept_list.append(FACE_ptr);
+	      ref_faces_list.append(ref_face);
+	    }
+	  else if (ref_edge != NULL)
+	    {
+	      //EDGEs_to_be_swept_list.append(CurveACIS::get_first_EDGE(ref_edge));
+	      EDGEs_to_be_swept_list.append(AcisQueryEngine::get_EDGE(ref_edge));
+	      ref_edges_list.append(ref_edge);
+	    }
 
-          // Sweep the FACE along the SPAvector, sweep_vector
-        bool reverse_failed = false;
-        bool volume_is_negative = false;
+	}
 
-        if ( this->sweep_FACE_along_vector( copied_FACE_ptr,
-                                            sweep_vector,
-                                            volume_is_negative,
-                                            primary_side,
-                                            draft_angle,
-                                            draft_type,
-                                            rigid) == CUBIT_FAILURE)
-        {
-            // Volume was negative, so we're going to try to reverse the
-            // BODY
-          if (volume_is_negative)
-          {
-              // Delete the BODY that was just created (the one with the
-              // negative volume).
-            AcisQueryEngine::instance()->delete_ACIS_BODY(copy_of_original_BODY_ptr, CUBIT_TRUE);
+      ref_edges_list.reset();
+      ref_faces_list.reset();
 
-              // Make another copy of the original BODY before attempting
-              // the sweep again. We will perform the sweep on this copy,
-              // not on the original body.
-            copy_of_original_BODY_ptr = this->copy_BODY(BODY_ptr, CUBIT_FALSE);
+      // Now sweep them along the sweep_vector, a distance equal to the length of
+      // the sweep SPAvector, with the input draft angle and draft type.
 
-              // Find the FACE in the copied BODY that corresponds to the FACE
-              // being swept in the original BODY.  Note that when we made a copy
-              // of the original BODY, all the "parent" attributes were copied
-              // over to the new BODY.
-            if (copy_of_original_BODY_ptr)
-            {
-              copied_FACE_ptr = (FACE *) (AcisQueryEngine::instance()->
-                get_ENTITY_of_entity( copy_of_original_BODY_ptr, refface_ptr ));
-            }
+      FACEs_to_be_swept_list.reset();
+      EDGEs_to_be_swept_list.reset();
+      FACE* FACE_ptr = NULL;
+      FACE* copied_FACE_ptr = NULL;
+      EDGE* copied_EDGE_ptr = NULL;
+      Surface* refface_ptr = NULL;
+      BodySM* body_ptr = NULL;
+      BODY* BODY_ptr = NULL;
+      BODY* copy_of_original_BODY_ptr = NULL;
+      bool primary_side = true;
+      bool skip_loop = false;
+      CubitStatus sweep_status = CUBIT_FAILURE;
+      for (i = 0; i < FACEs_to_be_swept_list.size(); i++)
+	{
+	  skip_loop = CUBIT_FALSE;
+	  copied_FACE_ptr = NULL;
 
-            if (copied_FACE_ptr)
-            {
-                // Remove all the CUBIT_OWNER attributes from the copied BODY
-                // as we're going to sweep it.
-              if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_TRUE)
-                AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
+	  // Get the RefFace we're going to sweep
+	  refface_ptr = ref_faces_list.get_and_step();
 
-                // Find out how many FACEs exist in the BODY that owns
-                // copied_FACE_ptr
-              DLIList<FACE*> FACE_list;
-              if (AcisQueryEngine::instance()->get_FACEs( (ENTITY *)copy_of_original_BODY_ptr, FACE_list ))
-              {
-                  // If copied_FACE_ptr is the only FACE in this BODY, then we can
-                  // try reversing the BODY before attempting the sweep again
-                if (FACE_list.size() == 1)
-                {
-                    // Make sure this is a DOUBLE_SIDED FACE
-                  if (copied_FACE_ptr->sides() == DOUBLE_SIDED)
-                  {
-                      // Reverse the BODY that this FACE belongs to
-                    if (!api_reverse_body(copy_of_original_BODY_ptr).ok())
-                    {
-                      reverse_failed = CUBIT_TRUE;
-                    }
-                  }
+	  // Get the FACE we're going to sweep
+	  FACE_ptr = FACEs_to_be_swept_list.get_and_step();
 
-                    // The single FACE in this BODY is *not* DOUBLE_SIDED.
-                    // Cannot do the reversal and sweep.
-                  else
-                  {
-                    reverse_failed = CUBIT_TRUE;
-                  }
-                }
+	  // If the FACE is DOUBLE-SIDED and the switchside option is TRUE
+	  if (FACE_ptr->sides() && switchside)
+	    {
+	      primary_side = CUBIT_FALSE;
+	    }
 
-                  // More than 1 FACE in this BODY. Cannot do the reversal and sweep.
-                else
-                {
-                  reverse_failed = CUBIT_TRUE;
-                }
-              }
+	  // Get the associated Body and its ACIS BODY
+	  body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY(FACE_ptr);
+	  if (body_ptr != NULL)
+	    {
+	      BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
 
-                // Couldn't get the FACES of the BODY being swept. Cannot do
-                // the reversal and sweep.
-              else
-              {
-                reverse_failed = CUBIT_TRUE;
-              }
-            }
+	      // Make sure we have a valid ACIS BODY associated with this Body
+	      // and FACE
+	      if (BODY_ptr == NULL)
+		{
+		  PRINT_ERROR("No valid volume associated with the RefFace.\n");
+		  skip_loop = CUBIT_TRUE;
+		}
+	    }
 
-              // Couldn't find the FACE in the copied BODY that corresponds to
-              // the FACE being swept in the original BODY.  Cannot do the
-              // reversal and sweep.
-            else
-            {
-              reverse_failed = CUBIT_TRUE;
-            }
-          }
+	  else
+	    {
+	      PRINT_WARNING("No volume associated with this surface.\n"
+			    "         Sweeping will continue with the ACIS BODY.\n");
+	      BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr);
+	      if (BODY_ptr == NULL)
+		{
+		  PRINT_ERROR("No valid volume associated with the RefFace.\n");
+		  skip_loop = CUBIT_TRUE;
+		}
+	    }
 
-            // The sweep failed for reasons other than the creation of a negative
-            // volume.  Doesn't make sense to do the reversal and sweep.
-          else
-          {
-            reverse_failed = CUBIT_TRUE;
-          }
+	  // If there were no problems finding an associated ACIS BODY, proceed
+	  if( !skip_loop )
+	    {
+	      // Make a copy of the original BODY before doing the sweep.
+	      // We will perform the sweep on the copy, not on the original body.
+	      copy_of_original_BODY_ptr = this->copy_BODY(BODY_ptr, CUBIT_FALSE);
 
-            // If reverse was successful, then try the sweep again
-          if ( reverse_failed == CUBIT_FALSE )
-          {
-            if ( this->sweep_FACE_along_vector( copied_FACE_ptr,
-                                                sweep_vector,
-                                                volume_is_negative,
-                                                primary_side,
-                                                draft_angle,
-                                                draft_type,
-                                                rigid) == CUBIT_FAILURE )
-            {
-                // The attempt to reverse the BODY and sweep it again failed.
-              PRINT_ERROR("Problem sweeping one of the surfaces.\n");
+	      // Find the FACE in the copied BODY that corresponds to the FACE
+	      // being swept in the original BODY.  Note that when we made a copy
+	      // of the original BODY, all the "parent" attributes were copied
+	      // over to the new BODY.
+	      if (copy_of_original_BODY_ptr)
+		{
+		  copied_FACE_ptr = (FACE *) (AcisQueryEngine::instance()->
+					      get_ENTITY_of_entity( copy_of_original_BODY_ptr, refface_ptr ));
+		}
 
-                // Delete the BODY created by this sweep
-              AcisQueryEngine::instance()->delete_ACIS_BODY( copy_of_original_BODY_ptr, CUBIT_TRUE );
+	      if (copied_FACE_ptr)
+		{
+		  // Remove all the CUBIT_OWNER attributes from the copied BODY
+		  // as we're going to sweep it.
+		  if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_TRUE)
+		    AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
 
-              skip_loop = CUBIT_TRUE;
-            }
-          }
-          else
-          {
-            skip_loop = CUBIT_TRUE;
-          }
-        } // End of if branch for initial sweep attemp
-      }
+		  // Sweep the FACE along the SPAvector, sweep_vector
+		  bool reverse_failed = false;
+		  bool volume_is_negative = false;
 
-        // There were problems getting the FACE in the copied BODY, corresponding
-        // to the FACE being swept in the original BODY. We can't proceed with the
-        // sweep of this RefFace.
-      else
-      {
-        skip_loop = CUBIT_TRUE;
-      } // End of if branch if copied_FACE_ptr exists
+                  //copy stop_BODY
+		   BODY* temp_BODY = NULL;
+                   if (stop_BODY)
+                     copy_BODY(stop_BODY);
 
-        // As all went well (apparently :-), create a new Body using the new
-        // swept solid and get rid of the original Body and its associated
-        // ACIS BODY.
-      if( !skip_loop )
-      {
-        BodySM* new_body_ptr = get_new_Body(body_ptr, BODY_ptr,
-                                          copy_of_original_BODY_ptr,
-                                          CUBIT_FALSE, CUBIT_FALSE);
-        if (new_body_ptr)
-        {
-          result_body_list.append(new_body_ptr);
-          sweep_status = CUBIT_SUCCESS;
-        }
+		  if ( this->sweep_FACE_along_vector( copied_FACE_ptr,
+						      sweep_vector,
+						      volume_is_negative,
+						      primary_side,
+						      draft_angle,
+						      draft_type,
+						      rigid,
+						      stop_FACE,
+                                                      temp_BODY) == CUBIT_FAILURE)
+		    {
+		      // Volume was negative, so we're going to try to reverse the
+		      // BODY
+		      if (volume_is_negative)
+			{
+			  // Delete the BODY that was just created (the one with the
+			  // negative volume).
+			  AcisQueryEngine::instance()->delete_ACIS_BODY(copy_of_original_BODY_ptr, CUBIT_TRUE);
 
-      } // End of if branch if skip_loop != TRUE of final new_body_ptr construction
-      else
-      {
-          // Get rid of the copied body, if it exists
-        if( copy_of_original_BODY_ptr )
-        {
-          AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
-          AcisQueryEngine::instance()->delete_ACIS_BODY( copy_of_original_BODY_ptr);
+			  // Make another copy of the original BODY before attempting
+			  // the sweep again. We will perform the sweep on this copy,
+			  // not on the original body.
+			  copy_of_original_BODY_ptr = this->copy_BODY(BODY_ptr, CUBIT_FALSE);
 
-          copy_of_original_BODY_ptr = NULL;
-        }
-      }
-    } // End of if branch if skip_loop != TRUE for problems finding assoc. ACIS BODY
-  } // End of i loop, iterating over FACEs_to_be_swept_list
+			  // Find the FACE in the copied BODY that corresponds to the FACE
+			  // being swept in the original BODY.  Note that when we made a copy
+			  // of the original BODY, all the "parent" attributes were copied
+			  // over to the new BODY.
+			  if (copy_of_original_BODY_ptr)
+			    {
+			      copied_FACE_ptr = (FACE *) (AcisQueryEngine::instance()->
+							  get_ENTITY_of_entity( copy_of_original_BODY_ptr, refface_ptr ));
+			    }
 
+			  if (copied_FACE_ptr)
+			    {
+			      // Remove all the CUBIT_OWNER attributes from the copied BODY
+			      // as we're going to sweep it.
+			      if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_TRUE)
+				AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
 
-    //Now we iterate over the EDGEs
-  for (i = 0; i < EDGEs_to_be_swept_list.size(); i++)
-  {
-      // Get the EDGE we're going to sweep
-    copied_EDGE_ptr = EDGEs_to_be_swept_list.get_and_step();
+			      // Find out how many FACEs exist in the BODY that owns
+			      // copied_FACE_ptr
+			      DLIList<FACE*> FACE_list;
+			      if (AcisQueryEngine::instance()->get_FACEs( (ENTITY *)copy_of_original_BODY_ptr, FACE_list ))
+				{
+				  // If copied_FACE_ptr is the only FACE in this BODY, then we can
+				  // try reversing the BODY before attempting the sweep again
+				  if (FACE_list.size() == 1)
+				    {
+				      // Make sure this is a DOUBLE_SIDED FACE
+				      if (copied_FACE_ptr->sides() == DOUBLE_SIDED)
+					{
+					  // Reverse the BODY that this FACE belongs to
+					  if (!api_reverse_body(copy_of_original_BODY_ptr).ok())
+					    {
+					      reverse_failed = CUBIT_TRUE;
+					    }
+					}
 
-    BODY* new_BODY_ptr = NULL;
-    sweep_status = sweep_EDGE_along_vector( copied_EDGE_ptr,
-                                            new_BODY_ptr,
-                                            sweep_vector,
-                                            draft_angle,
-                                            draft_type,
-                                            rigid);
-    if(sweep_status == CUBIT_FAILURE)
-    {
-      PRINT_ERROR("Problem sweeping curve.\n");
-      continue;
-    }
+				      // The single FACE in this BODY is *not* DOUBLE_SIDED.
+				      // Cannot do the reversal and sweep.
+				      else
+					{
+					  reverse_failed = CUBIT_TRUE;
+					}
+				    }
 
-    BodySM* new_body_ptr = get_new_Body(body_ptr, BODY_ptr,
-                                      new_BODY_ptr,
-                                      CUBIT_FALSE, CUBIT_FALSE);
-    if (new_body_ptr)
-    {
-      sweep_status = CUBIT_SUCCESS;
-      result_body_list.append(new_body_ptr);
-    }
+				  // More than 1 FACE in this BODY. Cannot do the reversal and sweep.
+				  else
+				    {
+				      reverse_failed = CUBIT_TRUE;
+				    }
+				}
 
-  } // End of i loop, iterating over EDGEs_to_be_swept_list
+			      // Couldn't get the FACES of the BODY being swept. Cannot do
+			      // the reversal and sweep.
+			      else
+				{
+				  reverse_failed = CUBIT_TRUE;
+				}
+			    }
 
-  return sweep_status;
-}
+			  // Couldn't find the FACE in the copied BODY that corresponds to
+			  // the FACE being swept in the original BODY.  Cannot do the
+			  // reversal and sweep.
+			  else
+			    {
+			      reverse_failed = CUBIT_TRUE;
+			    }
+			}
 
-CubitStatus AcisModifyEngine::sweep_perpendicular(
-  DLIList<GeometryEntity*>& ref_ent_list,
-  DLIList<BodySM*>& result_body_list,
-  double distance,
-  double draft_angle,
-  int draft_type,
-  bool switchside,
-  bool rigid) const
-{
-  DLIList<FACE*> FACEs_to_be_swept_list;
+		      // The sweep failed for reasons other than the creation of a negative
+		      // volume.  Doesn't make sense to do the reversal and sweep.
+		      else
+			{
+			  reverse_failed = CUBIT_TRUE;
+			}
 
-  DLIList<Surface*> ref_faces_list;
-  DLIList<Curve*> ref_edges_list;
+		      // If reverse was successful, then try the sweep again
+		      if ( reverse_failed == CUBIT_FALSE )
+			{
+                          //copy stop_BODY
+                          BODY* temp_BODY = NULL;
+                          if (stop_BODY)
+                            copy_BODY(stop_BODY);
 
-    // First get the ACIS FACEs associated with the input RefFaces
-  //DLIList<FACE*> temp_faces;
-  int i;
-  for (i = ref_ent_list.size(); i > 0; i--)
-  {
-    GeometryEntity *ref_ent = ref_ent_list.get_and_step();
-    Surface *ref_face = CAST_TO(ref_ent, Surface);
-    Curve* ref_edge = CAST_TO(ref_ent, Curve);
+			  if ( this->sweep_FACE_along_vector( copied_FACE_ptr,
+							      sweep_vector,
+							      volume_is_negative,
+							      primary_side,
+							      draft_angle,
+							      draft_type,
+							      rigid, 
+							      stop_FACE,
+						              temp_BODY) == CUBIT_FAILURE )
+			    {
+			      // The attempt to reverse the BODY and sweep it again failed.
+			      PRINT_ERROR("Problem sweeping one of the surfaces.\n");
 
-    if(ref_face != NULL)
-    {
-      //SurfaceACIS::get_FACEs_of_RefFace( ref_face, temp_faces);
-      //if (temp_faces.size() > 1) {
-      //  PRINT_ERROR("Surface %d cannot be swept as the number of ACIS FACEs associated \n"
-      //              "       with it is not 1.\n",
-      //              ref_face->id());
-      //  return CUBIT_FAILURE;
-      //}
-      //if (temp_faces.size() > 0)
-      //   FACEs_to_be_swept_list += temp_faces;
-      //temp_faces.clean_out();
-      FACE* FACE_ptr = AcisQueryEngine::get_FACE(ref_face);
-      if (!FACE_ptr)
-        return CUBIT_FAILURE;
-      FACEs_to_be_swept_list.append(FACE_ptr);
-      ref_faces_list.append(ref_face);
-    }
-    else if (ref_edge != NULL)
-    {
-      ref_edges_list.append(ref_edge);
-    }
-  }
+			      // Delete the BODY created by this sweep
+			      AcisQueryEngine::instance()->delete_ACIS_BODY( copy_of_original_BODY_ptr, CUBIT_TRUE );
 
-  if(ref_edges_list.size())
-     PRINT_ERROR("Curves cannot be swept perpendicularly, please use the vector sweep.\n");
+			      skip_loop = CUBIT_TRUE;
+			    }
+			}
+		      else
+			{
+			  skip_loop = CUBIT_TRUE;
+			}
+		    } // End of if branch for initial sweep attemp
+		}
 
-  ref_faces_list.reset();
+	      // There were problems getting the FACE in the copied BODY, corresponding
+	      // to the FACE being swept in the original BODY. We can't proceed with the
+	      // sweep of this RefFace.
+	      else
+		{
+		  skip_loop = CUBIT_TRUE;
+		} // End of if branch if copied_FACE_ptr exists
 
-    // Now sweep them perpendicularly, a distance equal to the
-    // distance given with the input draft angle and
-    // draft type.
+	      // As all went well (apparently :-), create a new Body using the new
+	      // swept solid and get rid of the original Body and its associated
+	      // ACIS BODY.
+	      if( !skip_loop )
+		{
+		  BodySM* new_body_ptr = get_new_Body(body_ptr, BODY_ptr,
+						      copy_of_original_BODY_ptr,
+						      CUBIT_FALSE, CUBIT_FALSE);
+		  if (new_body_ptr)
+		    {
+		      result_body_list.append(new_body_ptr);
+		      sweep_status = CUBIT_SUCCESS;
+		    }
 
-  FACEs_to_be_swept_list.reset();
-  FACE* FACE_ptr = NULL;
-  FACE* copied_FACE_ptr = NULL;
+		} // End of if branch if skip_loop != TRUE of final new_body_ptr construction
+	      else
+		{
+		  // Get rid of the copied body, if it exists
+		  if( copy_of_original_BODY_ptr )
+		    {
+		      AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
+		      AcisQueryEngine::instance()->delete_ACIS_BODY( copy_of_original_BODY_ptr);
 
-  Surface* refface_ptr = NULL;
-  BodySM* body_ptr = NULL;
-  BODY* BODY_ptr = NULL;
-  BODY* copy_of_original_BODY_ptr = NULL;
-  bool primary_side = CUBIT_TRUE;
-  int skip_loop = CUBIT_FALSE;
-  CubitStatus sweep_status = CUBIT_FAILURE;
-  for (i = 0; i < FACEs_to_be_swept_list.size(); i++)
-  {
-    skip_loop = CUBIT_FALSE;
-    copied_FACE_ptr = NULL;
+		      copy_of_original_BODY_ptr = NULL;
+		    }
+		}
+	    } // End of if branch if skip_loop != TRUE for problems finding assoc. ACIS BODY
+	} // End of i loop, iterating over FACEs_to_be_swept_list
 
-      // Get the RefFace we're going to sweep
-    refface_ptr = ref_faces_list.get_and_step();
 
-      // Get the FACE we're going to sweep
-    FACE_ptr = FACEs_to_be_swept_list.get_and_step();
+      //Now we iterate over the EDGEs
+      for (i = 0; i < EDGEs_to_be_swept_list.size(); i++)
+	{
+	  // Get the EDGE we're going to sweep
+	  copied_EDGE_ptr = EDGEs_to_be_swept_list.get_and_step();
 
-      // If the FACE is DOUBLE-SIDED and the switchside option is TRUE
-    if (FACE_ptr->sides() && switchside)
-    {
-      primary_side = CUBIT_FALSE;
-    }
+	  BODY* new_BODY_ptr = NULL;
+	  sweep_status = sweep_EDGE_along_vector( copied_EDGE_ptr,
+						  new_BODY_ptr,
+						  sweep_vector,
+						  draft_angle,
+						  draft_type,
+						  rigid,
+						  stop_FACE);
+	  if(sweep_status == CUBIT_FAILURE)
+	    {
+	      PRINT_ERROR("Problem sweeping curve.\n");
+	      continue;
+	    }
 
-      // Get the associated Body and its ACIS BODY
-    body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY(FACE_ptr);
-    if (body_ptr != NULL)
-    {
-      BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
+	  BodySM* new_body_ptr = get_new_Body(body_ptr, BODY_ptr,
+					      new_BODY_ptr,
+					      CUBIT_FALSE, CUBIT_FALSE);
+	  if (new_body_ptr)
+	    {
+	      sweep_status = CUBIT_SUCCESS;
+	      result_body_list.append(new_body_ptr);
+	    }
 
-        // Make sure we have a valid ACIS BODY associated with this Body
-        // and FACE
-      if (BODY_ptr == NULL)
-      {
-        PRINT_ERROR("No valid volume associated with the RefFace.\n");
-        skip_loop = CUBIT_TRUE;
-      }
-    }
+	} // End of i loop, iterating over EDGEs_to_be_swept_list
 
-    else
-    {
-      PRINT_WARNING("No volume associated with this surface.\n"
-                    "         Sweeping will continue with the ACIS BODY.\n");
-      BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr);
-      if (BODY_ptr == NULL)
-      {
-        PRINT_ERROR("No valid volume associated with the RefFace.\n");
-        skip_loop = CUBIT_TRUE;
-      }
+      return sweep_status;
     }
 
-      // If there were no problems finding an associated ACIS BODY, proceed
-    if( !skip_loop )
+  CubitStatus AcisModifyEngine::sweep_perpendicular(
+						    DLIList<GeometryEntity*>& ref_ent_list,
+						    DLIList<BodySM*>& result_body_list,
+						    double distance,
+						    double draft_angle,
+						    int draft_type,
+						    bool switchside,
+						    bool rigid,
+						    Surface* stop_surf, 
+						    BodySM*  stop_body) const
     {
-        // Make a copy of the original BODY before doing the sweep.
-        // We will perform the sweep on the copy, not on the original body.
-      copy_of_original_BODY_ptr = this->copy_BODY(BODY_ptr, CUBIT_FALSE);
+      DLIList<FACE*> FACEs_to_be_swept_list;
 
-        // Find the FACE in the copied BODY that corresponds to the FACE
-        // being swept in the original BODY.  Note that when we made a copy
-        // of the original BODY, all the "parent" attributes were copied
-        // over to the new BODY.
-      if (copy_of_original_BODY_ptr)
-      {
-        copied_FACE_ptr = (FACE *) (AcisQueryEngine::instance()->
-          get_ENTITY_of_entity( copy_of_original_BODY_ptr, refface_ptr ));
-      }
+      DLIList<Surface*> ref_faces_list;
+      DLIList<Curve*> ref_edges_list;
+      FACE * stop_FACE = NULL;
+      BODY * stop_BODY = NULL;
 
-      if (copied_FACE_ptr)
-      {
-          // Remove all the CUBIT_OWNER attributes from the copied BODY
-          // as we're going to sweep it.
-        if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_TRUE)
-          AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
+      if (stop_surf)
+	stop_FACE = AcisQueryEngine::get_FACE(stop_surf);
 
-          // Sweep the FACE along the SPAvector, sweep_vector
-        bool reverse_failed = CUBIT_FALSE;
-        bool volume_is_negative = CUBIT_FALSE;
+      if (stop_body)
+	{
+	  BodyACIS* bodyACISPtr = CAST_TO(stop_body, BodyACIS) ;
+	  assert(bodyACISPtr);
+	  stop_BODY = bodyACISPtr->get_BODY_ptr() ;
+	}
 
-        if ( this->sweep_FACE_perpendicular( copied_FACE_ptr,
-                                             distance,
-                                             volume_is_negative,
-                                             primary_side,
-                                             draft_angle,
-                                             draft_type,
-                                             rigid) == CUBIT_FAILURE)
-        {
-            // Volume was negative, so we're going to try to reverse the
-            // BODY
-          if (volume_is_negative)
-          {
-              // Delete the BODY that was just created (the one with the
-              // negative volume).
-            AcisQueryEngine::instance()->delete_ACIS_BODY(copy_of_original_BODY_ptr, CUBIT_TRUE);
+      // First get the ACIS FACEs associated with the input RefFaces
+      // DLIList<FACE*> temp_faces;
+      int i;
+      for (i = ref_ent_list.size(); i > 0; i--)
+	{
+	  GeometryEntity *ref_ent = ref_ent_list.get_and_step();
+	  Surface *ref_face = CAST_TO(ref_ent, Surface);
+	  Curve* ref_edge = CAST_TO(ref_ent, Curve);
 
-              // Make another copy of the original BODY before attempting
-              // the sweep again. We will perform the sweep on this copy,
-              // not on the original body.
-            copy_of_original_BODY_ptr = this->copy_BODY(BODY_ptr, CUBIT_FALSE);
+	  if(ref_face != NULL)
+	    {
+	      //SurfaceACIS::get_FACEs_of_RefFace( ref_face, temp_faces);
+	      //if (temp_faces.size() > 1) {
+	      //  PRINT_ERROR("Surface %d cannot be swept as the number of ACIS FACEs associated \n"
+	      //              "       with it is not 1.\n",
+	      //              ref_face->id());
+	      //  return CUBIT_FAILURE;
+	      //}
+	      //if (temp_faces.size() > 0)
+	      //   FACEs_to_be_swept_list += temp_faces;
+	      //temp_faces.clean_out();
+	      FACE* FACE_ptr = AcisQueryEngine::get_FACE(ref_face);
+	      if (!FACE_ptr)
+		return CUBIT_FAILURE;
+	      FACEs_to_be_swept_list.append(FACE_ptr);
+	      ref_faces_list.append(ref_face);
+	    }
+	  else if (ref_edge != NULL)
+	    {
+	      ref_edges_list.append(ref_edge);
+	    }
+	}
 
-              // Find the FACE in the copied BODY that corresponds to the FACE
-              // being swept in the original BODY.  Note that when we made a copy
-              // of the original BODY, all the "parent" attributes were copied
-              // over to the new BODY.
-            if (copy_of_original_BODY_ptr)
-            {
-              copied_FACE_ptr = (FACE *) (AcisQueryEngine::instance()->
-                get_ENTITY_of_entity( copy_of_original_BODY_ptr, refface_ptr ));
-            }
+      if(ref_edges_list.size())
+	PRINT_ERROR("Curves cannot be swept perpendicularly, please use the vector sweep.\n");
 
-            if (copied_FACE_ptr)
-            {
-                // Remove all the CUBIT_OWNER attributes from the copied BODY
-                // as we're going to sweep it.
-              if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_TRUE)
-                AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
+      ref_faces_list.reset();
 
-                // Find out how many FACEs exist in the BODY that owns
-                // copied_FACE_ptr
-              DLIList<FACE*> FACE_list;
-              if (AcisQueryEngine::instance()->get_FACEs( (ENTITY *)copy_of_original_BODY_ptr, FACE_list ))
-              {
-                  // If copied_FACE_ptr is the only FACE in this BODY, then we can
-                  // try reversing the BODY before attempting the sweep again
-                if (FACE_list.size() == 1)
-                {
-                    // Make sure this is a DOUBLE_SIDED FACE
-                  if (copied_FACE_ptr->sides() == DOUBLE_SIDED)
-                  {
-                      // Reverse the BODY that this FACE belongs to
-                    if (!api_reverse_body(copy_of_original_BODY_ptr).ok())
-                    {
-                      reverse_failed = CUBIT_TRUE;
-                    }
-                  }
+      // Now sweep them perpendicularly, a distance equal to the
+      // distance given with the input draft angle and
+      // draft type.
 
-                    // The single FACE in this BODY is *not* DOUBLE_SIDED.
-                    // Cannot do the reversal and sweep.
-                  else
-                  {
-                    reverse_failed = CUBIT_TRUE;
-                  }
-                }
+      FACEs_to_be_swept_list.reset();
+      FACE* FACE_ptr = NULL;
+      FACE* copied_FACE_ptr = NULL;
 
-                  // More than 1 FACE in this BODY. Cannot do the reversal and sweep.
-                else
-                {
-                  reverse_failed = CUBIT_TRUE;
-                }
-              }
+      Surface* refface_ptr = NULL;
+      BodySM* body_ptr = NULL;
+      BODY* BODY_ptr = NULL;
+      BODY* copy_of_original_BODY_ptr = NULL;
+      bool primary_side = CUBIT_TRUE;
+      int skip_loop = CUBIT_FALSE;
+      CubitStatus sweep_status = CUBIT_FAILURE;
+      for (i = 0; i < FACEs_to_be_swept_list.size(); i++)
+	{
+	  skip_loop = CUBIT_FALSE;
+	  copied_FACE_ptr = NULL;
 
-                // Couldn't get the FACES of the BODY being swept. Cannot do
-                // the reversal and sweep.
-              else
-              {
-                reverse_failed = CUBIT_TRUE;
-              }
-            }
+	  // Get the RefFace we're going to sweep
+	  refface_ptr = ref_faces_list.get_and_step();
 
-              // Couldn't find the FACE in the copied BODY that corresponds to
-              // the FACE being swept in the original BODY.  Cannot do the
-              // reversal and sweep.
-            else
-            {
-              reverse_failed = CUBIT_TRUE;
-            }
-          }
+	  // Get the FACE we're going to sweep
+	  FACE_ptr = FACEs_to_be_swept_list.get_and_step();
 
-            // The sweep failed for reasons other than the creation of a negative
-            // volume.  Doesn't make sense to do the reversal and sweep.
-          else
-          {
-            reverse_failed = CUBIT_TRUE;
-          }
+	  // If the FACE is DOUBLE-SIDED and the switchside option is TRUE
+	  if (FACE_ptr->sides() && switchside)
+	    {
+	      primary_side = CUBIT_FALSE;
+	    }
 
-            // If reverse was successful, then try the sweep again
-          if ( reverse_failed == CUBIT_FALSE )
-          {
-            if ( this->sweep_FACE_perpendicular( copied_FACE_ptr,
-                                                 distance,
-                                                 volume_is_negative,
-                                                 primary_side,
-                                                 draft_angle,
-                                                 draft_type,
-                                                 rigid) == CUBIT_FAILURE )
-            {
-                // The attempt to reverse the BODY and sweep it again failed.
-              PRINT_ERROR("Problem sweeping one of the surfaces.\n");
+	  // Get the associated Body and its ACIS BODY
+	  body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY(FACE_ptr);
+	  if (body_ptr != NULL)
+	    {
+	      BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
 
-                // Delete the BODY created by this sweep
-              AcisQueryEngine::instance()->delete_ACIS_BODY( copy_of_original_BODY_ptr, CUBIT_TRUE );
+	      // Make sure we have a valid ACIS BODY associated with this Body
+	      // and FACE
+	      if (BODY_ptr == NULL)
+		{
+		  PRINT_ERROR("No valid volume associated with the RefFace.\n");
+		  skip_loop = CUBIT_TRUE;
+		}
+	    }
 
-              skip_loop = CUBIT_TRUE;
-            }
-          }
-          else
-          {
-            skip_loop = CUBIT_TRUE;
-          }
-        } // End of if branch for initial sweep attemp
-      }
+	  else
+	    {
+	      PRINT_WARNING("No volume associated with this surface.\n"
+			    "         Sweeping will continue with the ACIS BODY.\n");
+	      BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr);
+	      if (BODY_ptr == NULL)
+		{
+		  PRINT_ERROR("No valid volume associated with the RefFace.\n");
+		  skip_loop = CUBIT_TRUE;
+		}
+	    }
 
-        // There were problems getting the FACE in the copied BODY, corresponding
-        // to the FACE being swept in the original BODY. We can't proceed with the
-        // sweep of this RefFace.
-      else
-      {
-        skip_loop = CUBIT_TRUE;
-      } // End of if branch if copied_FACE_ptr exists
+	  // If there were no problems finding an associated ACIS BODY, proceed
+	  if( !skip_loop )
+	    {
+	      // Make a copy of the original BODY before doing the sweep.
+	      // We will perform the sweep on the copy, not on the original body.
+	      copy_of_original_BODY_ptr = this->copy_BODY(BODY_ptr, CUBIT_FALSE);
 
-        // As all went well (apparently :-), create a new Body using the new
-        // swept solid and get rid of the original Body and its associated
-        // ACIS BODY.
-      if( !skip_loop )
-      {
-        BodySM* new_body_ptr = get_new_Body(body_ptr, BODY_ptr,
-                                          copy_of_original_BODY_ptr,
-                                          CUBIT_FALSE, CUBIT_FALSE);
-        if (new_body_ptr)
-        {
-          result_body_list.append(new_body_ptr);
-          sweep_status = CUBIT_SUCCESS;
-        }
+	      // Find the FACE in the copied BODY that corresponds to the FACE
+	      // being swept in the original BODY.  Note that when we made a copy
+	      // of the original BODY, all the "parent" attributes were copied
+	      // over to the new BODY.
+	      if (copy_of_original_BODY_ptr)
+		{
+		  copied_FACE_ptr = (FACE *) (AcisQueryEngine::instance()->
+					      get_ENTITY_of_entity( copy_of_original_BODY_ptr, refface_ptr ));
+		}
 
-      } // End of if branch if skip_loop != TRUE of final new_body_ptr construction
-      else
-      {
-          // Get rid of the copied body, if it exists
-        if( copy_of_original_BODY_ptr )
-        {
-          AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
-          AcisQueryEngine::instance()->delete_ACIS_BODY( copy_of_original_BODY_ptr);
+	      if (copied_FACE_ptr)
+		{
+		  // Remove all the CUBIT_OWNER attributes from the copied BODY
+		  // as we're going to sweep it.
+		  if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_TRUE)
+		    AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
 
-          copy_of_original_BODY_ptr = NULL;
-        }
-      }
-    } // End of if branch if skip_loop != TRUE for problems finding assoc. ACIS BODY
-  } // End of i loop, iterating over FACEs_to_be_swept_list
-  return sweep_status;
-}
+		  // Sweep the FACE along the SPAvector, sweep_vector
+		  bool reverse_failed = CUBIT_FALSE;
+		  bool volume_is_negative = CUBIT_FALSE;
 
-//-------------------------------------------------------------------------
-// Purpose       : Perform a face sweep operation along a curve
-//
-// Special Notes : In ACIS v4.2, I was unable to get it to sweep along
-//                 multiple curves, so for now it gives an error message
-//                 if this is attempted.
-//
-//                 The function will not allow you to sweep back into
-//                 a solid.
-//
-// Creator       : Steve Storm
-//
-// Creation Date : 8/7/98
-//-------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::sweep_along_curve(
-  DLIList<GeometryEntity*>& ref_ent_list,
-  DLIList<BodySM*>& result_body_list,
-  DLIList<Curve*>& ref_edge_list,
-  double draft_angle,
-  int draft_type,
-  bool rigid) const
-{
-   outcome result;
-   DLIList<FACE*> FACEs_to_be_swept_list;
-   DLIList<EDGE*> EDGEs_to_be_swept_list;
-   DLIList<Surface*> ref_faces_list;
-   DLIList<Curve*> ref_edges_list;
+                  //copy stop_BODY
+		   BODY* temp_BODY = NULL;
+                   if (stop_BODY)
+                     copy_BODY(stop_BODY);
 
+		  if ( this->sweep_FACE_perpendicular( copied_FACE_ptr,
+						       distance,
+						       volume_is_negative,
+						       primary_side,
+						       draft_angle,
+						       draft_type,
+						       rigid, 
+						       stop_FACE,
+						       temp_BODY ) == CUBIT_FAILURE)
+		    {
+		      // Volume was negative, so we're going to try to reverse the
+		      // BODY
+		      if (volume_is_negative)
+			{
+			  // Delete the BODY that was just created (the one with the
+			  // negative volume).
+			  AcisQueryEngine::instance()->delete_ACIS_BODY(copy_of_original_BODY_ptr, CUBIT_TRUE);
 
-   // First get the ACIS FACEs associated with the input RefFaces
-//   DLIList<FACE*> temp_faces;
-   int i;
-   for (i = ref_ent_list.size(); i > 0; i--)
-   {
-     GeometryEntity* ref_ent = ref_ent_list.get_and_step();
-     Surface *ref_face = CAST_TO(ref_ent, Surface);
-     Curve* ref_edge = CAST_TO(ref_ent, Curve);
-     if(ref_face != NULL)
-     {
-//       SurfaceACIS::get_FACEs_of_RefFace( ref_face, temp_faces);
-//       if (temp_faces.size() > 1) {
-//         PRINT_ERROR("Surface %d cannot be swept as the number of ACIS FACEs associated \n"
-//                     "       with it is not 1.\n",
-//                     ref_face->id());
- //        return CUBIT_FAILURE;
-//       }
-//       if (temp_faces.size() > 0)
-//          FACEs_to_be_swept_list += temp_faces;
-//       temp_faces.clean_out();
-       FACE* FACE_ptr = AcisQueryEngine::get_FACE(ref_face);
-       if (!FACE_ptr)
-        return CUBIT_FAILURE;
-       FACEs_to_be_swept_list.append(FACE_ptr);
-       ref_faces_list.append(ref_face);
-     }
-     else if (ref_edge != NULL)
-     {
-       //EDGEs_to_be_swept_list.append(CurveACIS::get_first_EDGE(ref_edge));
-       EDGEs_to_be_swept_list.append(AcisQueryEngine::get_EDGE(ref_edge));
-       ref_edges_list.append(ref_edge);
-     }
+			  // Make another copy of the original BODY before attempting
+			  // the sweep again. We will perform the sweep on this copy,
+			  // not on the original body.
+			  copy_of_original_BODY_ptr = this->copy_BODY(BODY_ptr, CUBIT_FALSE);
 
-   }
+			  // Find the FACE in the copied BODY that corresponds to the FACE
+			  // being swept in the original BODY.  Note that when we made a copy
+			  // of the original BODY, all the "parent" attributes were copied
+			  // over to the new BODY.
+			  if (copy_of_original_BODY_ptr)
+			    {
+			      copied_FACE_ptr = (FACE *) (AcisQueryEngine::instance()->
+							  get_ENTITY_of_entity( copy_of_original_BODY_ptr, refface_ptr ));
+			    }
 
-   // Now sweep them along the EDGE.
+			  if (copied_FACE_ptr)
+			    {
+			      // Remove all the CUBIT_OWNER attributes from the copied BODY
+			      // as we're going to sweep it.
+			      if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_TRUE)
+				AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
 
-   BODY* EDGE_BODY_ptr = NULL;
+			      // Find out how many FACEs exist in the BODY that owns
+			      // copied_FACE_ptr
+			      DLIList<FACE*> FACE_list;
+			      if (AcisQueryEngine::instance()->get_FACEs( (ENTITY *)copy_of_original_BODY_ptr, FACE_list ))
+				{
+				  // If copied_FACE_ptr is the only FACE in this BODY, then we can
+				  // try reversing the BODY before attempting the sweep again
+				  if (FACE_list.size() == 1)
+				    {
+				      // Make sure this is a DOUBLE_SIDED FACE
+				      if (copied_FACE_ptr->sides() == DOUBLE_SIDED)
+					{
+					  // Reverse the BODY that this FACE belongs to
+					  if (!api_reverse_body(copy_of_original_BODY_ptr).ok())
+					    {
+					      reverse_failed = CUBIT_TRUE;
+					    }
+					}
 
-   FACEs_to_be_swept_list.reset();
-   EDGEs_to_be_swept_list.reset();
-   ref_edges_list.reset();
+				      // The single FACE in this BODY is *not* DOUBLE_SIDED.
+				      // Cannot do the reversal and sweep.
+				      else
+					{
+					  reverse_failed = CUBIT_TRUE;
+					}
+				    }
 
-   FACE* FACE_ptr = NULL;
-   FACE* copied_FACE_ptr = NULL;
-   Surface* ref_face_ptr = NULL;
-   BodySM* body_ptr = NULL;
-   BODY* BODY_ptr = NULL;
-   BODY* copied_BODY_ptr = NULL;
+				  // More than 1 FACE in this BODY. Cannot do the reversal and sweep.
+				  else
+				    {
+				      reverse_failed = CUBIT_TRUE;
+				    }
+				}
 
-   // Get the EDGE to sweep along.  No need to copy it as it is going into
-   // a WIRE body (it's copied into the WIRE body).
-   //
-   Curve* ref_edge_ptr = NULL;
+			      // Couldn't get the FACES of the BODY being swept. Cannot do
+			      // the reversal and sweep.
+			      else
+				{
+				  reverse_failed = CUBIT_TRUE;
+				}
+			    }
 
-     // Sweep the FACE along the chain of EDGES.
-   int num_edges = ref_edge_list.size();
-   EDGE** EDGES = new EDGE*[num_edges];
-   ref_edge_list.reset();
-   for( int j=0; j<num_edges; j++ )
-   {
-     ref_edge_ptr = ref_edge_list.get_and_step();
-     //Curve* curve_ptr = ref_edge_ptr->get_curve_ptr();
-     //CurveACIS *curve_ACIS = CAST_TO(curve_ptr, CurveACIS);
-     CurveACIS *curve_ACIS = CAST_TO(ref_edge_ptr, CurveACIS);
-     EDGE *EDGE_ptr = curve_ACIS->get_EDGE_ptr();
+			  // Couldn't find the FACE in the copied BODY that corresponds to
+			  // the FACE being swept in the original BODY.  Cannot do the
+			  // reversal and sweep.
+			  else
+			    {
+			      reverse_failed = CUBIT_TRUE;
+			    }
+			}
 
-     if (!EDGE_ptr)
-     {
-       PRINT_ERROR("Unable to get ACIS EDGE from Curve\n" );
-       delete [] EDGES;
-       return CUBIT_FAILURE;
-     }
+		      // The sweep failed for reasons other than the creation of a negative
+		      // volume.  Doesn't make sense to do the reversal and sweep.
+		      else
+			{
+			  reverse_failed = CUBIT_TRUE;
+			}
 
-     EDGE *copied_EDGE_ptr = NULL;
-     result = api_edge( EDGE_ptr, copied_EDGE_ptr );
-     if (!result.ok() || copied_EDGE_ptr == NULL )
-     {
-       AcisQueryEngine::instance()->ACIS_API_error (result);
-       PRINT_ERROR( "Unable to copy ACIS curve\n" );
-       delete [] EDGES;
-       return CUBIT_FAILURE;
-     }
-     EDGES[j] = copied_EDGE_ptr;
-   }
+		      // If reverse was successful, then try the sweep again
+		      if ( reverse_failed == CUBIT_FALSE )
+			{
+			  //copy stop_BODY
+        		  BODY* temp_BODY = NULL;
+                          if (stop_BODY)
+                            copy_BODY(stop_BODY);
 
-     // Make a WIRE body to sweep along.  If we have to reverse the EDGE
-     // (since ACIS only allows you to sweep from start to end), the wire
-     // will be needed.
-   result = api_make_ewire( num_edges, EDGES, EDGE_BODY_ptr );
-   WIRE* WIRE_ptr = NULL;
-   if (!result.ok())
-   {
-     AcisQueryEngine::instance()->ACIS_API_error (result);
-     PRINT_ERROR( "Unable to make ACIS wire body from curve to sweep along\n" );
-   }
-   else
-      WIRE_ptr = EDGE_BODY_ptr->lump()->shell()->wire();
+			  if ( this->sweep_FACE_perpendicular( copied_FACE_ptr,
+							       distance,
+							       volume_is_negative,
+							       primary_side,
+							       draft_angle,
+							       draft_type,
+							       rigid,
+							       stop_FACE, 
+							       temp_BODY) == CUBIT_FAILURE )
+			    {
+			      // The attempt to reverse the BODY and sweep it again failed.
+			      PRINT_ERROR("Problem sweeping one of the surfaces.\n");
 
-   CubitStatus sweep_status = CUBIT_FAILURE;
-   for (i = 0; i < FACEs_to_be_swept_list.size(); i++)
-   {
-      copied_FACE_ptr = NULL;
+			      // Delete the BODY created by this sweep
+			      AcisQueryEngine::instance()->delete_ACIS_BODY( copy_of_original_BODY_ptr, CUBIT_TRUE );
 
-      // Get the RefFace we're going to sweep
-      ref_face_ptr = ref_faces_list.get_and_step();
+			      skip_loop = CUBIT_TRUE;
+			    }
+			}
+		      else
+			{
+			  skip_loop = CUBIT_TRUE;
+			}
+		    } // End of if branch for initial sweep attemp
+		}
 
-      // Get the FACE we're going to sweep
-      FACE_ptr = FACEs_to_be_swept_list.get_and_step();
+	      // There were problems getting the FACE in the copied BODY, corresponding
+	      // to the FACE being swept in the original BODY. We can't proceed with the
+	      // sweep of this RefFace.
+	      else
+		{
+		  skip_loop = CUBIT_TRUE;
+		} // End of if branch if copied_FACE_ptr exists
 
-      // Get the associated Body and its ACIS BODY
-      body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY(FACE_ptr);
-      if (body_ptr != NULL)
-      {
-         BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
+	      // As all went well (apparently :-), create a new Body using the new
+	      // swept solid and get rid of the original Body and its associated
+	      // ACIS BODY.
+	      if( !skip_loop )
+		{
+		  BodySM* new_body_ptr = get_new_Body(body_ptr, BODY_ptr,
+						      copy_of_original_BODY_ptr,
+						      CUBIT_FALSE, CUBIT_FALSE);
+		  if (new_body_ptr)
+		    {
+		      result_body_list.append(new_body_ptr);
+		      sweep_status = CUBIT_SUCCESS;
+		    }
 
-         // Make sure we have a valid ACIS BODY associated with this Body
-         // and FACE
-         if (BODY_ptr == NULL)
-         {
-            PRINT_ERROR("No valid volume associated with Surface.\n" );
-            continue;
-         }
-      }
+		} // End of if branch if skip_loop != TRUE of final new_body_ptr construction
+	      else
+		{
+		  // Get rid of the copied body, if it exists
+		  if( copy_of_original_BODY_ptr )
+		    {
+		      AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copy_of_original_BODY_ptr);
+		      AcisQueryEngine::instance()->delete_ACIS_BODY( copy_of_original_BODY_ptr);
 
-      else
-      {
-          // This can happen when a Surface entity is created at the SM level for temp use
-          // This function should only care about the ACIS BODY anyway
-         BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr);
-         if (BODY_ptr == NULL)
-         {
-            PRINT_ERROR("No valid volume associated with Surface\n" );
-            continue;
-         }
-      }
+		      copy_of_original_BODY_ptr = NULL;
+		    }
+		}
+	    } // End of if branch if skip_loop != TRUE for problems finding assoc. ACIS BODY
+	} // End of i loop, iterating over FACEs_to_be_swept_list
+      return sweep_status;
+    }
 
-      // Make a copy of the original BODY before doing the sweep.
-      // We will perform the sweep on the copy, not on the original body.
-      copied_BODY_ptr = this->copy_BODY(BODY_ptr, CUBIT_FALSE);
+  //-------------------------------------------------------------------------
+  // Purpose       : Perform a face sweep operation along a curve
+  //
+  // Special Notes : In ACIS v4.2, I was unable to get it to sweep along
+  //                 multiple curves, so for now it gives an error message
+  //                 if this is attempted.
+  //
+  //                 The function will not allow you to sweep back into
+  //                 a solid.
+  //
+  // Creator       : Steve Storm
+  //
+  // Creation Date : 8/7/98
+  //-------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::sweep_along_curve(
+						  DLIList<GeometryEntity*>& ref_ent_list,
+						  DLIList<BodySM*>& result_body_list,
+						  DLIList<Curve*>& ref_edge_list,
+						  double draft_angle,
+						  int draft_type,
+						  bool rigid,
+						  Surface* stop_surf,
+                                                  BodySM*  stop_body) const
+    {
+      outcome result;
+      DLIList<FACE*> FACEs_to_be_swept_list;
+      DLIList<EDGE*> EDGEs_to_be_swept_list;
+      DLIList<Surface*> ref_faces_list;
+      DLIList<Curve*> ref_edges_list;
 
-      if( copied_BODY_ptr == NULL )
-      {
-         PRINT_ERROR( "Unable to copy volume before sweeping\n" );
-         continue;
-      }
+      FACE * stop_FACE = NULL;
+      BODY * stop_BODY = NULL;
+	
+      if (stop_surf)
+	stop_FACE = AcisQueryEngine::get_FACE(stop_surf);
 
-      // Find the FACE in the copied BODY that corresponds to the FACE
-      // being swept in the original BODY.  Note that when we made a copy
-      // of the original BODY, all the "parent" attributes were copied
-      // over to the new BODY.
-      copied_FACE_ptr = (FACE *) (AcisQueryEngine::instance()->get_ENTITY_of_entity(
-         copied_BODY_ptr, ref_face_ptr ) );
+      if (stop_body)
+        {
+          BodyACIS* bodyACISPtr = CAST_TO(stop_body, BodyACIS) ;
+          assert(bodyACISPtr);
+          stop_BODY = bodyACISPtr->get_BODY_ptr() ;
+        }
 
-      if( copied_FACE_ptr == NULL )
-      {
-         PRINT_ERROR( "Unable to find FACE to sweep in copied volume\n" );
-         continue;
-      }
+      // First get the ACIS FACEs associated with the input RefFaces
+      //   DLIList<FACE*> temp_faces;
+      int i;
+      for (i = ref_ent_list.size(); i > 0; i--)
+	{
+	  GeometryEntity* ref_ent = ref_ent_list.get_and_step();
+	  Surface *ref_face = CAST_TO(ref_ent, Surface);
+	  Curve* ref_edge = CAST_TO(ref_ent, Curve);
+	  if(ref_face != NULL)
+	    {
+	      //       SurfaceACIS::get_FACEs_of_RefFace( ref_face, temp_faces);
+	      //       if (temp_faces.size() > 1) {
+	      //         PRINT_ERROR("Surface %d cannot be swept as the number of ACIS FACEs associated \n"
+	      //                     "       with it is not 1.\n",
+	      //                     ref_face->id());
+	      //        return CUBIT_FAILURE;
+	      //       }
+	      //       if (temp_faces.size() > 0)
+	      //          FACEs_to_be_swept_list += temp_faces;
+	      //       temp_faces.clean_out();
+	      FACE* FACE_ptr = AcisQueryEngine::get_FACE(ref_face);
+	      if (!FACE_ptr)
+		return CUBIT_FAILURE;
+	      FACEs_to_be_swept_list.append(FACE_ptr);
+	      ref_faces_list.append(ref_face);
+	    }
+	  else if (ref_edge != NULL)
+	    {
+	      //EDGEs_to_be_swept_list.append(CurveACIS::get_first_EDGE(ref_edge));
+	      EDGEs_to_be_swept_list.append(AcisQueryEngine::get_EDGE(ref_edge));
+	      ref_edges_list.append(ref_edge);
+	    }
 
-        // Remove all the CUBIT_OWNER attributes from the copied BODY
-        // as we're going to sweep it.
-      if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_TRUE)
-        AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copied_BODY_ptr);
+	}
 
-      // Check to see if the start of the edge is in the profile of
-      // the face.  If not, check the end - if this is, we'll need to
-      // reverse the WIRE body.
-      //
-      // When we support a chain of EDGES, here we will need to get the start
-      // and end vertices of the WIRE.  This should be the only change needed.
-      //VERTEX* start_VERTEX_ptr;// copied_EDGE_ptr->start();
-      //VERTEX* end_VERTEX_ptr;// copied_EDGE_ptr->end();
-      //if( start_VERTEX_ptr == end_VERTEX_ptr )
-      //{
-       //  PRINT_ERROR( "Edge start and end are the same - sweeping not possible\n" );
-       //  return CUBIT_FAILURE;
-      //}
-      ENTITY *ent = WIRE_ptr;
+      // Now sweep them along the EDGE.
 
-      SPAposition acis_start_coords;
-      get_wire_start_position(ent, acis_start_coords);
-      CubitVector start_vec( acis_start_coords.x(), acis_start_coords.y(),
-        acis_start_coords.z() );
+      BODY* EDGE_BODY_ptr = NULL;
 
-      bool start_flg;
-      Curve* start_curve = find_curve_by_end_coord( start_vec,
-                                 ref_edge_list, start_flg );
-      if( !start_curve )
-      {
-        PRINT_ERROR( "unable to find start vertex of sweep chain; aborting\n" );
-        delete []EDGES;
-        return CUBIT_FAILURE;
-      }
-      CubitVector start_position;
-      start_curve->position_from_fraction( start_flg ? 0.0 : 1.0, start_position);
+      FACEs_to_be_swept_list.reset();
+      EDGEs_to_be_swept_list.reset();
+      ref_edges_list.reset();
 
-      SPAposition acis_end_coords;
-      get_wire_end_position(ent, acis_end_coords);
-      CubitVector end_vec( acis_end_coords.x(), acis_end_coords.y(),
-        acis_end_coords.z() );
+      FACE* FACE_ptr = NULL;
+      FACE* copied_FACE_ptr = NULL;
+      Surface* ref_face_ptr = NULL;
+      BodySM* body_ptr = NULL;
+      BODY* BODY_ptr = NULL;
+      BODY* copied_BODY_ptr = NULL;
 
-      Curve* end_curve = find_curve_by_end_coord( end_vec,
-                              ref_edge_list, start_flg );
-      if( !end_curve )
-      {
-        PRINT_ERROR( "unable to find end vertex of sweep chain; aborting\n" );
-        delete []EDGES;
-        return CUBIT_FAILURE;
-      }
-      CubitVector end_position;
-      end_curve->position_from_fraction( start_flg ? 0.0 : 1.0, end_position );
+      // Get the EDGE to sweep along.  No need to copy it as it is going into
+      // a WIRE body (it's copied into the WIRE body).
+      //
+      Curve* ref_edge_ptr = NULL;
 
-      //SPAposition pos1, pos2;
-      double distance1, distance2;
-      SPAposition acis_closest_point;
-      (copied_FACE_ptr->geometry()->equation()).point_perp ( acis_start_coords,
-                                                             acis_closest_point );
-      CubitVector closest_point_start( acis_closest_point.x(),
-                                       acis_closest_point.y(),
-                                       acis_closest_point.z() );
-      distance1 = closest_point_start.distance_between( start_vec );
+      // Sweep the FACE along the chain of EDGES.
+      int num_edges = ref_edge_list.size();
+      EDGE** EDGES = new EDGE*[num_edges];
+      ref_edge_list.reset();
+      for( int j=0; j<num_edges; j++ )
+	{
+	  ref_edge_ptr = ref_edge_list.get_and_step();
+	  //Curve* curve_ptr = ref_edge_ptr->get_curve_ptr();
+	  //CurveACIS *curve_ACIS = CAST_TO(curve_ptr, CurveACIS);
+	  CurveACIS *curve_ACIS = CAST_TO(ref_edge_ptr, CurveACIS);
+	  EDGE *EDGE_ptr = curve_ACIS->get_EDGE_ptr();
 
-      //VERTEX* close_VERTEX_ptr = NULL;
-      CubitVector closest_position;
-      EDGE* start_EDGE_ptr = NULL;
+	  if (!EDGE_ptr)
+	    {
+	      PRINT_ERROR("Unable to get ACIS EDGE from Curve\n" );
+	      delete [] EDGES;
+	      return CUBIT_FAILURE;
+	    }
 
-      if( distance1 > SPAresabs )
-      {
-         // Try the other end
-         (copied_FACE_ptr->geometry()->equation()).point_perp ( acis_end_coords,
-                                                                acis_closest_point );
-         CubitVector closest_point_end( acis_closest_point.x(), acis_closest_point.y(),
-                                        acis_closest_point.z() );
-         distance2 = closest_point_end.distance_between( end_vec );
+	  EDGE *copied_EDGE_ptr = NULL;
+	  result = api_edge( EDGE_ptr, copied_EDGE_ptr );
+	  if (!result.ok() || copied_EDGE_ptr == NULL )
+	    {
+	      AcisQueryEngine::instance()->ACIS_API_error (result);
+	      PRINT_ERROR( "Unable to copy ACIS curve\n" );
+	      delete [] EDGES;
+	      return CUBIT_FAILURE;
+	    }
+	  EDGES[j] = copied_EDGE_ptr;
+	}
 
-         if( distance2 > SPAresabs )
-         {
-            PRINT_ERROR( "Neither chain end lies in the plane of surface\n" );
-            continue;
-         }
-         else
-         {
-            //close_VERTEX_ptr = end_VERTEX_ptr;
-           closest_position = end_position;
-           start_curve = end_curve;
-           start_EDGE_ptr = EDGES[ref_edge_list.size()-1];
-         }
-
-         // Reverse the WIRE in the BODY
-         //api_reverse_body( EDGE_BODY_ptr );
-         api_reverse_wire( WIRE_ptr );
-
-      }
+      // Make a WIRE body to sweep along.  If we have to reverse the EDGE
+      // (since ACIS only allows you to sweep from start to end), the wire
+      // will be needed.
+      result = api_make_ewire( num_edges, EDGES, EDGE_BODY_ptr );
+      WIRE* WIRE_ptr = NULL;
+      if (!result.ok())
+	{
+	  AcisQueryEngine::instance()->ACIS_API_error (result);
+	  PRINT_ERROR( "Unable to make ACIS wire body from curve to sweep along\n" );
+	}
       else
-      {
-         //close_VERTEX_ptr = start_VERTEX_ptr;
-        closest_position = start_position;
-        start_EDGE_ptr = EDGES[0];
-      }
+	WIRE_ptr = EDGE_BODY_ptr->lump()->shell()->wire();
 
-      SPAposition acis_closest_position;
-      SPAunit_vector acis_surface_normal;
+      CubitStatus sweep_status = CUBIT_FAILURE;
+      for (i = 0; i < FACEs_to_be_swept_list.size(); i++)
+	{
+	  copied_FACE_ptr = NULL;
 
-      //APOINT* acis_point = close_VERTEX_ptr->geometry() ;
-      //SPAposition acis_curve_position = acis_point->coords() ;
-      SPAposition acis_curve_position( closest_position.x(),
-        closest_position.y(), closest_position.z() );
+	  // Get the RefFace we're going to sweep
+	  ref_face_ptr = ref_faces_list.get_and_step();
 
-      // Need to compute the FACE normal at the start of the sweep
-      (copied_FACE_ptr->geometry()->equation()).point_perp ( acis_curve_position,
-         acis_closest_position, acis_surface_normal );
+	  // Get the FACE we're going to sweep
+	  FACE_ptr = FACEs_to_be_swept_list.get_and_step();
 
-      CubitVector surface_normal( acis_surface_normal.x(), acis_surface_normal.y(),
-                                  acis_surface_normal.z() );
+	  // Get the associated Body and its ACIS BODY
+	  body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY(FACE_ptr);
+	  if (body_ptr != NULL)
+	    {
+	      BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
 
-      // Check to see if SENSE of FACE is REVERSED.  The direction of the
-      // ACIS face is the direction of sweep.
-      if( copied_FACE_ptr->sense() == REVERSED )
-      {
-         if( copied_FACE_ptr->geometry()->equation().left_handed_uv() == CUBIT_FALSE )
-            surface_normal *= -1.0;
-      }
-      else
-      {
-         if( copied_FACE_ptr->geometry()->equation().left_handed_uv() )
-            surface_normal *= -1.0;
-      }
+	      // Make sure we have a valid ACIS BODY associated with this Body
+	      // and FACE
+	      if (BODY_ptr == NULL)
+		{
+		  PRINT_ERROR("No valid volume associated with Surface.\n" );
+		  continue;
+		}
+	    }
 
-      // Get curve tangent at start of the sweep
-      SPAunit_vector acis_curve_tangent;
+	  else
+	    {
+	      // This can happen when a Surface entity is created at the SM level for temp use
+	      // This function should only care about the ACIS BODY anyway
+	      BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr);
+	      if (BODY_ptr == NULL)
+		{
+		  PRINT_ERROR("No valid volume associated with Surface\n" );
+		  continue;
+		}
+	    }
 
-      (start_EDGE_ptr->geometry()->equation()).point_perp( acis_curve_position,
-         acis_closest_position,
-         acis_curve_tangent );
+	  // Make a copy of the original BODY before doing the sweep.
+	  // We will perform the sweep on the copy, not on the original body.
+	  copied_BODY_ptr = this->copy_BODY(BODY_ptr, CUBIT_FALSE);
 
-      CubitVector curve_tangent( acis_curve_tangent.x(), acis_curve_tangent.y(),
-         acis_curve_tangent.z() );
+	  if( copied_BODY_ptr == NULL )
+	    {
+	      PRINT_ERROR( "Unable to copy volume before sweeping\n" );
+	      continue;
+	    }
 
-      // Determine if the WIRE has been reversed - ??? there's a better way to
-      // do this but I don't know it.  I would think you could just go by the
-      // underlying EDGE but apparently when the WIRE get's reversed, the EDGE
-      // doesn't change - the sweep uses the WIRE, not the EDGE.
-      if( closest_position == end_position )
-         curve_tangent *= -1.0;
+	  // Find the FACE in the copied BODY that corresponds to the FACE
+	  // being swept in the original BODY.  Note that when we made a copy
+	  // of the original BODY, all the "parent" attributes were copied
+	  // over to the new BODY.
+	  copied_FACE_ptr = (FACE *) (AcisQueryEngine::instance()->get_ENTITY_of_entity(
+											copied_BODY_ptr, ref_face_ptr ) );
 
-      // Make sure the sense is correct based on the underlying EDGE sense
-      if( start_EDGE_ptr->sense() == REVERSED )
-         curve_tangent *= -1.0;
+	  if( copied_FACE_ptr == NULL )
+	    {
+	      PRINT_ERROR( "Unable to find FACE to sweep in copied volume\n" );
+	      continue;
+	    }
 
+	  // Remove all the CUBIT_OWNER attributes from the copied BODY
+	  // as we're going to sweep it.
+	  if (GeometryModifyTool::instance()->get_new_ids() == CUBIT_TRUE)
+	    AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copied_BODY_ptr);
 
-      // Properties of dot product
-      // angle acute if dot product > 0
-      // angle obtuse if dot product < 0
-      // angle 90 deg if dot product = 0
+	  // Check to see if the start of the edge is in the profile of
+	  // the face.  If not, check the end - if this is, we'll need to
+	  // reverse the WIRE body.
+	  //
+	  // When we support a chain of EDGES, here we will need to get the start
+	  // and end vertices of the WIRE.  This should be the only change needed.
+	  //VERTEX* start_VERTEX_ptr;// copied_EDGE_ptr->start();
+	  //VERTEX* end_VERTEX_ptr;// copied_EDGE_ptr->end();
+	  //if( start_VERTEX_ptr == end_VERTEX_ptr )
+	  //{
+	  //  PRINT_ERROR( "Edge start and end are the same - sweeping not possible\n" );
+	  //  return CUBIT_FAILURE;
+	  //}
+	  ENTITY *ent = WIRE_ptr;
 
-      if( surface_normal%curve_tangent < 0 )
-      {
-         if( FACE_ptr->sides() != DOUBLE_SIDED )
-         {
-            PRINT_ERROR( "Attempting to sweep Surface back into the solid\n"
-               "       Sweeping of Surface aborted\n" );
-            api_delent(copied_FACE_ptr);
-            continue;
-         }
-         api_reverse_face( copied_FACE_ptr );
-      }
+	  SPAposition acis_start_coords;
+	  get_wire_start_position(ent, acis_start_coords);
+	  CubitVector start_vec( acis_start_coords.x(), acis_start_coords.y(),
+				 acis_start_coords.z() );
 
-      sweep_status = sweep_FACE_along_WIRE( copied_FACE_ptr,
-                                            EDGE_BODY_ptr,
-                                            draft_angle,
-                                            draft_type,
-                                            rigid);
-      if( sweep_status == CUBIT_FAILURE )
-      {
-         // Get rid of the copied body, if it exists
-         if( copied_BODY_ptr )
-         {
-            AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copied_BODY_ptr);
-            AcisQueryEngine::instance()->delete_ACIS_BODY( copied_BODY_ptr );
-            copied_BODY_ptr = NULL;
-            continue;
-         }
-      }
+	  bool start_flg;
+	  Curve* start_curve = find_curve_by_end_coord( start_vec,
+							ref_edge_list, start_flg );
+	  if( !start_curve )
+	    {
+	      PRINT_ERROR( "unable to find start vertex of sweep chain; aborting\n" );
+	      delete []EDGES;
+	      return CUBIT_FAILURE;
+	    }
+	  CubitVector start_position;
+	  start_curve->position_from_fraction( start_flg ? 0.0 : 1.0, start_position);
 
-      // Create a new Body using the new swept solid and delete the
-      // original Body and its associated ACIS BODY.
-      BodySM* new_body_ptr = 0;
-      if(body_ptr)
-      new_body_ptr = get_new_Body(body_ptr, BODY_ptr, copied_BODY_ptr,
-                                        CUBIT_FALSE, CUBIT_FALSE);
-      else // this handles the case of a NULL body sweep surface (typically the result of a SM only entity)
-           // in this case the caller must properly handle the sweep surface deletion
-          new_body_ptr = AcisQueryEngine::instance()->populate_topology_bridges(copied_BODY_ptr);
+	  SPAposition acis_end_coords;
+	  get_wire_end_position(ent, acis_end_coords);
+	  CubitVector end_vec( acis_end_coords.x(), acis_end_coords.y(),
+			       acis_end_coords.z() );
 
-      if (new_body_ptr)
-      {
-        sweep_status = CUBIT_SUCCESS;
-        result_body_list.append(new_body_ptr);
-      }
-   } // End of i loop, iterating over FACEs_to_be_swept_list
-     //Now let's iterate over the EDGEs_to_be_swept_list
-   for (i = 0; i < EDGEs_to_be_swept_list.size(); i++)
-   {
-     EDGE *copied_EDGE_ptr = EDGEs_to_be_swept_list.get_and_step();
-     BODY* new_BODY_ptr = NULL;
+	  Curve* end_curve = find_curve_by_end_coord( end_vec,
+						      ref_edge_list, start_flg );
+	  if( !end_curve )
+	    {
+	      PRINT_ERROR( "unable to find end vertex of sweep chain; aborting\n" );
+	      delete []EDGES;
+	      return CUBIT_FAILURE;
+	    }
+	  CubitVector end_position;
+	  end_curve->position_from_fraction( start_flg ? 0.0 : 1.0, end_position );
 
-      sweep_status = sweep_EDGE_along_WIRE( copied_EDGE_ptr,
-                                            EDGE_BODY_ptr,
-                                            new_BODY_ptr,
-                                            draft_angle,
-                                            draft_type,
-                                            rigid);
-      if( sweep_status == CUBIT_FAILURE )
-      {
-        PRINT_ERROR("Problem sweeping curve.\n");
-        continue;
+	  //SPAposition pos1, pos2;
+	  double distance1, distance2;
+	  SPAposition acis_closest_point;
+	  (copied_FACE_ptr->geometry()->equation()).point_perp ( acis_start_coords,
+								 acis_closest_point );
+	  CubitVector closest_point_start( acis_closest_point.x(),
+					   acis_closest_point.y(),
+					   acis_closest_point.z() );
+	  distance1 = closest_point_start.distance_between( start_vec );
 
-      }
+	  //VERTEX* close_VERTEX_ptr = NULL;
+	  CubitVector closest_position;
+	  EDGE* start_EDGE_ptr = NULL;
 
-      // Create a new Body using the new swept solid
+	  if( distance1 > SPAresabs )
+	    {
+	      // Try the other end
+	      (copied_FACE_ptr->geometry()->equation()).point_perp ( acis_end_coords,
+								     acis_closest_point );
+	      CubitVector closest_point_end( acis_closest_point.x(), acis_closest_point.y(),
+					     acis_closest_point.z() );
+	      distance2 = closest_point_end.distance_between( end_vec );
 
-      BodySM* new_body_ptr = get_new_Body(body_ptr, BODY_ptr, new_BODY_ptr,
-                                        CUBIT_FALSE, CUBIT_FALSE);
-      if (new_body_ptr)
-      {
-         sweep_status = CUBIT_SUCCESS;
-         result_body_list.append(new_body_ptr);
-      }
+	      if( distance2 > SPAresabs )
+		{
+		  PRINT_ERROR( "Neither chain end lies in the plane of surface\n" );
+		  continue;
+		}
+	      else
+		{
+		  //close_VERTEX_ptr = end_VERTEX_ptr;
+		  closest_position = end_position;
+		  start_curve = end_curve;
+		  start_EDGE_ptr = EDGES[ref_edge_list.size()-1];
+		}
 
-   } // End of i loop, iterating over FACEs_to_be_swept_list
-   delete []EDGES;
+	      // Reverse the WIRE in the BODY
+	      //api_reverse_body( EDGE_BODY_ptr );
+	      api_reverse_wire( WIRE_ptr );
 
-     // Remove the created WIRE body
-   api_delent( EDGE_BODY_ptr );
+	    }
+	  else
+	    {
+	      //close_VERTEX_ptr = start_VERTEX_ptr;
+	      closest_position = start_position;
+	      start_EDGE_ptr = EDGES[0];
+	    }
 
+	  SPAposition acis_closest_position;
+	  SPAunit_vector acis_surface_normal;
 
-   return sweep_status;
-}
+	  //APOINT* acis_point = close_VERTEX_ptr->geometry() ;
+	  //SPAposition acis_curve_position = acis_point->coords() ;
+	  SPAposition acis_curve_position( closest_position.x(),
+					   closest_position.y(), closest_position.z() );
 
-CubitStatus AcisModifyEngine::webcut_with_cylinder(
-                                              DLIList<BodySM*> &webcut_body_list,
-                                              double radius,
-                                              const CubitVector &axis,
-                                              const CubitVector &center,
-                                              DLIList<BodySM*> &results_list,
-                                              bool imprint )
-{
-     //create the cylinder body.
-   SPAbox super_box;
-   CubitStatus rv = AcisQueryEngine::instance()->create_super_acis_bounding_box( webcut_body_list, super_box );
-   if (rv != CUBIT_SUCCESS)
-      return CUBIT_FAILURE;
-   double max_size =  AcisQueryEngine::instance()->get_max_size_of_acis_box( super_box );
-     //lets find the distance to the center for each body and take
-     //the max.
-   double curr;
-   CubitVector cent_bod;
-   BodySM *body_ptr;
-   for ( int ii = webcut_body_list.size(); ii > 0; ii-- )
-   {
-      body_ptr = webcut_body_list.get_and_step();
-      cent_bod = AcisQueryEngine::instance()->bounding_box(body_ptr).center();
-      cent_bod = cent_bod - center;
-      curr = cent_bod.length();
-      if ( curr > max_size )
-          max_size = curr;
-   }
-   double height;
-   if ( center.x() > max_size )
-   {
-      height = 500.0 * center.x();
-   }
-   else if ( center.y() > max_size )
-   {
-      height = 500.0 * center.y();
-   }
-   else if ( center.z() > max_size )
-   {
-      height = 500.0 * center.z();
-   }
-   else
-   {
-      height = 500.0 * max_size;
-   }
-     //lets make certain we have a valid height..
-   if ( height < GEOMETRY_RESABS )
-   {
-      height = 500.0;
-   }
+	  // Need to compute the FACE normal at the start of the sweep
+	  (copied_FACE_ptr->geometry()->equation()).point_perp ( acis_curve_position,
+								 acis_closest_position, acis_surface_normal );
 
-   BODY* cutting_tool_ptr;
+	  CubitVector surface_normal( acis_surface_normal.x(), acis_surface_normal.y(),
+				      acis_surface_normal.z() );
 
+	  // Check to see if SENSE of FACE is REVERSED.  The direction of the
+	  // ACIS face is the direction of sweep.
+	  if( copied_FACE_ptr->sense() == REVERSED )
+	    {
+	      if( copied_FACE_ptr->geometry()->equation().left_handed_uv() == CUBIT_FALSE )
+		surface_normal *= -1.0;
+	    }
+	  else
+	    {
+	      if( copied_FACE_ptr->geometry()->equation().left_handed_uv() )
+		surface_normal *= -1.0;
+	    }
 
-   outcome result = api_make_frustum( height, radius, radius, radius, cutting_tool_ptr );
-   if ( !result.ok() || cutting_tool_ptr == NULL ||
-        cutting_tool_ptr->lump() == NULL )
-   {
+	  // Get curve tangent at start of the sweep
+	  SPAunit_vector acis_curve_tangent;
 
-      PRINT_ERROR("In AcisModifyEngine::webcut_with_cylinder\n"
-                  "       ACIS api_make_frustum function failed.\n\n");
-      AcisQueryEngine::instance()->ACIS_API_error (result);
-      return CUBIT_FAILURE;
-   }
-     // The current frustum is centered on the z axis.
-   CubitVector axis2(0., 0., 1.0 );
-     //now find the normal to the current axis and axis we want to be
-     //at. This normal is where we will rotate about.
-   CubitVector normal_axis = axis2 * axis;
-   if ( normal_axis.length() > CUBIT_RESABS )
-   {
-        //angle in degrees.
-      double angle = normal_axis.vector_angle( axis2, axis );
-      SPAvector rotation_axis( normal_axis.x(), normal_axis.y(),
-                            normal_axis.z() );
-      SPAtransf transformation = rotate_transf( angle, rotation_axis );
+	  (start_EDGE_ptr->geometry()->equation()).point_perp( acis_curve_position,
+							       acis_closest_position,
+							       acis_curve_tangent );
 
-      result = api_apply_transf( cutting_tool_ptr, transformation );
-      if (!result.ok())
-      {
-         AcisQueryEngine::instance()->ACIS_API_error ( result, "rotating body" );
-         return CUBIT_FAILURE;
-      }
-   }
+	  CubitVector curve_tangent( acis_curve_tangent.x(), acis_curve_tangent.y(),
+				     acis_curve_tangent.z() );
 
-   if ( center.length() > CUBIT_RESABS )
-   {
-        //move the body to the center SPAposition.
-      SPAvector translation_vector( center.x(), center.y(), center.z() );
-      SPAtransf transformation = translate_transf( translation_vector );
-      result = api_apply_transf( cutting_tool_ptr, transformation );
-      if (!result.ok())
-      {
-         AcisQueryEngine::instance()->ACIS_API_error ( result, "transforming body" );
-         return CUBIT_FAILURE;
-      }
-   }
-     //okay we should be ready now.
+	  // Determine if the WIRE has been reversed - ??? there's a better way to
+	  // do this but I don't know it.  I would think you could just go by the
+	  // underlying EDGE but apparently when the WIRE get's reversed, the EDGE
+	  // doesn't change - the sweep uses the WIRE, not the EDGE.
+	  if( closest_position == end_position )
+	    curve_tangent *= -1.0;
 
-     // Use the BODY to perform webcut
-   CubitStatus stat =
-      this->webcut(webcut_body_list, cutting_tool_ptr, results_list, imprint ) ;
+	  // Make sure the sense is correct based on the underlying EDGE sense
+	  if( start_EDGE_ptr->sense() == REVERSED )
+	    curve_tangent *= -1.0;
 
-     // Delete the BODY that was created to be used as a tool
-   AcisQueryEngine::instance()->delete_ACIS_BODY(cutting_tool_ptr, CUBIT_TRUE) ;
-   cutting_tool_ptr = NULL;
 
-   return stat;
-}
+	  // Properties of dot product
+	  // angle acute if dot product > 0
+	  // angle obtuse if dot product < 0
+	  // angle 90 deg if dot product = 0
 
-CubitStatus
-AcisModifyEngine::webcut_with_brick( DLIList<BodySM*>& webcut_body_list,
-                                     const CubitVector &center,
-                                     const CubitVector axes[3],
-                                     const CubitVector &extension,
-                                     DLIList<BodySM*> &results_list,
-                                     bool imprint )
-{
-   // Create the brick to cut with
-   BODY *cutting_tool_ptr = make_brick_BODY( center, axes, extension );
-   if( cutting_tool_ptr == NULL )
-      return CUBIT_FAILURE;
+	  if( surface_normal%curve_tangent < 0 )
+	    {
+	      if( FACE_ptr->sides() != DOUBLE_SIDED )
+		{
+		  PRINT_ERROR( "Attempting to sweep Surface back into the solid\n"
+			       "       Sweeping of Surface aborted\n" );
+		  api_delent(copied_FACE_ptr);
+		  continue;
+		}
+	      api_reverse_face( copied_FACE_ptr );
+	    }
 
-   CubitStatus stat =
-       this->webcut(webcut_body_list, cutting_tool_ptr, results_list, imprint) ;
+          //copy stop_BODY
+           BODY* temp_BODY = NULL;
+           if (stop_BODY)
+              copy_BODY(stop_BODY);
 
-     // Delete the BODY that was created to be used as a tool
-   AcisQueryEngine::instance()->delete_ACIS_BODY(cutting_tool_ptr, CUBIT_TRUE) ;
+	  sweep_status = sweep_FACE_along_WIRE( copied_FACE_ptr,
+						EDGE_BODY_ptr,
+						draft_angle,
+						draft_type,
+						rigid,
+						stop_FACE,
+                                                temp_BODY);
+	  if( sweep_status == CUBIT_FAILURE )
+	    {
+	      // Get rid of the copied body, if it exists
+	      if( copied_BODY_ptr )
+		{
+		  AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copied_BODY_ptr);
+		  AcisQueryEngine::instance()->delete_ACIS_BODY( copied_BODY_ptr );
+		  copied_BODY_ptr = NULL;
+		  continue;
+		}
+	    }
 
-   return stat;
-}
+	  // Create a new Body using the new swept solid and delete the
+	  // original Body and its associated ACIS BODY.
+	  BodySM* new_body_ptr = 0;
+	  if(body_ptr)
+	    new_body_ptr = get_new_Body(body_ptr, BODY_ptr, copied_BODY_ptr,
+                                        CUBIT_FALSE, CUBIT_FALSE);
+	  else // this handles the case of a NULL body sweep surface (typically the result of a SM only entity)
+	    // in this case the caller must properly handle the sweep surface deletion
+	    new_body_ptr = AcisQueryEngine::instance()->populate_topology_bridges(copied_BODY_ptr);
 
-CubitStatus
-AcisModifyEngine::webcut_with_planar_sheet( DLIList<BodySM*>& webcut_body_list,
-                                            const CubitVector &center,
-                                            const CubitVector axes[2],
-                                            double width,
-                                            double height,
-                                            DLIList<BodySM*> &results_list,
-                                            bool imprint )
-{
-   // Create the planar sheet to cut with
-   CubitVector p1, p2, p3, p4;
+	  if (new_body_ptr)
+	    {
+	      sweep_status = CUBIT_SUCCESS;
+	      result_body_list.append(new_body_ptr);
+	    }
+	} // End of i loop, iterating over FACEs_to_be_swept_list
+      //Now let's iterate over the EDGEs_to_be_swept_list
+      for (i = 0; i < EDGEs_to_be_swept_list.size(); i++)
+	{
+	  EDGE *copied_EDGE_ptr = EDGEs_to_be_swept_list.get_and_step();
+	  BODY* new_BODY_ptr = NULL;
 
-   // Get the corners of the sheet
-   center.next_point( axes[0], width/2.0, p1 );
-   p1.next_point( axes[1], -height/2.0, p1 );
-   p1.next_point( axes[1], height, p2 );
-   p2.next_point( axes[0], -width, p3 );
-   p3.next_point( axes[1], -height, p4 );
+	  sweep_status = sweep_EDGE_along_WIRE( copied_EDGE_ptr,
+						EDGE_BODY_ptr,
+						new_BODY_ptr,
+						draft_angle,
+						draft_type,
+						rigid,
+						stop_FACE);
+	  if( sweep_status == CUBIT_FAILURE )
+	    {
+	      PRINT_ERROR("Problem sweeping curve.\n");
+	      continue;
 
-   BODY* cutting_tool_ptr = make_planar_quad_BODY( p1, p2, p3, p4 );
-   if( cutting_tool_ptr == NULL )
-      return CUBIT_FAILURE;
+	    }
 
-   BodySM *webcut_body;
-   DLIList<BodySM*> temp_new_bodies;
-   int num_cut = 0;
-   for ( int ii = webcut_body_list.size(); ii > 0; ii-- )
-   {
-      webcut_body = webcut_body_list.remove();
-      BODY *webcut_BODY = AcisQueryEngine::get_BODY(webcut_body );
-      //now webcut with it.
-      BODY *new_BODY_1, *new_BODY_2;
-      CubitStatus status = webcut_with_sheet( webcut_BODY,
-         cutting_tool_ptr,
-         new_BODY_1,
-         new_BODY_2,
-         imprint );
-      if ( status == CUBIT_SUCCESS )
-      {
-         DLIList<BODY*> new_BODY_list;
-         new_BODY_list.append(new_BODY_1);
-         new_BODY_list.append(new_BODY_2);
-         temp_new_bodies.clean_out();
+	  // Create a new Body using the new swept solid
 
-         CubitStatus result = get_new_Body(webcut_body, webcut_BODY,
-            new_BODY_list, temp_new_bodies, CUBIT_FALSE);
-         if ( result != CUBIT_SUCCESS )
-         {
-            PRINT_ERROR("Problems with building volume.\n");
-            num_cut = 0;
-            return CUBIT_FAILURE;
-         }
-         else
-         {
-            results_list += temp_new_bodies;
-            num_cut++;
-         }
-      }
-   }
+	  BodySM* new_body_ptr = get_new_Body(body_ptr, BODY_ptr, new_BODY_ptr,
+					      CUBIT_FALSE, CUBIT_FALSE);
+	  if (new_body_ptr)
+	    {
+	      sweep_status = CUBIT_SUCCESS;
+	      result_body_list.append(new_body_ptr);
+	    }
 
-     // Delete the BODY that was created to be used as a tool
-   AcisQueryEngine::instance()->delete_ACIS_BODY(cutting_tool_ptr, CUBIT_TRUE) ;
+	} // End of i loop, iterating over FACEs_to_be_swept_list
+      delete []EDGES;
 
-   // Return CUBIT_SUCCESS as long as one body is webcut, earlier failures should
-   // return CUBIT_FAILURE independently of these return statments
-   if (num_cut>0)
-   {
-     return CUBIT_SUCCESS;
-   }
-   else
-   {
-     return CUBIT_FAILURE;
-   }
-}
+      // Remove the created WIRE body
+      api_delent( EDGE_BODY_ptr );
 
-//-------------------------------------------------------------------------
-// Purpose       : creates a sheet body with the given curve loop
-//                 uses the new sheet body to cut the body list.
-//
-// Special Notes :
-//
-// Creator       : Eric W. Nielsen
-//
-// Creation Date : 12/20/99
-//-------------------------------------------------------------------------
-CubitStatus
-AcisModifyEngine::webcut_with_curve_loop( DLIList<BodySM*> &webcut_body_list,
-                                          DLIList<Curve*> &refedge_list,
-                                          DLIList<BodySM*>& results_list,
-                                          bool imprint)
-{
-  Curve* ref_edge_ptr;
-  int edge_count = refedge_list.size() ;
-  EDGE** EDGEs = new EDGE* [edge_count] ;
-  EDGE* EDGE_ptr = NULL;
 
-  ENTITY_LIST acis_FACE_list ;
-  int i;
+      return sweep_status;
+    }
 
-  for( i=0; i<edge_count; i++ )
-  {
-     ref_edge_ptr = refedge_list.get_and_step();
+  //-------------------------------------------------------------------------
+  // Purpose       : Sections the list of bodies (cuts in half).  This is
+  //                 when trying to see a cross section of the model.
+  //
+  // Special Notes : Rewritten - J.Kraftcheck - 2004-4-5
+  //
+  // Creator       : David White
+  //
+  // Creation Date : 12/10/97
+  //-------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::section(  DLIList<BodySM*>& section_body_list,
+					  const CubitVector &point_1,
+					  const CubitVector &point_2,
+					  const CubitVector &point_3,
+					  DLIList<BodySM*>& new_body_list,
+					  bool keep_normal_side,
+					  bool keep_old,
+					  bool keep_both_sides )
+    {
+      int i;
+      bool delete_attribs =
+	(GeometryModifyTool::instance()->get_new_ids() || keep_old);
 
-     // Get the EDGE ptr from the RefEdge
-     EDGE_ptr = AcisQueryEngine::get_EDGE( ref_edge_ptr );
-     if( EDGE_ptr == NULL )
-     {
-        for( i=0; i<edge_count; i++ )
-           api_delent( EDGEs[i] );
-        delete [] EDGEs;
-        PRINT_ERROR( "Curve is not an ACIS curve\n" );
-        acis_FACE_list.clear();
-        return CUBIT_FAILURE;
-     }
+      if (keep_both_sides == CUBIT_TRUE )
+	{
+	  PRINT_ERROR("keeping both sides of section is not implemented.");
+	  return CUBIT_FAILURE;
+	}
 
-     // copy each EDGE
-     outcome result = api_edge( EDGE_ptr, EDGEs[i] );
-     if (!result.ok())
-     {
-        for( i=0; i<edge_count; i++ )
-           api_delent( EDGEs[i] );
-        delete [] EDGEs;
-        PRINT_ERROR( "Unable to copy curve; aborting\n" );
-        AcisQueryEngine::instance()->ACIS_API_error (result);
-        return CUBIT_FAILURE;
-     }
+      // Compute the super bounding SPAbox
+      SPAbox super_bounding_box;
+      CubitStatus rv =
+	AcisQueryEngine::instance()->create_super_acis_bounding_box (section_body_list,
+								     super_bounding_box);
+      if (rv != CUBIT_SUCCESS)
+	return rv;
 
-  }
+      // Construct a BODY from the given CubitVectors and the size of
+      // the super bounding SPAbox.
+      BODY *cutting_tool_ptr;
+      cutting_tool_ptr = this->create_infinite_plane_cutting_tool(
+								  point_1,
+								  point_2,
+								  point_3,
+								  super_bounding_box );
+      if (cutting_tool_ptr == NULL || cutting_tool_ptr->lump() == NULL )
+	{
+	  PRINT_ERROR("failed in sectioning volumes.\n");
+	  return CUBIT_FAILURE;
+	}
 
-  BODY* wire_BODY = NULL ;
+      // Copy BODYs
+      i = section_body_list.size();
+      DLIList<BODY*>  tool_BODY_list(i);
+      DLIList<BODY*> blank_BODY_list(i);
+      DLIList<BODY*> input_BODY_list(i);
+      section_body_list.reset();
+      tool_BODY_list.append( cutting_tool_ptr );
+      for (i = section_body_list.size(); i > 0; i-- )
+	{
+	  BodySM* body_sm = section_body_list.get_and_step();
 
-  // make a wire Body
-  outcome result = api_make_ewire(edge_count, EDGEs, wire_BODY) ;
-  if ( !result.ok() || wire_BODY == NULL )
-  {
-     PRINT_ERROR("In AcisModifyEngine::webcut_with_curve_loop\n"
-        "       ACIS api_make_ewire function failed.\n\n");
-     AcisQueryEngine::instance()->ACIS_API_error (result);
-     for( i=0; i<edge_count; i++ )
-        api_delent( EDGEs[i] );
-     delete [] EDGEs;
-     acis_FACE_list.clear();
-     return CUBIT_FAILURE;
-  }
+	  BODY* input_BODY = AcisQueryEngine::get_BODY( body_sm );
+	  if (!input_BODY) continue;
 
-  delete [] EDGEs;
+	  //also make sure that the cutting plane and blank body intersect
+	  if ( !BODYs_interfering( input_BODY, cutting_tool_ptr) )
+	    {
+	      TopologyEntity *topo_entity = body_sm->topology_entity();
+	      RefEntity *ref_entity = CAST_TO(topo_entity, RefEntity);
+	      assert(ref_entity != 0);
+	      PRINT_WARNING("Volume %d does not interect sectioning plane\n", ref_entity->id() );
+	      section_body_list.remove( body_sm );
+	      continue;
+	    }
 
-  // Check to make sure the wire is closed
-  result = api_closed_wire( wire_BODY );
-  if( !result.ok() )
-  {
-    PRINT_ERROR( "ACIS reports that a closed loop was not found\n" );
-    if( wire_BODY )
-        api_delent( wire_BODY );
-    acis_FACE_list.clear();
-    return CUBIT_FAILURE;
-  }
+	  input_BODY_list.append( input_BODY );
 
-  // Cover the wire Body
-  outcome result_1 = api_cover_wires ( wire_BODY,
-     *(surface*)NULL_REF,
-     acis_FACE_list );
+	  BODY* blank_BODY = copy_BODY( input_BODY, delete_attribs );
+	  if (!blank_BODY) continue;
+	  blank_BODY_list.append( blank_BODY  );
 
-  if ( !result_1.ok() || acis_FACE_list.count() == 0 ||
-     wire_BODY == NULL )
-  {
-     PRINT_ERROR("In AcisModifyEngine::webcut_with_curve_loop\n"
-        "       ACIS api_cover_wires function failed.\n\n");
-     AcisQueryEngine::instance()->ACIS_API_error (result_1);
-     acis_FACE_list.clear();
-     if( wire_BODY )
-        api_delent( wire_BODY );
-     return CUBIT_FAILURE;
-  }
+	  if (i < section_body_list.size()) // not first iteration
+	    {
+	      BODY* tool_BODY = copy_BODY( cutting_tool_ptr );
+	      if (tool_BODY)
+		tool_BODY_list.append( tool_BODY );
+	    }
+	}
 
-  if (acis_FACE_list.count() != 1)
-  {
-     PRINT_ERROR("ACIS api_cover_wires function created "
-        "more than one FACE.\n"
-        "       At this time, we cannot deal with this.\n");
-     acis_FACE_list.clear();
-     if( wire_BODY )
-        api_delent( wire_BODY );
-     return CUBIT_FAILURE;
-  }
+      if( input_BODY_list.size() == 0 )
+	{
+	  PRINT_WARNING("No geometry interects sectioning plane\n");
+	  return CUBIT_FAILURE;
+	}
 
-  else
-  {
-     //make this a 2d body.
-     outcome result_2 = api_body_to_2d( wire_BODY );
-     if ( !result_2.ok() )
-     {
-        PRINT_ERROR("In AcisModifyEngine::webcut_with_curve_loop\n"
-           "       ACIS api_body_to_2d function failed.\n\n");
-        AcisQueryEngine::instance()->ACIS_API_error (result_2);
-        acis_FACE_list.clear();
-        if( wire_BODY )
-           api_delent( wire_BODY );
-        return CUBIT_FAILURE;
-     }
-     FACE *FACE_ptr = (FACE*) acis_FACE_list.next();
-     if ( FACE_ptr == NULL || FACE_ptr->geometry() == NULL )
-     {
-        PRINT_ERROR("In AcisModifyEngine::webcut_with_curve_loop\n"
-           "FACE or FACE's geometry was NULL.\n");
-        if( wire_BODY )
-           api_delent( wire_BODY );
-        acis_FACE_list.clear();
-        return CUBIT_FAILURE;
-     }
-  }
+      // If there were any errors in the above loop, clean up and exit
+      if ( input_BODY_list.size() < section_body_list.size() ||
+	   blank_BODY_list.size() < section_body_list.size() ||
+	   tool_BODY_list.size() < section_body_list.size() )
+	{
+	  if (input_BODY_list.size() < section_body_list.size())
+	    PRINT_ERROR("Internal error: Invalid BodySM at %s:%d\n", __FILE__, __LINE__ );
+	  else
+	    PRINT_ERROR("Internal error: BODY copy failed at %s:%d\n", __FILE__, __LINE__ );
+	  while (tool_BODY_list.size())
+	    api_delent( input_BODY_list.pop() );
+	  while (blank_BODY_list.size())
+	    api_delent( input_BODY_list.pop() );
+	  return CUBIT_FAILURE;
+	}
 
-  BodySM* webcut_body;
-  DLIList<BodySM*> temp_new_bodies;
-  int num_cut = 0;
-  for ( int ii = webcut_body_list.size(); ii > 0; ii-- )
-  {
-    webcut_body = webcut_body_list.remove();
-    BODY *webcut_BODY = AcisQueryEngine::get_BODY(webcut_body );
-      //now webcut with it.
-    BODY *new_BODY_1, *new_BODY_2;
-    CubitStatus status = webcut_with_sheet( webcut_BODY,
-                                            wire_BODY,
-                                            new_BODY_1,
-                                            new_BODY_2,
-                                            imprint );
-    if ( status == CUBIT_SUCCESS )
-    {
-      DLIList<BODY*> new_BODY_list;
-      new_BODY_list.append(new_BODY_1);
-      new_BODY_list.append(new_BODY_2);
-      temp_new_bodies.clean_out();
-
-      CubitStatus cub_result = get_new_Body(webcut_body, webcut_BODY,
-                                            new_BODY_list, temp_new_bodies,
-                                            CUBIT_FALSE);
-      if ( cub_result != CUBIT_SUCCESS )
-      {
-        PRINT_ERROR("Problems with building volume.\n");
-        num_cut = 0;
-        if( wire_BODY )
-           api_delent( wire_BODY );
-        return CUBIT_FAILURE;
-      }
+      // Deterine which type of Boolean to use.
+      BOOL_TYPE bool_type;
+      CubitBoolean nonreg = !GeometryModifyTool::instance()->boolean_regularize();
+      if (keep_normal_side && !nonreg)
+	bool_type = SUBTRACTION;
+      else if (keep_normal_side && nonreg)
+	bool_type = NONREG_SUBTRACTION;
+      else if (!keep_normal_side && !nonreg)
+	bool_type = INTERSECTION;
       else
-      {
-        results_list += temp_new_bodies;
-        num_cut++;
-      }
-    }
-  }
+	bool_type = NONREG_INTERSECTION;
 
-  if( wire_BODY )
-     api_delent( wire_BODY );
-  acis_FACE_list.clear();
+      // Do Boolean for each blank body
+      input_BODY_list.reset();
+      blank_BODY_list.reset();
+      tool_BODY_list.reset();
+      for ( i = input_BODY_list.size(); i--; )
+	{
+	  input_BODY_list.step();
+	  BODY* blank_BODY = blank_BODY_list.get_and_step();
+	  BODY*  tool_BODY =  tool_BODY_list.get_and_step();
+	  outcome result = api_boolean( tool_BODY, blank_BODY, bool_type );
+	  if (!result.ok())
+	    {
+	      PRINT_ERROR("Volume section failed.\n");
+	      blank_BODY_list.back();
+	      BODY *blank = blank_BODY_list.remove();
+	      AcisBridge *tb_ptr = ATTRIB_CUBIT_OWNER::cubit_owner(blank);
+	      if( tb_ptr && keep_old == false )
+		{
+		  BodyACIS *body_acis = CAST_TO(tb_ptr, BodyACIS );
+		  if( body_acis )
+		    {
+		      BodySM *body_sm = CAST_TO(body_acis, BodySM );
+		      TopologyEntity *topo_entity = body_sm->topology_entity();
+		      RefEntity *ref_entity = CAST_TO(topo_entity, RefEntity);
+		      section_body_list.remove( body_sm );
+		    }
+		}
 
-  return CUBIT_SUCCESS;
-}
+	      api_delent( blank );
+	      tool_BODY_list.back();
+	      api_delent( tool_BODY_list.remove() );
+	      input_BODY_list.back();
+	      input_BODY_list.remove();
+	    }
+	}
 
-//-------------------------------------------------------------------------
-// Purpose       : Sections the list of bodies (cuts in half).  This is
-//                 when trying to see a cross section of the model.
-//
-// Special Notes : Rewritten - J.Kraftcheck - 2004-4-5
-//
-// Creator       : David White
-//
-// Creation Date : 12/10/97
-//-------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::section(  DLIList<BodySM*>& section_body_list,
-                                        const CubitVector &point_1,
-                                        const CubitVector &point_2,
-                                        const CubitVector &point_3,
-                                        DLIList<BodySM*>& new_body_list,
-                                        bool keep_normal_side,
-                                        bool keep_old,
-                                        bool keep_both_sides )
-{
-  int i;
-  bool delete_attribs =
-     (GeometryModifyTool::instance()->get_new_ids() || keep_old);
+      if( input_BODY_list.size() == 0 )
+	return CUBIT_FAILURE;
 
-   if (keep_both_sides == CUBIT_TRUE )
-   {
-      PRINT_ERROR("keeping both sides of section is not implemented.");
-      return CUBIT_FAILURE;
-   }
+      // If a non-regularized operation, clean up internal surfaces
+      if (nonreg)
+	{
+	  DLIList<FACE*> FACE_list;
+	  input_BODY_list.reset();
+	  blank_BODY_list.reset();
 
-     // Compute the super bounding SPAbox
-   SPAbox super_bounding_box;
-   CubitStatus rv =
-       AcisQueryEngine::instance()->create_super_acis_bounding_box (section_body_list,
-                                                        super_bounding_box);
-   if (rv != CUBIT_SUCCESS)
-      return rv;
+	  for (i = input_BODY_list.size(); i--; )
+	    {
+	      input_BODY_list.step();
+	      BODY* blank_BODY = blank_BODY_list.get_and_step();
 
-     // Construct a BODY from the given CubitVectors and the size of
-     // the super bounding SPAbox.
-   BODY *cutting_tool_ptr;
-   cutting_tool_ptr = this->create_infinite_plane_cutting_tool(
-       point_1,
-       point_2,
-       point_3,
-       super_bounding_box );
-   if (cutting_tool_ptr == NULL || cutting_tool_ptr->lump() == NULL )
-   {
-      PRINT_ERROR("failed in sectioning volumes.\n");
-      return CUBIT_FAILURE;
-   }
+	      FACE_list.clean_out();
+	      AcisQueryEngine::instance()->get_FACEs( blank_BODY, FACE_list );
 
-    // Copy BODYs
-  i = section_body_list.size();
-  DLIList<BODY*>  tool_BODY_list(i);
-  DLIList<BODY*> blank_BODY_list(i);
-  DLIList<BODY*> input_BODY_list(i);
-  section_body_list.reset();
-  tool_BODY_list.append( cutting_tool_ptr );
-  for (i = section_body_list.size(); i > 0; i-- )
-  {
-    BodySM* body_sm = section_body_list.get_and_step();
+	      FACE_list.reset();
+	      for (int j = FACE_list.size(); j--; )
+		{
+		  FACE* FACE_ptr = FACE_list.get_and_step();
+		  assert( FACE_ptr != NULL );
 
-    BODY* input_BODY = AcisQueryEngine::get_BODY( body_sm );
-    if (!input_BODY) continue;
+		  if (FACE_ptr->sides() == DOUBLE_SIDED &&
+		      FACE_ptr->cont() == BOTH_INSIDE)
+		    {
+		      PRINT_INFO("Unhooking and deleting internal surface.\n");
+		      BODY* FACE_BODY_ptr;
+		      outcome result = api_unhook_face( FACE_ptr, FACE_BODY_ptr );
+		      if (!result.ok())
+			{
+			  AcisModifyEngine::instance()->get_acis_query_engine()->ACIS_API_error( result );
+			  PRINT_ERROR( " Face unhooking during rebuild of volume didn't work\n" );
+			}
+		      else
+			{
+			  api_delent( FACE_BODY_ptr );
+			}
+		    }
+		}
+	    }
+	}
 
-    //also make sure that the cutting plane and blank body intersect
-    if ( !BODYs_interfering( input_BODY, cutting_tool_ptr) )
-    {
-      TopologyEntity *topo_entity = body_sm->topology_entity();
-      RefEntity *ref_entity = CAST_TO(topo_entity, RefEntity);
-      assert(ref_entity != 0);
-      PRINT_WARNING("Volume %d does not interect sectioning plane\n", ref_entity->id() );
-      section_body_list.remove( body_sm );
-      continue;
+      // Create/update AcisBridges
+      if( keep_old == true )
+	{
+	  int k;
+	  for( k=blank_BODY_list.size(); k--; )
+	    {
+	      BodySM *this_bodysm = AcisQueryEngine::instance()->
+		populate_topology_bridges( blank_BODY_list.get_and_step() );
+	      new_body_list.append( this_bodysm );
+	    }
+	}
+      else
+	get_new_Body( section_body_list,
+		      input_BODY_list,
+		      blank_BODY_list,
+		      new_body_list,
+		      keep_old );
+
+      return CUBIT_SUCCESS;
     }
 
-    input_BODY_list.append( input_BODY );
 
-    BODY* blank_BODY = copy_BODY( input_BODY, delete_attribs );
-    if (!blank_BODY) continue;
-    blank_BODY_list.append( blank_BODY  );
-
-    if (i < section_body_list.size()) // not first iteration
+  //-------------------------------------------------------------------------
+  // Purpose       : webcuts a list of bodies using a plane.
+  //                 The newly created bodies are merged and imprinted
+  //                 depending on the respective flags.
+  //
+  // Special Notes :
+  //
+  // Creator       : Malcolm J. Panthaki
+  //
+  // Creation Date : 12/17/96
+  //-------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::webcut( DLIList<BodySM*>& webcut_body_list,
+					const CubitVector &vecVertex1,
+					const CubitVector &vecVertex2,
+					const CubitVector &vecVertex3,
+					DLIList<BodySM*>& results_list,
+					bool imprint ) const
     {
-      BODY* tool_BODY = copy_BODY( cutting_tool_ptr );
-      if (tool_BODY)
-        tool_BODY_list.append( tool_BODY );
-    }
-  }
+      //int webcut_debug_flag = 18;
+      //int webcut_debug_flag_on = DEBUG_FLAG(webcut_debug_flag);
 
-  if( input_BODY_list.size() == 0 )
-  {
-    PRINT_WARNING("No geometry interects sectioning plane\n");
-    return CUBIT_FAILURE;
-  }
+      BODY* cutting_tool_ptr = NULL;
 
-    // If there were any errors in the above loop, clean up and exit
-  if ( input_BODY_list.size() < section_body_list.size() ||
-       blank_BODY_list.size() < section_body_list.size() ||
-        tool_BODY_list.size() < section_body_list.size() )
-  {
-     if (input_BODY_list.size() < section_body_list.size())
-       PRINT_ERROR("Internal error: Invalid BodySM at %s:%d\n", __FILE__, __LINE__ );
-     else
-       PRINT_ERROR("Internal error: BODY copy failed at %s:%d\n", __FILE__, __LINE__ );
-     while (tool_BODY_list.size())
-       api_delent( input_BODY_list.pop() );
-     while (blank_BODY_list.size())
-       api_delent( input_BODY_list.pop() );
-     return CUBIT_FAILURE;
-  }
+      // To be able to create a Cutting Tool of the appropriate ("infinite")
+      // size, first generate the bounding SPAbox that surrounds all the BODYs
+      // being webcut. The procedure, GeometryModifyTool::create_infinite_plane_cutting
+      // _tool, will use the size of this "super" bounding SPAbox to determine an
+      // appropriate "infinite-enough" size for the Cutting Tool.
 
-    // Deterine which type of Boolean to use.
-  BOOL_TYPE bool_type;
-  CubitBoolean nonreg = !GeometryModifyTool::instance()->boolean_regularize();
-  if (keep_normal_side && !nonreg)
-    bool_type = SUBTRACTION;
-  else if (keep_normal_side && nonreg)
-    bool_type = NONREG_SUBTRACTION;
-  else if (!keep_normal_side && !nonreg)
-    bool_type = INTERSECTION;
-  else
-    bool_type = NONREG_INTERSECTION;
+      // Compute the super bounding SPAbox
+      SPAbox super_bounding_box;
+      CubitStatus rv =
+	AcisQueryEngine::instance()->create_super_acis_bounding_box ( webcut_body_list, super_bounding_box );
+      if (rv != CUBIT_SUCCESS)
+	return CUBIT_FAILURE;
 
-    // Do Boolean for each blank body
-  input_BODY_list.reset();
-  blank_BODY_list.reset();
-  tool_BODY_list.reset();
-  for ( i = input_BODY_list.size(); i--; )
-  {
-    input_BODY_list.step();
-    BODY* blank_BODY = blank_BODY_list.get_and_step();
-    BODY*  tool_BODY =  tool_BODY_list.get_and_step();
-    outcome result = api_boolean( tool_BODY, blank_BODY, bool_type );
-    if (!result.ok())
-    {
-      PRINT_ERROR("Volume section failed.\n");
-      blank_BODY_list.back();
-      BODY *blank = blank_BODY_list.remove();
-      AcisBridge *tb_ptr = ATTRIB_CUBIT_OWNER::cubit_owner(blank);
-      if( tb_ptr && keep_old == false )
-      {
-        BodyACIS *body_acis = CAST_TO(tb_ptr, BodyACIS );
-        if( body_acis )
-        {
-          BodySM *body_sm = CAST_TO(body_acis, BodySM );
-          TopologyEntity *topo_entity = body_sm->topology_entity();
-          RefEntity *ref_entity = CAST_TO(topo_entity, RefEntity);
-          section_body_list.remove( body_sm );
-        }
-      }
+      // Construct a BODY from the given CubitVectors and the size of
+      // the super bounding SPAbox.
+      cutting_tool_ptr = this-> create_infinite_plane_cutting_tool(
+								   vecVertex1,
+								   vecVertex2,
+								   vecVertex3,
+								   super_bounding_box );
 
-      api_delent( blank );
-      tool_BODY_list.back();
-      api_delent( tool_BODY_list.remove() );
-      input_BODY_list.back();
-      input_BODY_list.remove();
-    }
-  }
+      if (cutting_tool_ptr == NULL)
+	{
+	  //webcut_failed(refbody_cleanup_list, BODY_cleanup_list);
+	  PRINT_ERROR("In AcisModifyEngine::webcut(,Vector,,,),%d"
+		      "       Cannot create infinite plane cutting tool using \n"
+		      "       the vectors. \n", __LINE__ );
+	  return CUBIT_FAILURE;
+	}
 
-  if( input_BODY_list.size() == 0 )
-    return CUBIT_FAILURE;
+      else
+	{
+	  // Use the BODY to perform webcut
+	  CubitStatus stat =
+	    this->webcut(webcut_body_list, cutting_tool_ptr, results_list, imprint) ;
 
-    // If a non-regularized operation, clean up internal surfaces
-  if (nonreg)
-  {
-    DLIList<FACE*> FACE_list;
-    input_BODY_list.reset();
-    blank_BODY_list.reset();
+	  // Delete the BODY that was created to be used as a tool
+	  AcisQueryEngine::instance()->delete_ACIS_BODY(cutting_tool_ptr, CUBIT_TRUE) ;
+	  cutting_tool_ptr = NULL;
 
-    for (i = input_BODY_list.size(); i--; )
+	  return stat ;
+	}
+    }
+
+  //-------------------------------------------------------------------------
+  // Purpose       : webcuts a list of bodies using another Body as the tool.
+  //                 The newly created bodies are merged and imprinted
+  //                 depending on the respective flags.
+  //
+  // Special Notes :
+  //
+  // Creator       : Jihong Ma
+  //
+  // Creation Date : 12/23/96
+  //-------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::webcut( 
+				       DLIList<BodySM*>& webcut_body_list,
+				       BodySM const* tool_body,
+				       DLIList<BodySM*>& results_list,
+				       bool imprint)const
     {
-      input_BODY_list.step();
-      BODY* blank_BODY = blank_BODY_list.get_and_step();
+      // check the tool body if it is made of AcisModifyEngine
+      if( !is_modify_engine(tool_body))
+	{
+	  PRINT_ERROR("In AcisModifyEngine::webcut() %d, \n"
+		      "   The tool volume is not made of AGE itself.\n", __LINE__);
+	  return CUBIT_FAILURE;
+	}
 
-      FACE_list.clean_out();
-      AcisQueryEngine::instance()->get_FACEs( blank_BODY, FACE_list );
 
-      FACE_list.reset();
-      for (int j = FACE_list.size(); j--; )
-      {
-        FACE* FACE_ptr = FACE_list.get_and_step();
-        assert( FACE_ptr != NULL );
+      BODY* tool_BODY = NULL;
 
-        if (FACE_ptr->sides() == DOUBLE_SIDED &&
-            FACE_ptr->cont() == BOTH_INSIDE)
-        {
-          PRINT_INFO("Unhooking and deleting internal surface.\n");
-          BODY* FACE_BODY_ptr;
-          outcome result = api_unhook_face( FACE_ptr, FACE_BODY_ptr );
-          if (!result.ok())
-          {
-            AcisModifyEngine::instance()->get_acis_query_engine()->ACIS_API_error( result );
-            PRINT_ERROR( " Face unhooking during rebuild of volume didn't work\n" );
-          }
-          else
-          {
-            api_delent( FACE_BODY_ptr );
-          }
-        }
-      }
+      //get the ACIS BODY of tool_body
+      tool_BODY = AcisQueryEngine::get_BODY( const_cast<BodySM*>(tool_body) );
+      if( tool_BODY == NULL )
+	{
+	  PRINT_ERROR("In AcisModifyEngine::webcut() %d, \n"
+		      "       There is no underlying tool volume.\n",__LINE__);
+	  return CUBIT_FAILURE;
+	}
+
+      return this->webcut( webcut_body_list, tool_BODY, results_list, imprint);
     }
-  }
 
-    // Create/update AcisBridges
-  if( keep_old == true )
-  {
-    int k;
-    for( k=blank_BODY_list.size(); k--; )
+  //-------------------------------------------------------------------------
+  // Purpose       : webcuts a list of bodies using another Body as the tool.
+  //                 The newly created bodies are merged and imprinted
+  //                 depending on the respective flags.
+  // Special Notes :
+  //
+  // Creator       : Jihong Ma
+  //
+  // Creation Date : 12/17/96
+  //-------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::webcut( 
+				       DLIList<BodySM*>& webcut_body_list,
+				       BODY* tool_BODY,
+				       DLIList<BodySM*>& results_list,
+				       bool imprint) const 
     {
-      BodySM *this_bodysm = AcisQueryEngine::instance()->
-            populate_topology_bridges( blank_BODY_list.get_and_step() );
-      new_body_list.append( this_bodysm );
-    }
-  }
-  else
-    get_new_Body( section_body_list,
-                  input_BODY_list,
-                  blank_BODY_list,
-                  new_body_list,
-                  keep_old );
+      CubitBoolean delete_bodies = (GeometryModifyTool::instance()->get_new_ids() ?
+				    CUBIT_FALSE : CUBIT_TRUE);
 
-  return CUBIT_SUCCESS;
-}
+      // Number of bodies that were webcut
+      int count = 0 ;
 
+      bool cutting_with_sheet = BodyACIS::is_sheet_body(tool_BODY);
+      BodySM* Body_to_be_webcut = NULL;
+      BODY* BODY_to_be_webcut = NULL;
 
-//-------------------------------------------------------------------------
-// Purpose       : webcuts a list of bodies using a plane.
-//                 The newly created bodies are merged and imprinted
-//                 depending on the respective flags.
-//
-// Special Notes :
-//
-// Creator       : Malcolm J. Panthaki
-//
-// Creation Date : 12/17/96
-//-------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::webcut( DLIList<BodySM*>& webcut_body_list,
-                                      const CubitVector &vecVertex1,
-                                      const CubitVector &vecVertex2,
-                                      const CubitVector &vecVertex3,
-                                      DLIList<BodySM*>& results_list,
-                                      bool imprint ) const
-{
-   //int webcut_debug_flag = 18;
-   //int webcut_debug_flag_on = DEBUG_FLAG(webcut_debug_flag);
+      // List to maintain thew newly created BODYs
+      DLIList<BODY*> new_webcut_BODY_list;
 
-   BODY* cutting_tool_ptr = NULL;
+      // List of old bodies that did get webcut
+      DLIList<BodySM*> old_body_list;
+      DLIList<BODY*> old_BODY_list;
 
-     // To be able to create a Cutting Tool of the appropriate ("infinite")
-     // size, first generate the bounding SPAbox that surrounds all the BODYs
-     // being webcut. The procedure, GeometryModifyTool::create_infinite_plane_cutting
-     // _tool, will use the size of this "super" bounding SPAbox to determine an
-     // appropriate "infinite-enough" size for the Cutting Tool.
+      // Variables to get the results of webcut from another routine.
+      BODY* BODY_result1 = NULL;
+      BODY* BODY_result2 = NULL;
 
-     // Compute the super bounding SPAbox
-   SPAbox super_bounding_box;
-   CubitStatus rv =
-       AcisQueryEngine::instance()->create_super_acis_bounding_box ( webcut_body_list, super_bounding_box );
-   if (rv != CUBIT_SUCCESS)
-      return CUBIT_FAILURE;
+      // For each Body in the input list, make sure that it is associated
+      // with AGE before the webcutting is done.
+      CubitStatus status = CUBIT_FAILURE;
+      webcut_body_list.reset() ;
+      int i;
 
-     // Construct a BODY from the given CubitVectors and the size of
-     // the super bounding SPAbox.
-   cutting_tool_ptr = this-> create_infinite_plane_cutting_tool(
-       vecVertex1,
-       vecVertex2,
-       vecVertex3,
-       super_bounding_box );
+      // step 1: bodies taken from webcut_body_list and webcut; if
+      //    successful, the old Body and BODY are put on old_Body(BODY)_list
+      //    and pieces put on new_webcut_BODY_list
+      //   => 2 important lists:
+      //      a) new_webcut_BODY_list (new pieces from bodies in old_...)
+      //      b) results_list - bodies that weren't cut by the tool
+      for( i = 0 ; i < webcut_body_list.size() ; i++)
+	{
+	  Body_to_be_webcut = webcut_body_list.get_and_step();
+	  if( !is_modify_engine(Body_to_be_webcut))
+	    {
+	      PRINT_ERROR("In AcisModifyEngine::webcut(), \n"
+			  "       Volumes are associated with a different \n"
+			  "       geometric modeling engine.\n" );
+	    }
 
-   if (cutting_tool_ptr == NULL)
-   {
-        //webcut_failed(refbody_cleanup_list, BODY_cleanup_list);
-      PRINT_ERROR("In AcisModifyEngine::webcut(,Vector,,,),%d"
-                  "       Cannot create infinite plane cutting tool using \n"
-                  "       the vectors. \n", __LINE__ );
-      return CUBIT_FAILURE;
-   }
+	  //otherwise, get the BODY of the Body_to_be_webcut
+	  BODY_to_be_webcut = AcisQueryEngine::get_BODY( Body_to_be_webcut );
+	  if( BODY_to_be_webcut == NULL )
+	    {
+	      PRINT_ERROR("In AcisModifyEngine::webcut() %d, \n"
+			  "       There is no underlying volume.\n",
+			  __LINE__);
+	      assert(BODY_to_be_webcut != NULL) ;
+	    }
 
-   else
-   {
-        // Use the BODY to perform webcut
-      CubitStatus stat =
-          this->webcut(webcut_body_list, cutting_tool_ptr, results_list, imprint) ;
+	  //now can do a webcut, using a BODY tool, resulting two BODYs
+	  status = webcut_BODY( BODY_to_be_webcut, tool_BODY,
+				BODY_result1, BODY_result2,
+				cutting_with_sheet);
 
-        // Delete the BODY that was created to be used as a tool
-      AcisQueryEngine::instance()->delete_ACIS_BODY(cutting_tool_ptr, CUBIT_TRUE) ;
-      cutting_tool_ptr = NULL;
+	  if (status == CUBIT_SUCCESS )
+	    {
+	      // Add the 2 new BODYs to the list of webcut BODYs
+	      new_webcut_BODY_list.append(BODY_result1);
+	      new_webcut_BODY_list.append(BODY_result2);
+	      old_body_list.append(Body_to_be_webcut);
+	      old_BODY_list.append(BODY_to_be_webcut);
 
-      return stat ;
-   }
-}
+	      // Since we have successfully webcut this BODY, delete it.
+	      // Delete the corresponding Body too. (only do this if we're not
+	      // using persistent objects)
 
-//-------------------------------------------------------------------------
-// Purpose       : webcuts a list of bodies using another Body as the tool.
-//                 The newly created bodies are merged and imprinted
-//                 depending on the respective flags.
-//
-// Special Notes :
-//
-// Creator       : Jihong Ma
-//
-// Creation Date : 12/23/96
-//-------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::webcut( DLIList<BodySM*>& webcut_body_list,
-                                      BodySM const* tool_body,
-                                      DLIList<BodySM*>& results_list,
-                                      bool imprint ) const
-{
-     // check the tool body if it is made of AcisModifyEngine
-   if( !is_modify_engine(tool_body))
-   {
-      PRINT_ERROR("In AcisModifyEngine::webcut() %d, \n"
-                  "   The tool volume is not made of AGE itself.\n", __LINE__);
-      return CUBIT_FAILURE;
-   }
+	      if (delete_bodies == CUBIT_FALSE) {
+		AcisQueryEngine::instance()->delete_ACIS_BODY(BODY_to_be_webcut) ;
+		//AcisQueryEngine::instance()->delete_solid_model_entities(Body_to_be_webcut);
+	      }
 
+	      // Increment the counter
+	      count++ ;
+	    }
 
-   BODY* tool_BODY = NULL;
+	  else
+	    {
+	      //Since the body wasn't cut, it is a result...
+	      results_list.append_unique( Body_to_be_webcut );
+	    }
+	}
 
-     //get the ACIS BODY of tool_body
-   tool_BODY = AcisQueryEngine::get_BODY( const_cast<BodySM*>(tool_body) );
-   if( tool_BODY == NULL )
-   {
-      PRINT_ERROR("In AcisModifyEngine::webcut() %d, \n"
-                  "       There is no underlying tool volume.\n",__LINE__);
-      return CUBIT_FAILURE;
-   }
+      // A list to hold the newly created Bodies due to imprint operations
+      // on the remaining Bodys in the Model. The new Bodys replace the old
+      // Bodys if any of the new BODYs created by webcutting imprint
+      // on the old Bodys.
+      DLIList<BodySM*>  new_webcut_body_list;
 
-   return this->webcut( webcut_body_list, tool_BODY, results_list, imprint );
-}
+      DLIList<BODY*> just_webcut_list;
+      // A list to get the BODY's created that were webcut from the imprint
+      // operation.
 
-//-------------------------------------------------------------------------
-// Purpose       : webcuts a list of bodies using another Body as the tool.
-//                 The newly created bodies are merged and imprinted
-//                 depending on the respective flags.
-// Special Notes :
-//
-// Creator       : Jihong Ma
-//
-// Creation Date : 12/17/96
-//-------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::webcut( DLIList<BodySM*>& webcut_body_list,
-                                      BODY* tool_BODY,
-                                      DLIList<BodySM*>& results_list,
-                                      bool imprint ) const
-{
-  CubitBoolean delete_bodies = (GeometryModifyTool::instance()->get_new_ids() ?
-                                CUBIT_FALSE : CUBIT_TRUE);
 
-    // Number of bodies that were webcut
-   int count = 0 ;
+      // Perform the imprinting operations, if required. Note that this
+      // operation needs to be performed *after* the model has been cleared of
+      // Bodies that were already webcut. Also, note that it returns a list
+      // of all the new Bodies created during the imprint operation. This
+      // list is then enhanced by adding any new Bodies created due to the
+      // actual cutting of an old Body, before it is sent into the webcut_merge
+      // procedure. This is the list of Bodies that is "merged".
+      if (new_webcut_BODY_list.size() > 0)
+	{
+	  DLIList<BODY*> old_model_BODY_list;
+	  DLIList<BodySM*> old_model_Body_list;
 
-   BodySM* Body_to_be_webcut = NULL;
-   BODY* BODY_to_be_webcut = NULL;
+	  if ( imprint == CUBIT_TRUE )
+	    {
+	      // Work-in-progress message
+	      PRINT_INFO ("      Performing the imprint operations...\n");
 
-     // List to maintain thew newly created BODYs
-   DLIList<BODY*> new_webcut_BODY_list;
+	      // Imprint away :)
+	      webcut_imprint(tool_BODY, old_body_list, new_webcut_BODY_list,
+			     just_webcut_list, results_list,
+			     old_model_Body_list, old_model_BODY_list) ;
+	    }
+	  if ( just_webcut_list.size() == 0 )
+	    just_webcut_list = new_webcut_BODY_list;
 
-     // List of old bodies that did get webcut
-   DLIList<BodySM*> old_body_list;
-   DLIList<BODY*> old_BODY_list;
+	  // Work-in-progress message
+	  PRINT_INFO ("      Creating the new (webcut) volumes...\n");
 
-     // Variables to get the results of webcut from another routine.
-   BODY* BODY_result1 = NULL;
-   BODY* BODY_result2 = NULL;
+	  // Now create the new Bodies from the ACIS BODYs that were created
+	  // by webcutting the original BODYs using the Cutting Tool.
+	  BodySM* new_body_ptr = NULL;
+	  BODY* webcut_BODY_ptr = NULL;
+	  new_webcut_BODY_list.reset();
+	  old_body_list.reset();
+	  old_BODY_list.reset();
+	  old_model_Body_list.reset();
+	  old_model_BODY_list.reset();
 
-     // For each Body in the input list, make sure that it is associated
-     // with AGE before the webcutting is done.
-   CubitStatus status = CUBIT_FAILURE;
-   webcut_body_list.reset() ;
-   int i;
+	  for ( i = 0 ; i < new_webcut_BODY_list.size(); i++ )
+	    {
+	      DLIList<BODY*> temp_BODY_list;
+	      DLIList<BodySM*> temp_body_list;
+	      BodySM *old_Body;
+	      BODY *old_BODY;
 
-     // step 1: bodies taken from webcut_body_list and webcut; if
-     //    successful, the old Body and BODY are put on old_Body(BODY)_list
-     //    and pieces put on new_webcut_BODY_list
-     //   => 2 important lists:
-     //      a) new_webcut_BODY_list (new pieces from bodies in old_...)
-     //      b) results_list - bodies that weren't cut by the tool
-   for( i = 0 ; i < webcut_body_list.size() ; i++)
-   {
-      Body_to_be_webcut = webcut_body_list.get_and_step();
-      if( !is_modify_engine(Body_to_be_webcut))
-      {
-         PRINT_ERROR("In AcisModifyEngine::webcut(), \n"
-                     "       Volumes are associated with a different \n"
-                     "       geometric modeling engine.\n" );
-      }
+	      webcut_BODY_ptr = new_webcut_BODY_list.get_and_step();
+	      temp_BODY_list.append(webcut_BODY_ptr);
+	      // in call to get_new_Body, don't delete old bodies if
+	      // they were successfully webcut (need to do it that way to
+	      // preserve name propagation as before); otherwise, delete the
+	      // imprinted bodies
+	      if (imprint == CUBIT_FALSE || just_webcut_list.move_to(webcut_BODY_ptr)) {
+		webcut_BODY_ptr = new_webcut_BODY_list.get_and_step();
+		temp_BODY_list.append(webcut_BODY_ptr);
+		i++;
+		old_Body = old_body_list.get_and_step();
+		old_BODY = old_BODY_list.get_and_step();
+		status = get_new_Body( old_Body, old_BODY, temp_BODY_list, temp_body_list,
+				       false, delete_bodies );
+	      }
+	      else {
+		old_Body = old_model_Body_list.get_and_step();
+		old_BODY = old_model_BODY_list.get_and_step();
+		BodySM* new_Body = get_new_Body( old_Body, old_BODY, webcut_BODY_ptr,
+						 false, true, true );
+		status = CUBIT_SUCCESS;
+		if (new_Body)
+		  temp_body_list.append(new_Body);
+	      }
 
-        //otherwise, get the BODY of the Body_to_be_webcut
-      BODY_to_be_webcut = AcisQueryEngine::get_BODY( Body_to_be_webcut );
-      if( BODY_to_be_webcut == NULL )
-      {
-         PRINT_ERROR("In AcisModifyEngine::webcut() %d, \n"
-                     "       There is no underlying volume.\n",
-                     __LINE__);
-         assert(BODY_to_be_webcut != NULL) ;
-      }
+	      if (status == CUBIT_FAILURE) {
+		PRINT_ERROR("Failed to build new volume in AGE::webcut.\n");
+	      }
 
-        //now can do a webcut, using a BODY tool, resulting two BODYs
-      status = webcut_BODY( BODY_to_be_webcut, tool_BODY,
-                            BODY_result1, BODY_result2);
+	      // if we didn't get any new bodies back from get_new_Body,
+	      // that means that an imprinted body wasn't really imprinted
+	      if (temp_body_list.size() > 0) {
+		temp_BODY_list.reset();
+		temp_body_list.reset();
+		for (int j = 0; j < temp_BODY_list.size(); j++) {
+		  webcut_BODY_ptr = temp_BODY_list.get_and_step();
+		  new_body_ptr = temp_body_list.get_and_step();
 
-      if (status == CUBIT_SUCCESS )
-      {
-           // Add the 2 new BODYs to the list of webcut BODYs
-         new_webcut_BODY_list.append(BODY_result1);
-         new_webcut_BODY_list.append(BODY_result2);
-         old_body_list.append(Body_to_be_webcut);
-         old_BODY_list.append(BODY_to_be_webcut);
+		  new_webcut_body_list.append(new_body_ptr);
+		  results_list.append_unique(new_body_ptr);
+		}
+	      }
+	      else
+		new_webcut_body_list.append(old_Body);
 
-           // Since we have successfully webcut this BODY, delete it.
-           // Delete the corresponding Body too. (only do this if we're not
-           // using persistent objects)
-
-         if (delete_bodies == CUBIT_FALSE) {
-           AcisQueryEngine::instance()->delete_ACIS_BODY(BODY_to_be_webcut) ;
-           //AcisQueryEngine::instance()->delete_solid_model_entities(Body_to_be_webcut);
-         }
-
-           // Increment the counter
-         count++ ;
-      }
-
+	    }
+	}
+      // Return CUBIT_SUCCESS as long as one body is webcut, earlier failures should
+      // return CUBIT_FAILURE independently of these return statments
+      if (count>0)
+	{
+	  return CUBIT_SUCCESS;
+	}
       else
-      {
-           //Since the body wasn't cut, it is a result...
-         results_list.append_unique( Body_to_be_webcut );
-      }
-   }
+	{
+	  return CUBIT_FAILURE;
+	}
+    }
 
-     // A list to hold the newly created Bodies due to imprint operations
-     // on the remaining Bodys in the Model. The new Bodys replace the old
-     // Bodys if any of the new BODYs created by webcutting imprint
-     // on the old Bodys.
-   DLIList<BodySM*>  new_webcut_body_list;
 
-   DLIList<BODY*> just_webcut_list;
-     // A list to get the BODY's created that were webcut from the imprint
-     // operation.
+  //-------------------------------------------------------------------------
+  // Purpose       : This function creates a Point, given coordinates.  The
+  //                 particular type of Point object that is created depends on
+  //                 the specific GeometryQueryEngine.  For example, this
+  //                 engine, AcisModifyEngine, creates a PointACIS and
+  //                 returns it.
+  //
+  // Special Notes :
+  // In this routine, a floating ACIS VERTEX is created. This VERTEX
+  // is not a part of any BODY and, hence, does not take part in
+  // any boolean operations.
+  //
+  // Creator       : Malcolm J. Panthaki
+  //
+  // Creation Date : 03/05/97
+  //-------------------------------------------------------------------------
+  Point* AcisModifyEngine::make_Point(CubitVector const& point) const
+    {
+      // Create a new ACIS VERTEX -- it is not attached to a BODY
+      VERTEX* VERTEX_ptr = this->make_VERTEX( point );
+      if ( VERTEX_ptr == NULL )
+	{
+	  PRINT_ERROR("In AcisModifyEngine::make_Point\n"
+		      "       Cannot make Point object.\n");
+	  return (Point *)NULL;
+	}
 
+      // Create a new PointACIS object
+      return AcisQueryEngine::instance()->populate_topology_bridges( VERTEX_ptr );
 
-     // Perform the imprinting operations, if required. Note that this
-     // operation needs to be performed *after* the model has been cleared of
-     // Bodies that were already webcut. Also, note that it returns a list
-     // of all the new Bodies created during the imprint operation. This
-     // list is then enhanced by adding any new Bodies created due to the
-     // actual cutting of an old Body, before it is sent into the webcut_merge
-     // procedure. This is the list of Bodies that is "merged".
-   if (new_webcut_BODY_list.size() > 0)
-   {
-     DLIList<BODY*> old_model_BODY_list;
-     DLIList<BodySM*> old_model_Body_list;
+    }
 
-      if ( imprint == CUBIT_TRUE )
-      {
-           // Work-in-progress message
-         PRINT_INFO ("      Performing the imprint operations...\n");
 
-           // Imprint away :)
-         webcut_imprint(tool_BODY, old_body_list, new_webcut_BODY_list,
-                        just_webcut_list, results_list,
-                        old_model_Body_list, old_model_BODY_list) ;
-      }
-      if ( just_webcut_list.size() == 0 )
-          just_webcut_list = new_webcut_BODY_list;
 
-        // Work-in-progress message
-      PRINT_INFO ("      Creating the new (webcut) volumes...\n");
+  // This function creates a curve given an existing curve.
+  Curve* AcisModifyEngine::make_Curve(Curve *curve_ptr) const
+    {
+      EDGE *EDGE_ptr, *new_EDGE_ptr = NULL;
+      CurveACIS *curve_ACIS = CAST_TO(curve_ptr, CurveACIS);
+      if (!curve_ACIS)
+	{
+	  PRINT_ERROR("Cannot create an ACIS curve from the given curve.\n"
+		      "Possible incompatible geometry engines.\n");
+	  return (Curve *)NULL;
+	}
+      EDGE_ptr = curve_ACIS->get_EDGE_ptr();
 
-        // Now create the new Bodies from the ACIS BODYs that were created
-        // by webcutting the original BODYs using the Cutting Tool.
-      BodySM* new_body_ptr = NULL;
-      BODY* webcut_BODY_ptr = NULL;
-      new_webcut_BODY_list.reset();
-      old_body_list.reset();
-      old_BODY_list.reset();
-      old_model_Body_list.reset();
-      old_model_BODY_list.reset();
+      outcome result = api_edge( EDGE_ptr, new_EDGE_ptr );
 
-      for ( i = 0 ; i < new_webcut_BODY_list.size(); i++ )
-      {
-        DLIList<BODY*> temp_BODY_list;
-        DLIList<BodySM*> temp_body_list;
-        BodySM *old_Body;
-        BODY *old_BODY;
+      if ( !result.ok() || new_EDGE_ptr == NULL )
+	{
+	  PRINT_ERROR("In AcisModifyEngine::make_Curve\n"
+		      "       Cannot make Curve object.\n");
+	  return (Curve *)NULL;
+	}
 
-        webcut_BODY_ptr = new_webcut_BODY_list.get_and_step();
-        temp_BODY_list.append(webcut_BODY_ptr);
-          // in call to get_new_Body, don't delete old bodies if
-          // they were successfully webcut (need to do it that way to
-          // preserve name propagation as before); otherwise, delete the
-          // imprinted bodies
-        if (imprint == CUBIT_FALSE || just_webcut_list.move_to(webcut_BODY_ptr)) {
-          webcut_BODY_ptr = new_webcut_BODY_list.get_and_step();
-          temp_BODY_list.append(webcut_BODY_ptr);
-          i++;
-          old_Body = old_body_list.get_and_step();
-          old_BODY = old_BODY_list.get_and_step();
-          status = get_new_Body( old_Body, old_BODY, temp_BODY_list, temp_body_list,
-                                 false, delete_bodies );
-        }
-        else {
-          old_Body = old_model_Body_list.get_and_step();
-          old_BODY = old_model_BODY_list.get_and_step();
-          BodySM* new_Body = get_new_Body( old_Body, old_BODY, webcut_BODY_ptr,
-                                           false, true, true );
-          status = CUBIT_SUCCESS;
-          if (new_Body)
-            temp_body_list.append(new_Body);
-        }
+      // Create a new CurveACIS object
+      // Use the new EDGE to create a new CurveACIS
+      return AcisQueryEngine::instance()->populate_topology_bridges(new_EDGE_ptr);
+    }
 
-        if (status == CUBIT_FAILURE) {
-          PRINT_ERROR("Failed to build new volume in AGE::webcut.\n");
-        }
+  //-------------------------------------------------------------------------
+  // Purpose       : This function creates a Curve of type, curve_type,
+  //                 given the end points of the curve and an intermediate
+  //                 point.  The particular type of Curve object that is
+  //                 created depends on the specific modeling engine.  For
+  //                 example, if the engine is AcisModifyEngine, then a
+  //                 CurveACIS is created and returned.
+  //
+  // Special Notes :
+  //
+  // Creator       : Raikanta Sahu
+  //
+  // Creation Date : 03/29/97
+  //-------------------------------------------------------------------------
 
-          // if we didn't get any new bodies back from get_new_Body,
-          // that means that an imprinted body wasn't really imprinted
-        if (temp_body_list.size() > 0) {
-          temp_BODY_list.reset();
-          temp_body_list.reset();
-          for (int j = 0; j < temp_BODY_list.size(); j++) {
-            webcut_BODY_ptr = temp_BODY_list.get_and_step();
-            new_body_ptr = temp_body_list.get_and_step();
-
-            new_webcut_body_list.append(new_body_ptr);
-            results_list.append_unique(new_body_ptr);
-          }
-        }
-        else
-          new_webcut_body_list.append(old_Body);
-
-      }
-   }
-   // Return CUBIT_SUCCESS as long as one body is webcut, earlier failures should
-   // return CUBIT_FAILURE independently of these return statments
-   if (count>0)
-   {
-     return CUBIT_SUCCESS;
-   }
-   else
-   {
-     return CUBIT_FAILURE;
-   }
-}
-
-
-//-------------------------------------------------------------------------
-// Purpose       : This function creates a Point, given coordinates.  The
-//                 particular type of Point object that is created depends on
-//                 the specific GeometryQueryEngine.  For example, this
-//                 engine, AcisModifyEngine, creates a PointACIS and
-//                 returns it.
-//
-// Special Notes :
-// In this routine, a floating ACIS VERTEX is created. This VERTEX
-// is not a part of any BODY and, hence, does not take part in
-// any boolean operations.
-//
-// Creator       : Malcolm J. Panthaki
-//
-// Creation Date : 03/05/97
-//-------------------------------------------------------------------------
-Point* AcisModifyEngine::make_Point(CubitVector const& point) const
-{
-     // Create a new ACIS VERTEX -- it is not attached to a BODY
-   VERTEX* VERTEX_ptr = this->make_VERTEX( point );
-   if ( VERTEX_ptr == NULL )
-   {
-      PRINT_ERROR("In AcisModifyEngine::make_Point\n"
-                  "       Cannot make Point object.\n");
-      return (Point *)NULL;
-   }
-
-     // Create a new PointACIS object
-   return AcisQueryEngine::instance()->populate_topology_bridges( VERTEX_ptr );
-
-}
-
-
-
-// This function creates a curve given an existing curve.
-Curve* AcisModifyEngine::make_Curve(Curve *curve_ptr) const
-{
-  EDGE *EDGE_ptr, *new_EDGE_ptr = NULL;
-  CurveACIS *curve_ACIS = CAST_TO(curve_ptr, CurveACIS);
-  if (!curve_ACIS)
-  {
-     PRINT_ERROR("Cannot create an ACIS curve from the given curve.\n"
-                 "Possible incompatible geometry engines.\n");
-     return (Curve *)NULL;
-  }
-  EDGE_ptr = curve_ACIS->get_EDGE_ptr();
-
-  outcome result = api_edge( EDGE_ptr, new_EDGE_ptr );
-
-  if ( !result.ok() || new_EDGE_ptr == NULL )
-  {
-    PRINT_ERROR("In AcisModifyEngine::make_Curve\n"
-                "       Cannot make Curve object.\n");
-    return (Curve *)NULL;
-  }
-
-    // Create a new CurveACIS object
-    // Use the new EDGE to create a new CurveACIS
-  return AcisQueryEngine::instance()->populate_topology_bridges(new_EDGE_ptr);
-}
-
-//-------------------------------------------------------------------------
-// Purpose       : This function creates a Curve of type, curve_type,
-//                 given the end points of the curve and an intermediate
-//                 point.  The particular type of Curve object that is
-//                 created depends on the specific modeling engine.  For
-//                 example, if the engine is AcisModifyEngine, then a
-//                 CurveACIS is created and returned.
-//
-// Special Notes :
-//
-// Creator       : Raikanta Sahu
-//
-// Creation Date : 03/29/97
-//-------------------------------------------------------------------------
-
-Curve* AcisModifyEngine::make_Curve( GeometryType curve_type,
+  Curve* AcisModifyEngine::make_Curve( GeometryType curve_type,
                                        Point const* point1_ptr,
                                        Point const* point2_ptr,
                                        CubitVector const* intermediate_point_ptr,
                                        CubitSense sense) const
-{
-     // Extract the VERTEXes from the Points and construct a SPAposition
-     // from the cubit SPAvector.
+    {
+      // Extract the VERTEXes from the Points and construct a SPAposition
+      // from the cubit SPAvector.
 
-     // Cast the Points to  PointACIS
-   PointACIS* pointACIS_ptr1 = CAST_TO(const_cast<Point*>(point1_ptr), PointACIS) ;
-   PointACIS* pointACIS_ptr2 = CAST_TO(const_cast<Point*>(point2_ptr), PointACIS) ;
+      // Cast the Points to  PointACIS
+      PointACIS* pointACIS_ptr1 = CAST_TO(const_cast<Point*>(point1_ptr), PointACIS) ;
+      PointACIS* pointACIS_ptr2 = CAST_TO(const_cast<Point*>(point2_ptr), PointACIS) ;
 
-     // Make sure that we don't get NULL pointers after the cast down.
-   assert ( pointACIS_ptr1 != NULL && pointACIS_ptr2 != NULL ) ;
+      // Make sure that we don't get NULL pointers after the cast down.
+      assert ( pointACIS_ptr1 != NULL && pointACIS_ptr2 != NULL ) ;
 
-     // Get a reference to the VERTEX list of the PointACIS
-   VERTEX* VERTEX_ptr1 = pointACIS_ptr1->get_VERTEX_ptr();
-   VERTEX* VERTEX_ptr2 = pointACIS_ptr2->get_VERTEX_ptr();
+      // Get a reference to the VERTEX list of the PointACIS
+      VERTEX* VERTEX_ptr1 = pointACIS_ptr1->get_VERTEX_ptr();
+      VERTEX* VERTEX_ptr2 = pointACIS_ptr2->get_VERTEX_ptr();
 
-   SPAposition* pos_ptr = NULL ;
-   SPAposition pos ;
+      SPAposition* pos_ptr = NULL ;
+      SPAposition pos ;
 
-   if ( curve_type != STRAIGHT_CURVE_TYPE )
-   {
-      assert ( intermediate_point_ptr != NULL) ;
+      if ( curve_type != STRAIGHT_CURVE_TYPE )
+	{
+	  assert ( intermediate_point_ptr != NULL) ;
 
-        // Construct a SPAposition from the given intermediate point.
-      pos = SPAposition (intermediate_point_ptr->x(),
-                      intermediate_point_ptr->y(),
-                      intermediate_point_ptr->z()) ;
-      pos_ptr = &pos ;
-   }
+	  // Construct a SPAposition from the given intermediate point.
+	  pos = SPAposition (intermediate_point_ptr->x(),
+			     intermediate_point_ptr->y(),
+			     intermediate_point_ptr->z()) ;
+	  pos_ptr = &pos ;
+	}
 
-   logical acis_sense = TRUE;
-   if ( sense == CUBIT_REVERSED )
-   {
-      acis_sense = FALSE;
-   }
+      logical acis_sense = TRUE;
+      if ( sense == CUBIT_REVERSED )
+	{
+	  acis_sense = FALSE;
+	}
 
-     // Use the VERTEXes and the SPAposition to make a new EDGE
-   EDGE* EDGE_ptr = this->make_EDGE(curve_type,
-                                    VERTEX_ptr1,
-                                    VERTEX_ptr2,
-                                    pos_ptr,
-                                    acis_sense == TRUE) ;
+      // Use the VERTEXes and the SPAposition to make a new EDGE
+      EDGE* EDGE_ptr = this->make_EDGE(curve_type,
+				       VERTEX_ptr1,
+				       VERTEX_ptr2,
+				       pos_ptr,
+				       acis_sense == TRUE) ;
 
-   if ( EDGE_ptr == NULL )
-   {
-      PRINT_ERROR("In AcisModifyEngine::make_Curve\n"
-                  "       Cannot make Curve object.\n");
-      return (Curve *)NULL;
-   }
+      if ( EDGE_ptr == NULL )
+	{
+	  PRINT_ERROR("In AcisModifyEngine::make_Curve\n"
+		      "       Cannot make Curve object.\n");
+	  return (Curve *)NULL;
+	}
 
-     // Use the new EDGE to create a new CurveACIS
-   return AcisQueryEngine::instance()->populate_topology_bridges(EDGE_ptr);
-}
+      // Use the new EDGE to create a new CurveACIS
+      return AcisQueryEngine::instance()->populate_topology_bridges(EDGE_ptr);
+    }
 
-//-------------------------------------------------------------------------
-// Purpose       : This function creates a Curve of type, curve_type,
-//                 given the end points of the curve and an intermediate
-//                 point.  The particular type of Curve object that is
-//                 created depends on the specific modeling engine.  For
-//                 example, if the engine is AcisModifyEngine, then a
-//                 CurveACIS is created and returned.
-//
-// Special Notes :
-//
-// Creator       : Malcolm J. Panthaki
-//
-// Creation Date : 05/16/97
-//-------------------------------------------------------------------------
-Curve* AcisModifyEngine::make_Curve( GeometryType curve_type,
+  //-------------------------------------------------------------------------
+  // Purpose       : This function creates a Curve of type, curve_type,
+  //                 given the end points of the curve and an intermediate
+  //                 point.  The particular type of Curve object that is
+  //                 created depends on the specific modeling engine.  For
+  //                 example, if the engine is AcisModifyEngine, then a
+  //                 CurveACIS is created and returned.
+  //
+  // Special Notes :
+  //
+  // Creator       : Malcolm J. Panthaki
+  //
+  // Creation Date : 05/16/97
+  //-------------------------------------------------------------------------
+  Curve* AcisModifyEngine::make_Curve( GeometryType curve_type,
                                        Point const* point1_ptr,
                                        Point const* point2_ptr,
                                        DLIList<CubitVector*>& vector_list,
                                        Surface* ref_face_ptr ) const
-{
-     // We make splines here :-)
-   if ( curve_type != SPLINE_CURVE_TYPE )
-   {
-      PRINT_ERROR("In AcisModifyEngine::make_Curve\n"
-                  "       Can only make spline surves in this routine.\n");
-      return (Curve *)NULL;
-   }
+    {
+      // We make splines here :-)
+      if ( curve_type != SPLINE_CURVE_TYPE )
+	{
+	  PRINT_ERROR("In AcisModifyEngine::make_Curve\n"
+		      "       Can only make spline surves in this routine.\n");
+	  return (Curve *)NULL;
+	}
 
-     // Extract the VERTEXes from the Points.
+      // Extract the VERTEXes from the Points.
 
-     // Cast the Points to  PointACIS
-   PointACIS* pointACIS_ptr1 = CAST_TO(const_cast<Point*>(point1_ptr), PointACIS) ;
-   PointACIS* pointACIS_ptr2 = CAST_TO(const_cast<Point*>(point2_ptr), PointACIS) ;
+      // Cast the Points to  PointACIS
+      PointACIS* pointACIS_ptr1 = CAST_TO(const_cast<Point*>(point1_ptr), PointACIS) ;
+      PointACIS* pointACIS_ptr2 = CAST_TO(const_cast<Point*>(point2_ptr), PointACIS) ;
 
-     // Make sure that we don't get NULL pointers after the cast down.
-   assert ( pointACIS_ptr1 != NULL && pointACIS_ptr2 != NULL ) ;
+      // Make sure that we don't get NULL pointers after the cast down.
+      assert ( pointACIS_ptr1 != NULL && pointACIS_ptr2 != NULL ) ;
 
-     // Get a reference to the VERTEX list of the PointACIS
-   VERTEX* VERTEX_ptr1 = pointACIS_ptr1->get_VERTEX_ptr();
-   VERTEX* VERTEX_ptr2 = pointACIS_ptr2->get_VERTEX_ptr();
+      // Get a reference to the VERTEX list of the PointACIS
+      VERTEX* VERTEX_ptr1 = pointACIS_ptr1->get_VERTEX_ptr();
+      VERTEX* VERTEX_ptr2 = pointACIS_ptr2->get_VERTEX_ptr();
 
-     // Convert the list of CubitVectors into an array of ACIS position's.
-     // MJP NOTE:
-     // Add the positions of the 2 end VERTEX'es into this list.
-   int number_points = vector_list.size();
-   vector_list.reset();
-   CubitVector* vector_ptr = NULL, on_surf;
-   SPAposition* pos_array = new SPAposition [number_points];
+      // Convert the list of CubitVectors into an array of ACIS position's.
+      // MJP NOTE:
+      // Add the positions of the 2 end VERTEX'es into this list.
+      int number_points = vector_list.size();
+      vector_list.reset();
+      CubitVector* vector_ptr = NULL, on_surf;
+      SPAposition* pos_array = new SPAposition [number_points];
 
-     // Do the vector_list of points
-   for (int i = 0; i < number_points; i++)
-   {
-      vector_ptr = vector_list.get_and_step();
+      // Do the vector_list of points
+      for (int i = 0; i < number_points; i++)
+	{
+	  vector_ptr = vector_list.get_and_step();
 
-        // If the input RefFace pointer is not NULL, then move this point
-        // to the surface of the RefFace
-      if (ref_face_ptr != NULL)
-      {
-         ref_face_ptr->closest_point(*vector_ptr, &on_surf);
-         *vector_ptr = on_surf;
-         //ref_face_ptr->move_to_surface(*vector_ptr);
-      }
+	  // If the input RefFace pointer is not NULL, then move this point
+	  // to the surface of the RefFace
+	  if (ref_face_ptr != NULL)
+	    {
+	      ref_face_ptr->closest_point(*vector_ptr, &on_surf);
+	      *vector_ptr = on_surf;
+	      //ref_face_ptr->move_to_surface(*vector_ptr);
+	    }
 
-        // Set the coordinates of the SPAposition object
-      pos_array[i].set_x(vector_ptr->x());
-      pos_array[i].set_y(vector_ptr->y());
-      pos_array[i].set_z(vector_ptr->z());
-   }
+	  // Set the coordinates of the SPAposition object
+	  pos_array[i].set_x(vector_ptr->x());
+	  pos_array[i].set_y(vector_ptr->y());
+	  pos_array[i].set_z(vector_ptr->z());
+	}
 
-     // Use the VERTEXes and the SPAposition array to make a new EDGE
-   EDGE* EDGE_ptr = this->make_spline_EDGE( VERTEX_ptr1,
-                                            VERTEX_ptr2,
-                                            pos_array,
-                                            number_points );
-     // Free memory
-   delete [] pos_array;
+      // Use the VERTEXes and the SPAposition array to make a new EDGE
+      EDGE* EDGE_ptr = this->make_spline_EDGE( VERTEX_ptr1,
+					       VERTEX_ptr2,
+					       pos_array,
+					       number_points );
+      // Free memory
+      delete [] pos_array;
 
-   if ( EDGE_ptr == NULL )
-   {
-      PRINT_ERROR("In AcisModifyEngine::make_Curve\n"
-                  "       Cannot make Curve object.\n");
-      return (Curve *)NULL;
-   }
+      if ( EDGE_ptr == NULL )
+	{
+	  PRINT_ERROR("In AcisModifyEngine::make_Curve\n"
+		      "       Cannot make Curve object.\n");
+	  return (Curve *)NULL;
+	}
 
-   return AcisQueryEngine::instance()->populate_topology_bridges(EDGE_ptr);
-}
+      return AcisQueryEngine::instance()->populate_topology_bridges(EDGE_ptr);
+    }
 
-//-------------------------------------------------------------------------
-// Purpose       : This function creats a curve that is on a
-//                 given surface.  The third point is used
-//                 for curves that could be periodic to dertermine
-//                 the correct direction.
-//
-//
-// Creator       : David White
-//
-// Creation Date : 10/21/97
-//-------------------------------------------------------------------------
-Curve* AcisModifyEngine::make_Curve( Point const* point1_ptr,
-                                     Point const* point2_ptr,
-                                     Surface* ref_face_ptr,
-                                     const CubitVector *third_point) const
+  //-------------------------------------------------------------------------
+  // Purpose       : This function creats a curve that is on a
+  //                 given surface.  The third point is used
+  //                 for curves that could be periodic to dertermine
+  //                 the correct direction.
+  //
+  //
+  // Creator       : David White
+  //
+  // Creation Date : 10/21/97
+  //-------------------------------------------------------------------------
+  Curve* AcisModifyEngine::make_Curve( Point const* point1_ptr,
+				       Point const* point2_ptr,
+				       Surface* ref_face_ptr,
+				       const CubitVector *third_point) const
 
-{
-   CubitVector point_1 = point1_ptr->coordinates();
-   CubitVector point_2 = point2_ptr->coordinates();
-   CubitVector surf_norm;
-   ref_face_ptr->closest_point( point_1, NULL, &surf_norm );
+    {
+      CubitVector point_1 = point1_ptr->coordinates();
+      CubitVector point_2 = point2_ptr->coordinates();
+      CubitVector surf_norm;
+      ref_face_ptr->closest_point( point_1, NULL, &surf_norm );
 
-   CubitVector plane_norm;
+      CubitVector plane_norm;
 
-   CubitVector edge0 = point_2 - point_1;
-   CubitVector edge1 = surf_norm;
-   plane_norm = edge0*edge1;
-   if ( plane_norm.length() < CUBIT_RESABS )
-   {
-        //try using the normal at point 2.
-      ref_face_ptr->closest_point(point_2, NULL, &surf_norm);
-      edge1 = surf_norm;
-      edge0 = point_1 - point_2;
+      CubitVector edge0 = point_2 - point_1;
+      CubitVector edge1 = surf_norm;
       plane_norm = edge0*edge1;
       if ( plane_norm.length() < CUBIT_RESABS )
-      {
-         if ( third_point == NULL )
-         {
-            PRINT_ERROR("Can't create curve on surface.\n"
-                        "\tVertices are on opposite sides of surface.\n"
-                        "\tUnable to infer a plane that will cut the surface.\n"
-                        "\tTry specifying a 3rd vertex in the new curve.\n");
-            return (Curve*)NULL;
-         }
-         else
-         {
-             // Try getting a normal from the third point
-           edge0 = point_1 - *third_point;
-           plane_norm = edge0*edge1;
-           if ( plane_norm.length() < CUBIT_RESABS )
-           {
-             PRINT_ERROR("Can't create curve on surface.\n"
-                         "\tVertices are on opposite sides of surface\n"
-                         "\tand all three points are colinear.\n"
-                         "\tTry specifying a non-colinear 3rd vertex.\n");
-             return (Curve*)NULL;
-           }
-         }
-      }
-   }
-   plane_norm.normalize();
-     // Extract the VERTEXes from the Points.
+	{
+	  //try using the normal at point 2.
+	  ref_face_ptr->closest_point(point_2, NULL, &surf_norm);
+	  edge1 = surf_norm;
+	  edge0 = point_1 - point_2;
+	  plane_norm = edge0*edge1;
+	  if ( plane_norm.length() < CUBIT_RESABS )
+	    {
+	      if ( third_point == NULL )
+		{
+		  PRINT_ERROR("Can't create curve on surface.\n"
+			      "\tVertices are on opposite sides of surface.\n"
+			      "\tUnable to infer a plane that will cut the surface.\n"
+			      "\tTry specifying a 3rd vertex in the new curve.\n");
+		  return (Curve*)NULL;
+		}
+	      else
+		{
+		  // Try getting a normal from the third point
+		  edge0 = point_1 - *third_point;
+		  plane_norm = edge0*edge1;
+		  if ( plane_norm.length() < CUBIT_RESABS )
+		    {
+		      PRINT_ERROR("Can't create curve on surface.\n"
+				  "\tVertices are on opposite sides of surface\n"
+				  "\tand all three points are colinear.\n"
+				  "\tTry specifying a non-colinear 3rd vertex.\n");
+		      return (Curve*)NULL;
+		    }
+		}
+	    }
+	}
+      plane_norm.normalize();
+      // Extract the VERTEXes from the Points.
 
-     // Cast the Points to  PointACIS
-   PointACIS* pointACIS_ptr1 = CAST_TO(const_cast<Point*>(point1_ptr), PointACIS) ;
-   PointACIS* pointACIS_ptr2 = CAST_TO(const_cast<Point*>(point2_ptr), PointACIS) ;
+      // Cast the Points to  PointACIS
+      PointACIS* pointACIS_ptr1 = CAST_TO(const_cast<Point*>(point1_ptr), PointACIS) ;
+      PointACIS* pointACIS_ptr2 = CAST_TO(const_cast<Point*>(point2_ptr), PointACIS) ;
 
-     // Make sure that we don't get NULL pointers after the cast down.
-   assert ( pointACIS_ptr1 != NULL && pointACIS_ptr2 != NULL ) ;
+      // Make sure that we don't get NULL pointers after the cast down.
+      assert ( pointACIS_ptr1 != NULL && pointACIS_ptr2 != NULL ) ;
 
-     // Get a reference to the VERTEX list of the PointACIS
-   VERTEX* VERTEX_ptr1 = pointACIS_ptr1->get_VERTEX_ptr();
-   VERTEX* VERTEX_ptr2 = pointACIS_ptr2->get_VERTEX_ptr();
+      // Get a reference to the VERTEX list of the PointACIS
+      VERTEX* VERTEX_ptr1 = pointACIS_ptr1->get_VERTEX_ptr();
+      VERTEX* VERTEX_ptr2 = pointACIS_ptr2->get_VERTEX_ptr();
 
-   FACE *FACE_ptr = CAST_TO(ref_face_ptr, SurfaceACIS )->get_FACE_ptr();
-     //now using the points, vertices, FACE and plane normal,
-     //creat an edge.
-   EDGE* EDGE_ptr = this->make_surface_EDGE( VERTEX_ptr1,
-                                             VERTEX_ptr2,
-                                             FACE_ptr,
-                                             plane_norm,
-                                             third_point);
-     // Free memory
-   if ( EDGE_ptr == NULL )
-   {
-     PRINT_ERROR("In AcisModifyEngine::make_Curve\n"
-                 "       Cannot make Curve object.\n");
-     return (Curve *)NULL;
-   }
+      FACE *FACE_ptr = CAST_TO(ref_face_ptr, SurfaceACIS )->get_FACE_ptr();
+      //now using the points, vertices, FACE and plane normal,
+      //creat an edge.
+      EDGE* EDGE_ptr = this->make_surface_EDGE( VERTEX_ptr1,
+						VERTEX_ptr2,
+						FACE_ptr,
+						plane_norm,
+						third_point);
+      // Free memory
+      if ( EDGE_ptr == NULL )
+	{
+	  PRINT_ERROR("In AcisModifyEngine::make_Curve\n"
+		      "       Cannot make Curve object.\n");
+	  return (Curve *)NULL;
+	}
 
-   return AcisQueryEngine::instance()->populate_topology_bridges(EDGE_ptr);
-}
+      return AcisQueryEngine::instance()->populate_topology_bridges(EDGE_ptr);
+    }
 
-//-------------------------------------------------------------------------
-// Purpose       : Create a surface given a surface. From another surface
-//
-// Special Notes :
-//
-// Creator       : David White
-//
-// Creation Date : 10/6/97
-//-------------------------------------------------------------------------
+  //-------------------------------------------------------------------------
+  // Purpose       : Create a surface given a surface. From another surface
+  //
+  // Special Notes :
+  //
+  // Creator       : David White
+  //
+  // Creation Date : 10/6/97
+  //-------------------------------------------------------------------------
 
-Surface* AcisModifyEngine::make_Surface( Surface *old_surface_ptr,
+  Surface* AcisModifyEngine::make_Surface( Surface *old_surface_ptr,
                                            bool extended_from) const
-{
-     //Get the surface ACIS.
-   SurfaceACIS *surf_ACIS = CAST_TO(old_surface_ptr, SurfaceACIS );
-   if (surf_ACIS == NULL)
-   {
-      PRINT_ERROR("surface is not created from acis.\n");
-      return (Surface*) NULL;
-   }
+    {
+      //Get the surface ACIS.
+      SurfaceACIS *surf_ACIS = CAST_TO(old_surface_ptr, SurfaceACIS );
+      if (surf_ACIS == NULL)
+	{
+	  PRINT_ERROR("surface is not created from acis.\n");
+	  return (Surface*) NULL;
+	}
 
-     //Get the acis face.
-   FACE *FACE_ptr = surf_ACIS->get_FACE_ptr();
+      //Get the acis face.
+      FACE *FACE_ptr = surf_ACIS->get_FACE_ptr();
 
-     //use this to make a FACE.
-   if (FACE_ptr == NULL )
-   {
-     PRINT_ERROR("surface is not created from acis.\n");
-     return (Surface*) NULL;
-   }
-   FACE *new_FACE_ptr = NULL;
+      //use this to make a FACE.
+      if (FACE_ptr == NULL )
+	{
+	  PRINT_ERROR("surface is not created from acis.\n");
+	  return (Surface*) NULL;
+	}
+      FACE *new_FACE_ptr = NULL;
 
-   new_FACE_ptr = make_FACE( FACE_ptr, extended_from );
-   if (new_FACE_ptr == NULL)
-   {
-     PRINT_ERROR("In AcisModifyEngine::make_Surface\n"
-                 "       Cannot make Surface object.\n");
-     return (Surface *)NULL;
-   }
+      new_FACE_ptr = make_FACE( FACE_ptr, extended_from );
+      if (new_FACE_ptr == NULL)
+	{
+	  PRINT_ERROR("In AcisModifyEngine::make_Surface\n"
+		      "       Cannot make Surface object.\n");
+	  return (Surface *)NULL;
+	}
 
-   //populate the bridges from the body
-   BODY *body_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(new_FACE_ptr);
-   BodySM *body_sm = AcisQueryEngine::instance()->populate_topology_bridges( body_ptr );
-   DLIList<Surface*> surfs;
-   body_sm->surfaces( surfs );
-   Surface *surface = surfs.get();
+      //populate the bridges from the body
+      BODY *body_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(new_FACE_ptr);
+      BodySM *body_sm = AcisQueryEngine::instance()->populate_topology_bridges( body_ptr );
+      DLIList<Surface*> surfs;
+      body_sm->surfaces( surfs );
+      Surface *surface = surfs.get();
 
-   return surface;
+      return surface;
 
-}
+    }
 
-//-------------------------------------------------------------------------
-// Purpose       : This function creates a Surface of type,
-//                 surface_type, given the list of curves.
-//
-// Special Notes :
-//
-// Creator       : Raikanta Sahu
-//
-// Creation Date : 03/29/97
-//-------------------------------------------------------------------------
-Surface* AcisModifyEngine::make_Surface( GeometryType surface_type,
+  //-------------------------------------------------------------------------
+  // Purpose       : This function creates a Surface of type,
+  //                 surface_type, given the list of curves.
+  //
+  // Special Notes :
+  //
+  // Creator       : Raikanta Sahu
+  //
+  // Creation Date : 03/29/97
+  //-------------------------------------------------------------------------
+  Surface* AcisModifyEngine::make_Surface( GeometryType surface_type,
                                            DLIList<Curve*>& curve_list,
                                            Surface *old_surface_ptr,
                                            bool check_edges ) const
-{
-  DLIList<RefEdge*> copied_ref_edges;
-  int i;
-  if( check_edges )
-  {
-    DLIList<RefEdge*> edge_list;
-    for( i=curve_list.size(); i--; )
     {
-      RefEdge *tmp_ref_edge = NULL;
-      tmp_ref_edge = CAST_TO( curve_list.get_and_step()->topology_entity(), RefEdge );
-      if( tmp_ref_edge )
-        edge_list.append( tmp_ref_edge );
-    }
+      DLIList<RefEdge*> copied_ref_edges;
+      int i;
+      if( check_edges )
+	{
+	  DLIList<RefEdge*> edge_list;
+	  for( i=curve_list.size(); i--; )
+	    {
+	      RefEdge *tmp_ref_edge = NULL;
+	      tmp_ref_edge = CAST_TO( curve_list.get_and_step()->topology_entity(), RefEdge );
+	      if( tmp_ref_edge )
+		edge_list.append( tmp_ref_edge );
+	    }
 
-    //duplicate curves possibly
+	  //duplicate curves possibly
 
-    //Modified by J.K. to avoid core dump if vertices are merged.
-    //If vertices belong to edges other than those we are creating
-    //the surface from, copy the corresponding edges.  This will
-    //also pick up the case where edges already belong to a face.
-    DLIList<RefEdge*> vtx_edges;
-    DLIList<RefVertex*> vtx_list;
-    for ( i = edge_list.size(); i > 0; i-- )
-    {
-      RefEdge *ref_edge = edge_list.get();
+	  //Modified by J.K. to avoid core dump if vertices are merged.
+	  //If vertices belong to edges other than those we are creating
+	  //the surface from, copy the corresponding edges.  This will
+	  //also pick up the case where edges already belong to a face.
+	  DLIList<RefEdge*> vtx_edges;
+	  DLIList<RefVertex*> vtx_list;
+	  for ( i = edge_list.size(); i > 0; i-- )
+	    {
+	      RefEdge *ref_edge = edge_list.get();
 
-      CubitBoolean other_edge = CUBIT_FALSE;
-      ref_edge->ref_vertices(vtx_list);
-      while( vtx_list.size() )
-      {
-        vtx_edges.clean_out();
-        vtx_list.pop()->ref_edges( vtx_edges );
-        while( vtx_edges.size() )
-        {
-          if( ! edge_list.is_in_list( vtx_edges.pop() ) )
-          {
-            other_edge = CUBIT_TRUE;
-            vtx_list.clean_out();
-            break;
-          }
-        }
-      }
+	      CubitBoolean other_edge = CUBIT_FALSE;
+	      ref_edge->ref_vertices(vtx_list);
+	      while( vtx_list.size() )
+		{
+		  vtx_edges.clean_out();
+		  vtx_list.pop()->ref_edges( vtx_edges );
+		  while( vtx_edges.size() )
+		    {
+		      if( ! edge_list.is_in_list( vtx_edges.pop() ) )
+			{
+			  other_edge = CUBIT_TRUE;
+			  vtx_list.clean_out();
+			  break;
+			}
+		    }
+		}
 
-      if ( other_edge || (ref_edge->get_parents() > 0) )
-      {
-        RefEdge *replacement_edge = GeometryModifyTool::instance()->make_RefEdge( ref_edge );
-        if (!replacement_edge)
-        {
-          PRINT_WARNING("Creation of Surface Unsuccessful\n");
-          return (Surface *)NULL;
-        }
-        edge_list.change_to( replacement_edge );
-        copied_ref_edges.append( replacement_edge );
-      }
-      edge_list.step();
-    }
+	      if ( other_edge || (ref_edge->get_parents() > 0) )
+		{
+		  RefEdge *replacement_edge = GeometryModifyTool::instance()->make_RefEdge( ref_edge );
+		  if (!replacement_edge)
+		    {
+		      PRINT_WARNING("Creation of Surface Unsuccessful\n");
+		      return (Surface *)NULL;
+		    }
+		  edge_list.change_to( replacement_edge );
+		  copied_ref_edges.append( replacement_edge );
+		}
+	      edge_list.step();
+	    }
 
-    curve_list.clean_out();
-    for( i=edge_list.size(); i--; )
-    {
-      Curve *tmp_curve = NULL;
-      tmp_curve =
-      CAST_TO( edge_list.get_and_step()->bridge_manager()->topology_bridge(), Curve);
-      if( tmp_curve )
-        curve_list.append( tmp_curve );
-    }
-  }
+	  curve_list.clean_out();
+	  for( i=edge_list.size(); i--; )
+	    {
+	      Curve *tmp_curve = NULL;
+	      tmp_curve =
+		CAST_TO( edge_list.get_and_step()->bridge_manager()->topology_bridge(), Curve);
+	      if( tmp_curve )
+		curve_list.append( tmp_curve );
+	    }
+	}
 
-   DLIList<EDGE*> EDGE_list ;
-     // List of EDGEs to use to create the FACE from which we can make
-     // a SurfaceACIS.
+      DLIList<EDGE*> EDGE_list ;
+      // List of EDGEs to use to create the FACE from which we can make
+      // a SurfaceACIS.
 
-     // Extract the EDGEs from the given Curves
-   Curve const* curve_ptr = NULL ;
-   CurveACIS* curveACIS_ptr = NULL ;
-   EDGE* EDGE_ptr = NULL ;
+      // Extract the EDGEs from the given Curves
+      Curve const* curve_ptr = NULL ;
+      CurveACIS* curveACIS_ptr = NULL ;
+      EDGE* EDGE_ptr = NULL ;
 
-   curve_list.reset() ;
+      curve_list.reset() ;
 
 
-   for ( i = 0 ; i < curve_list.size() ; i++ )
-   {
-      curve_ptr = curve_list.get_and_step() ;
-      curveACIS_ptr = CAST_TO(const_cast<Curve*>(curve_ptr), CurveACIS) ;
+      for ( i = 0 ; i < curve_list.size() ; i++ )
+	{
+	  curve_ptr = curve_list.get_and_step() ;
+	  curveACIS_ptr = CAST_TO(const_cast<Curve*>(curve_ptr), CurveACIS) ;
 
-      // Make sure that we don't get NULL pointers after the cast down.
-      if ( curveACIS_ptr == NULL )
-      {
-         PRINT_ERROR("In AcisModifyEngine::make_Surface\n"
-                     "       Got a NULL pointer to CurveACIS\n") ;
-         assert ( curveACIS_ptr != NULL ) ;
-      }
+	  // Make sure that we don't get NULL pointers after the cast down.
+	  if ( curveACIS_ptr == NULL )
+	    {
+	      PRINT_ERROR("In AcisModifyEngine::make_Surface\n"
+			  "       Got a NULL pointer to CurveACIS\n") ;
+	      assert ( curveACIS_ptr != NULL ) ;
+	    }
 
-        // Get the EDGE
-      EDGE_ptr = curveACIS_ptr->get_EDGE_ptr() ;
+	  // Get the EDGE
+	  EDGE_ptr = curveACIS_ptr->get_EDGE_ptr() ;
 
-        // Add the EDGE to the list of EDGEs to be used to make a FACE
-      EDGE_list.append(EDGE_ptr) ;
-   }
+	  // Add the EDGE to the list of EDGEs to be used to make a FACE
+	  EDGE_list.append(EDGE_ptr) ;
+	}
 
-     // Use the EDGEs to make a FACE
-   FACE* FACE_ptr = this->make_FACE(surface_type, EDGE_list,
-                                    old_surface_ptr) ;
+      // Use the EDGEs to make a FACE
+      FACE* FACE_ptr = this->make_FACE(surface_type, EDGE_list,
+				       old_surface_ptr) ;
 
-   if (FACE_ptr == NULL)
-   {
-     //delete all the copied ref edges...copied just for creating this surface
-     for(i=copied_ref_edges.size(); i--; )
-       GeometryQueryTool::instance()->delete_RefEdge( copied_ref_edges.get_and_step() );
+      if (FACE_ptr == NULL)
+	{
+	  //delete all the copied ref edges...copied just for creating this surface
+	  for(i=copied_ref_edges.size(); i--; )
+	    GeometryQueryTool::instance()->delete_RefEdge( copied_ref_edges.get_and_step() );
 
-     PRINT_ERROR("In AcisModifyEngine::make_Surface\n"
-                  "       Cannot make Surface object.\n");
-     return (Surface *)NULL;
-   }
+	  PRINT_ERROR("In AcisModifyEngine::make_Surface\n"
+		      "       Cannot make Surface object.\n");
+	  return (Surface *)NULL;
+	}
 
-     // make the topology bridges for the face
-   Surface *surface = AcisQueryEngine::instance()->populate_topology_bridges(FACE_ptr);
-   return surface;
+      // make the topology bridges for the face
+      Surface *surface = AcisQueryEngine::instance()->populate_topology_bridges(FACE_ptr);
+      return surface;
 
-/*
+      /*
 
-     // now generate the body
-   DLIList<BODY*> new_BODIES;
-   DLIList<Body*> new_bodies;
-   new_BODIES.append(AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr));
-   CubitStatus success = get_new_Body(old_entities,
-                                      new_BODIES, new_bodies, CUBIT_FALSE);
+      // now generate the body
+      DLIList<BODY*> new_BODIES;
+      DLIList<Body*> new_bodies;
+      new_BODIES.append(AcisQueryEngine::instance()->get_BODY_of_ENTITY(FACE_ptr));
+      CubitStatus success = get_new_Body(old_entities,
+      new_BODIES, new_bodies, CUBIT_FALSE);
 
-   AcisBridge *tb_ptr = ATTRIB_CUBIT_OWNER::cubit_owner(FACE_ptr);
-   return CAST_TO(tb_ptr, Surface);
-*/
-}
+      AcisBridge *tb_ptr = ATTRIB_CUBIT_OWNER::cubit_owner(FACE_ptr);
+      return CAST_TO(tb_ptr, Surface);
+      */
+    }
 
-//-------------------------------------------------------------------------
-// Purpose       : This function creates a Lump of type, lump_type,
-//                 given the list of surfaces.
-//
-// Special Notes :
-//
-// Creator       : Raikanta Sahu
-//
-// Creation Date : 03/29/97
-//-------------------------------------------------------------------------
+  //-------------------------------------------------------------------------
+  // Purpose       : This function creates a Lump of type, lump_type,
+  //                 given the list of surfaces.
+  //
+  // Special Notes :
+  //
+  // Creator       : Raikanta Sahu
+  //
+  // Creation Date : 03/29/97
+  //-------------------------------------------------------------------------
 
-Lump* AcisModifyEngine::make_Lump( DLIList<Surface*>& surface_list ) const
-{
-     // Extract the FACEs of the surface list. Use the FACEs to
-     // create a SHELL.
-   Surface const* surface_ptr = NULL ;
-   SurfaceACIS* surfaceACIS_ptr = NULL ;
-   FACE* first_FACE_ptr = NULL ;
-   FACE* current_FACE_ptr = NULL ;
-   FACE* previous_FACE_ptr = NULL ;
+  Lump* AcisModifyEngine::make_Lump( DLIList<Surface*>& surface_list ) const
+    {
+      // Extract the FACEs of the surface list. Use the FACEs to
+      // create a SHELL.
+      Surface const* surface_ptr = NULL ;
+      SurfaceACIS* surfaceACIS_ptr = NULL ;
+      FACE* first_FACE_ptr = NULL ;
+      FACE* current_FACE_ptr = NULL ;
+      FACE* previous_FACE_ptr = NULL ;
 
-   surface_list.reset() ;
-   for ( int i = 0 ; i < surface_list.size() ; i++ )
-   {
-      surface_ptr = surface_list.get_and_step() ;
-      surfaceACIS_ptr = CAST_TO(const_cast<Surface*>(surface_ptr), SurfaceACIS) ;
+      surface_list.reset() ;
+      for ( int i = 0 ; i < surface_list.size() ; i++ )
+	{
+	  surface_ptr = surface_list.get_and_step() ;
+	  surfaceACIS_ptr = CAST_TO(const_cast<Surface*>(surface_ptr), SurfaceACIS) ;
 
-        // Make sure that we have a valid SurfaceACIS pointer
-      if ( surfaceACIS_ptr == NULL )
-      {
-         PRINT_ERROR("In AcisModifyEngine::make_Lump\n"
-                     "       Got a NULL pointer to SurfaceACIS\n") ;
-         assert ( surfaceACIS_ptr != NULL ) ;
-      }
+	  // Make sure that we have a valid SurfaceACIS pointer
+	  if ( surfaceACIS_ptr == NULL )
+	    {
+	      PRINT_ERROR("In AcisModifyEngine::make_Lump\n"
+			  "       Got a NULL pointer to SurfaceACIS\n") ;
+	      assert ( surfaceACIS_ptr != NULL ) ;
+	    }
 
-      current_FACE_ptr = surfaceACIS_ptr->get_FACE_ptr();
+	  current_FACE_ptr = surfaceACIS_ptr->get_FACE_ptr();
 
-        // Connect up the previous FACE and the current FACE if
-        // the current FACE is not the first FACE.
-      if ( previous_FACE_ptr != NULL )
-      {
-         previous_FACE_ptr->set_next(current_FACE_ptr) ;
-      }
-      else
-      {
-         first_FACE_ptr = current_FACE_ptr ;
-      }
+	  // Connect up the previous FACE and the current FACE if
+	  // the current FACE is not the first FACE.
+	  if ( previous_FACE_ptr != NULL )
+	    {
+	      previous_FACE_ptr->set_next(current_FACE_ptr) ;
+	    }
+	  else
+	    {
+	      first_FACE_ptr = current_FACE_ptr ;
+	    }
 
-      previous_FACE_ptr = current_FACE_ptr ;
-   }
+	  previous_FACE_ptr = current_FACE_ptr ;
+	}
 
-     // Create a new SHELL if the first FACE is not attached to
-     // a SHELL.
-   SHELL* SHELL_ptr = first_FACE_ptr->shell() ;
-   if ( SHELL_ptr == NULL )
-   {
-      SHELL_ptr = new SHELL(first_FACE_ptr, NULL, NULL) ;
+      // Create a new SHELL if the first FACE is not attached to
+      // a SHELL.
+      SHELL* SHELL_ptr = first_FACE_ptr->shell() ;
       if ( SHELL_ptr == NULL )
-      {
-         PRINT_ERROR("In AcisModifyEngine::make_Lump\n"
-                     "       ACIS cannot make SHELL object.\n"
-                     "       Cannot make Lump object.\n");
-         return (Lump *)NULL;
-      }
-   }
+	{
+	  SHELL_ptr = new SHELL(first_FACE_ptr, NULL, NULL) ;
+	  if ( SHELL_ptr == NULL )
+	    {
+	      PRINT_ERROR("In AcisModifyEngine::make_Lump\n"
+			  "       ACIS cannot make SHELL object.\n"
+			  "       Cannot make Lump object.\n");
+	      return (Lump *)NULL;
+	    }
+	}
 
-     // Create a new LUMP and attach the SHELL to it.
-   LUMP* LUMP_ptr = SHELL_ptr->lump();
-   if (LUMP_ptr == NULL)
-   {
-      LUMP_ptr = new LUMP(SHELL_ptr, NULL) ;
-      if ( LUMP_ptr == NULL )
-      {
-         PRINT_ERROR("In AcisModifyEngine::make_Lump\n"
-                     "       ACIS cannot make LUMP object.\n"
-                     "       Cannot make Lump object.\n");
-         return (Lump *)NULL;
-      }
-   }
+      // Create a new LUMP and attach the SHELL to it.
+      LUMP* LUMP_ptr = SHELL_ptr->lump();
+      if (LUMP_ptr == NULL)
+	{
+	  LUMP_ptr = new LUMP(SHELL_ptr, NULL) ;
+	  if ( LUMP_ptr == NULL )
+	    {
+	      PRINT_ERROR("In AcisModifyEngine::make_Lump\n"
+			  "       ACIS cannot make LUMP object.\n"
+			  "       Cannot make Lump object.\n");
+	      return (Lump *)NULL;
+	    }
+	}
 
-     // Create a LumpACIS using the LUMP_ptr
-   LumpACIS* lumpACIS_ptr = new LumpACIS(LUMP_ptr) ;
-   assert( lumpACIS_ptr != NULL );
+      // Create a LumpACIS using the LUMP_ptr
+      LumpACIS* lumpACIS_ptr = new LumpACIS(LUMP_ptr) ;
+      assert( lumpACIS_ptr != NULL );
 
-   AcisQueryEngine::instance()->populate_topology_bridges(LUMP_ptr);
-/*
-   AcisBridge *tb_ptr = ATTRIB_CUBIT_OWNER::cubit_owner(LUMP_ptr);
+      AcisQueryEngine::instance()->populate_topology_bridges(LUMP_ptr);
+      /*
+	AcisBridge *tb_ptr = ATTRIB_CUBIT_OWNER::cubit_owner(LUMP_ptr);
 
-   Lump *this_lump = CAST_TO(tb_ptr, Lump);
-   ShellSM *shellsm = this_lump->shellsm();
+	Lump *this_lump = CAST_TO(tb_ptr, Lump);
+	ShellSM *shellsm = this_lump->shellsm();
 
-     // Use the SHELL to build VGI Shell and CoFace, using 0 for color
-   Shell* Shell_ptr = GeometryQueryTool::instance()->make_Shell(shellsm) ;
+	// Use the SHELL to build VGI Shell and CoFace, using 0 for color
+	Shell* Shell_ptr = GeometryQueryTool::instance()->make_Shell(shellsm) ;
 
-   if (Shell_ptr == NULL)
-   {
-      PRINT_ERROR("In AcisModifyEngine::make_Lump\n"
-                  "       Could not build a Shell for unknown reasons.\n");
-      return (Lump *)NULL;
-   }
-*/
-     // Return the new LumpACIS
-   return lumpACIS_ptr ;
-}
+	if (Shell_ptr == NULL)
+	{
+	PRINT_ERROR("In AcisModifyEngine::make_Lump\n"
+	"       Could not build a Shell for unknown reasons.\n");
+	return (Lump *)NULL;
+	}
+      */
+      // Return the new LumpACIS
+      return lumpACIS_ptr ;
+    }
 
-BodySM* AcisModifyEngine::make_BodySM( Surface *surface_ptr) const
-{
-    //- given a Surface, make a BodySM
-    // make sure this Surface is the right type
-  SurfaceACIS *sa_ptr = CAST_TO(surface_ptr, SurfaceACIS);
-  assert(sa_ptr != 0);
+  BodySM* AcisModifyEngine::make_BodySM( Surface *surface_ptr) const
+    {
+      //- given a Surface, make a BodySM
+      // make sure this Surface is the right type
+      SurfaceACIS *sa_ptr = CAST_TO(surface_ptr, SurfaceACIS);
+      assert(sa_ptr != 0);
 
-    // now, get the acis BODY and populate the topology bridges
-  FACE *face = sa_ptr->get_FACE_ptr();
-  BODY *body_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(face);
+      // now, get the acis BODY and populate the topology bridges
+      FACE *face = sa_ptr->get_FACE_ptr();
+      BODY *body_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(face);
 
-  return AcisQueryEngine::instance()->populate_topology_bridges(body_ptr);
-}
+      return AcisQueryEngine::instance()->populate_topology_bridges(body_ptr);
+    }
 
-//-------------------------------------------------------------------------
-// Purpose       : This function creates a BodySM given a list of Lumps.
-//
-// Special Notes :
-//
-// Creator       : Raikanta Sahu
-//
-// Creation Date : 03/29/97
-//-------------------------------------------------------------------------
+  //-------------------------------------------------------------------------
+  // Purpose       : This function creates a BodySM given a list of Lumps.
+  //
+  // Special Notes :
+  //
+  // Creator       : Raikanta Sahu
+  //
+  // Creation Date : 03/29/97
+  //-------------------------------------------------------------------------
 
-BodySM* AcisModifyEngine::make_BodySM( DLIList<Lump*>& lump_list ) const
-{
-     // Extract the LUMPs of the lump list. Use the LUMPs to
-     // create a BODY.
-   Lump const* lump_ptr = NULL ;
-   LumpACIS* lumpACIS_ptr = NULL ;
-   LUMP* first_LUMP_ptr = NULL ;
-   LUMP* current_LUMP_ptr = NULL ;
-   LUMP* previous_LUMP_ptr = NULL ;
+  BodySM* AcisModifyEngine::make_BodySM( DLIList<Lump*>& lump_list ) const
+    {
+      // Extract the LUMPs of the lump list. Use the LUMPs to
+      // create a BODY.
+      Lump const* lump_ptr = NULL ;
+      LumpACIS* lumpACIS_ptr = NULL ;
+      LUMP* first_LUMP_ptr = NULL ;
+      LUMP* current_LUMP_ptr = NULL ;
+      LUMP* previous_LUMP_ptr = NULL ;
 
-   lump_list.reset() ;
-   for ( int i = 0 ; i < lump_list.size() ; i++ )
-   {
-      lump_ptr = lump_list.get_and_step() ;
-      lumpACIS_ptr = CAST_TO(const_cast<Lump*>(lump_ptr), LumpACIS) ;
+      lump_list.reset() ;
+      for ( int i = 0 ; i < lump_list.size() ; i++ )
+	{
+	  lump_ptr = lump_list.get_and_step() ;
+	  lumpACIS_ptr = CAST_TO(const_cast<Lump*>(lump_ptr), LumpACIS) ;
 
-        // Make sure that we have a valid LumpACIS pointer
-      if ( lumpACIS_ptr == NULL )
-      {
-         PRINT_ERROR("In AcisModifyEngine::make_Lump\n"
-                     "       Input Lump is not a LumpACIS\n") ;
-         assert ( lumpACIS_ptr != NULL ) ;
-      }
+	  // Make sure that we have a valid LumpACIS pointer
+	  if ( lumpACIS_ptr == NULL )
+	    {
+	      PRINT_ERROR("In AcisModifyEngine::make_Lump\n"
+			  "       Input Lump is not a LumpACIS\n") ;
+	      assert ( lumpACIS_ptr != NULL ) ;
+	    }
 
-      current_LUMP_ptr = lumpACIS_ptr->get_LUMP_ptr();
+	  current_LUMP_ptr = lumpACIS_ptr->get_LUMP_ptr();
 
-        // Connect up the previous LUMP and the current LUMP if
-        // the current LUMP is not the first LUMP.
-      if ( previous_LUMP_ptr != NULL )
-      {
-         previous_LUMP_ptr->set_next(current_LUMP_ptr) ;
-      }
-      else
-      {
-         first_LUMP_ptr = current_LUMP_ptr ;
-      }
+	  // Connect up the previous LUMP and the current LUMP if
+	  // the current LUMP is not the first LUMP.
+	  if ( previous_LUMP_ptr != NULL )
+	    {
+	      previous_LUMP_ptr->set_next(current_LUMP_ptr) ;
+	    }
+	  else
+	    {
+	      first_LUMP_ptr = current_LUMP_ptr ;
+	    }
 
-      previous_LUMP_ptr = current_LUMP_ptr ;
-   }
+	  previous_LUMP_ptr = current_LUMP_ptr ;
+	}
 
-     // Create a new BODY if the first LUMP is not attached to
-     // a BODY.
-   BODY* BODY_ptr = first_LUMP_ptr->body() ;
-   if ( BODY_ptr == NULL )
-   {
-      BODY_ptr = new BODY(first_LUMP_ptr) ;
+      // Create a new BODY if the first LUMP is not attached to
+      // a BODY.
+      BODY* BODY_ptr = first_LUMP_ptr->body() ;
       if ( BODY_ptr == NULL )
-      {
-         PRINT_ERROR("In AcisModifyEngine::make_BodySM\n"
-                     "       ACIS cannot make BODY object.\n"
-                     "       Cannot make BodySM object.\n");
-         return (BodySM *)NULL;
-      }
-   }
+	{
+	  BODY_ptr = new BODY(first_LUMP_ptr) ;
+	  if ( BODY_ptr == NULL )
+	    {
+	      PRINT_ERROR("In AcisModifyEngine::make_BodySM\n"
+			  "       ACIS cannot make BODY object.\n"
+			  "       Cannot make BodySM object.\n");
+	      return (BodySM *)NULL;
+	    }
+	}
 
-     // Use the BODY to build VGI Body and CoVolume(s)
-   BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(BODY_ptr);
+      // Use the BODY to build VGI Body and CoVolume(s)
+      BodySM *this_bodysm = AcisQueryEngine::instance()->populate_topology_bridges(BODY_ptr);
 
-     /* Commenting out following section - we shouldn't be making
-        Body's yet!!!
+      /* Commenting out following section - we shouldn't be making
+	 Body's yet!!!
 
-   Body* body_ptr = GeometryModifyTool::instance()->make_Body(this_bodysm);
-   assert( body_ptr != NULL );
+	 Body* body_ptr = GeometryModifyTool::instance()->make_Body(this_bodysm);
+	 assert( body_ptr != NULL );
 
-     // First get the OSME associated with this Body
-   BodySM* OSME_ptr =
-       body_ptr->get_body_sm_ptr() ;
+	 // First get the OSME associated with this Body
+	 BodySM* OSME_ptr =
+	 body_ptr->get_body_sm_ptr() ;
 
-     // Cast the OSME to BodyACIS
-   BodyACIS* bodyACIS_ptr = CAST_TO(OSME_ptr, BodyACIS) ;
+	 // Cast the OSME to BodyACIS
+	 BodyACIS* bodyACIS_ptr = CAST_TO(OSME_ptr, BodyACIS) ;
 
-     // Make sure that we have a valid BodyACIS
-   assert ( bodyACIS_ptr != NULL ) ;
-     */
-     // Return the BodyACIS
-   return this_bodysm;
-}
-
-CubitStatus
-AcisModifyEngine::webcut_with_sheet( DLIList<BodySM*>& webcut_body_list,
-                                     BodySM *sheet_body,
-                                     DLIList<BodySM*> &new_bodies,
-                                     bool imprint )
-{
-   int num_cut=0;
-   DLIList<BodySM*> temp_new_bodies;
-
-   for ( int ii = webcut_body_list.size(); ii > 0; ii-- )
-   {
-     BodySM *webcut_body = webcut_body_list.get_and_step();
-     BODY *sheet_BODY = AcisQueryEngine::get_BODY(sheet_body );
-     BODY *webcut_BODY = AcisQueryEngine::get_BODY(webcut_body );
-      //now webcut it.
-     BODY *new_BODY_1, *new_BODY_2;
-
-     CubitStatus status = webcut_with_sheet( webcut_BODY,
-                                             sheet_BODY,
-                                             new_BODY_1,
-                                             new_BODY_2,
-                                             imprint );
-     if ( status == CUBIT_SUCCESS )
-     {
-       DLIList<BODY*> new_BODY_list;
-
-       new_BODY_list.append(new_BODY_1);
-       new_BODY_list.append(new_BODY_2);
-       temp_new_bodies.clean_out();
-
-       CubitStatus result = get_new_Body(webcut_body, webcut_BODY,
-                                         new_BODY_list, temp_new_bodies,
-                                         CUBIT_FALSE);
-       if ( result != CUBIT_SUCCESS )
-       {
-         PRINT_ERROR("Problems with building volume.\n");
-         num_cut = 0;
-         return CUBIT_FAILURE;
-       }
-       else
-       {
-         new_bodies += temp_new_bodies;
-         num_cut++;
-       }
-     }
-   }
-
-  // Return CUBIT_SUCCESS as long as one body is webcut, earlier failures should
-  // return CUBIT_FAILURE independently of these return statments
-  return num_cut > 0 ? CUBIT_SUCCESS : CUBIT_FAILURE;
-}
-
-
-// This function does the actuall webcuting with two acis bodies...
-CubitStatus AcisModifyEngine::webcut_with_sheet( BODY *webcut_body,
-                                                 BODY *sheet_body,
-                                                 BODY *&webcut_body_1,
-                                                 BODY *&webcut_body_2,
-                                                 bool imprint )
-{
-  //don't try to webcut a sheet body with itself
-  if( webcut_body == sheet_body )
-  {
-    return CUBIT_FAILURE;
-  }
-
-  CubitBoolean new_ids = GeometryModifyTool::instance()->get_new_ids();
-  CubitBoolean not_new_ids = CUBIT_TRUE;
-  if (new_ids) not_new_ids = CUBIT_FALSE;
-
-  BODY *sheet_BODY = sheet_body;
-  BODY *copy_sheet_BODY = this->copy_BODY(sheet_BODY);
-  BODY *webcut_BODY = webcut_body;
-  BODY *copy_webcut_BODY1 = copy_BODY(webcut_BODY,
-                                      new_ids);
-  BODY *copy_webcut_BODY2 = copy_BODY(webcut_BODY,
-                                      new_ids);
-//first test to see if these intersect.  If they don't
-//then continueing on will not show the error and duplicate
-//bodies will be created.
-  if ( !BODYs_interfering( webcut_BODY, sheet_BODY ) )
-  {
-    PRINT_WARNING("Cutting Sheet does not intersect the original volume.\n"
-                  "         The original volume is restored.\n" );
-      //These don't intersect.  Clean up and exit.
-    AcisQueryEngine::instance()->delete_ACIS_BODY(copy_sheet_BODY, CUBIT_TRUE);
-    AcisQueryEngine::instance()->delete_ACIS_BODY(copy_webcut_BODY1, not_new_ids);
-    AcisQueryEngine::instance()->delete_ACIS_BODY(copy_webcut_BODY2, not_new_ids);
-
-    return CUBIT_FAILURE;
-  }
-
-  //set all faces to one sided
-  API_BEGIN;
-  sg_body_to_1d( copy_sheet_BODY );
-  API_END;
-
-    //Now we have to do two subtracts. Lets subtract this face from the body
-    //to be webcut.  Then reverse it and do it again.
-  BODY *copy_2_sheet_BODY = copy_BODY( copy_sheet_BODY );
-
-  outcome rc_3 = api_reverse_body( copy_2_sheet_BODY );
-  if ( !rc_3.ok() || copy_2_sheet_BODY == NULL )
-  {
-    PRINT_ERROR("Error in webcutting volume with sheet.\n");
-    AcisQueryEngine::instance()->delete_ACIS_BODY(copy_sheet_BODY, CUBIT_TRUE);
-    AcisQueryEngine::instance()->delete_ACIS_BODY(copy_2_sheet_BODY, CUBIT_TRUE);
-    AcisQueryEngine::instance()->delete_ACIS_BODY(copy_webcut_BODY1, not_new_ids);
-    AcisQueryEngine::instance()->delete_ACIS_BODY(copy_webcut_BODY2, not_new_ids);
-    AcisQueryEngine::instance()->ACIS_API_error (rc_3);
-    return CUBIT_FAILURE;
-  }
-
-  outcome rc_4 = api_subtract( copy_sheet_BODY, copy_webcut_BODY1 );
-
-  if ( !rc_4.ok() || copy_sheet_BODY == NULL ||
-       copy_webcut_BODY1 == NULL ||
-       copy_webcut_BODY1->lump() == NULL ||
-       (!BodyACIS::is_sheet_body( copy_webcut_BODY1 ) &&
-       !is_closed_solid_body( copy_webcut_BODY1 ) ))
-  {
-    CubitBoolean is_error = CUBIT_TRUE;
-    if ( rc_4.ok() && copy_webcut_BODY1 && copy_sheet_BODY &&
-        ( copy_webcut_BODY1->lump() == NULL ||
-          !is_closed_solid_body( copy_webcut_BODY1 )))
-    {
-        //This is where the sheet just intersects with the shell
-        //of the outside body.  should do nothing here.
-      is_error = CUBIT_FALSE;
+	 // Make sure that we have a valid BodyACIS
+	 assert ( bodyACIS_ptr != NULL ) ;
+      */
+      // Return the BodyACIS
+      return this_bodysm;
     }
-    if( !rc_4.ok() )  //was already deleted if api_subtract was successfull
-      AcisQueryEngine::instance()->delete_ACIS_BODY(copy_sheet_BODY, CUBIT_TRUE);
 
-    AcisQueryEngine::instance()->delete_ACIS_BODY(copy_2_sheet_BODY, CUBIT_TRUE);
-    AcisQueryEngine::instance()->delete_ACIS_BODY(copy_webcut_BODY1, not_new_ids);
-    AcisQueryEngine::instance()->delete_ACIS_BODY(copy_webcut_BODY2, not_new_ids);
-    if ( is_error )
+  CubitStatus AcisModifyEngine::regularize_body( BodySM *body_ptr,
+						 BodySM *&new_body_ptr)
     {
-      PRINT_ERROR("Error in webcutting volume with sheet.\n");
-      AcisQueryEngine::instance()->ACIS_API_error (rc_4);
-    }
-    else
-      PRINT_WARNING("Sheet grazes shell of volume.  Nothing was cut.\n");
-    return CUBIT_FAILURE;
-  }
-  outcome rc_5 = api_subtract( copy_2_sheet_BODY, copy_webcut_BODY2 );
+      CubitBoolean new_ids = GeometryModifyTool::instance()->get_new_ids();
+      CubitBoolean not_new_ids = (new_ids ? CUBIT_FALSE : CUBIT_TRUE);
 
-  if ( !rc_5.ok() || copy_2_sheet_BODY == NULL ||
-       copy_webcut_BODY2 == NULL ||
-       copy_webcut_BODY2->lump() == NULL ||
-       (!BodyACIS::is_sheet_body( copy_webcut_BODY2 ) &&
-       !is_closed_solid_body( copy_webcut_BODY2 ) ))
-  {
-    CubitBoolean is_error = CUBIT_TRUE;
-    if ( rc_5.ok() && copy_2_sheet_BODY && copy_webcut_BODY2
-         && (copy_webcut_BODY2->lump() == NULL ||
-         !is_closed_solid_body( copy_webcut_BODY2 )))
-      is_error = CUBIT_FALSE;
+      BODY *old_BODY = AcisQueryEngine::get_BODY(body_ptr );
+      if (!old_BODY)
+	return CUBIT_FAILURE;
+      BODY *acis_BODY = this->copy_BODY(old_BODY, new_ids);
 
-    if( !rc_5.ok() )  //was already deleted if api_subtract was successfull
-      AcisQueryEngine::instance()->delete_ACIS_BODY(copy_2_sheet_BODY, CUBIT_TRUE);
+      outcome result = api_clean_entity( (ENTITY*) acis_BODY);
+      //outcome result = api_regularise_entity( (ENTITY*) acis_BODY);
+      if (!result.ok() || acis_BODY == NULL ||
+	  acis_BODY->lump() == NULL )
+	{
+	  PRINT_ERROR("found in AcisModifyEngine::regularize_body.\n"
+		      "api_regularise_entity failed.\n");
+	  AcisQueryEngine::instance()->ACIS_API_error (result);
+	  AcisQueryEngine::instance()->delete_ACIS_BODY(acis_BODY, not_new_ids);
+	  return CUBIT_FAILURE;
+	}
 
-    AcisQueryEngine::instance()->delete_ACIS_BODY(copy_webcut_BODY1, not_new_ids);
-    AcisQueryEngine::instance()->delete_ACIS_BODY(copy_webcut_BODY2, not_new_ids);
-    if ( is_error )
-    {
-      PRINT_ERROR("Error in webcutting volume with sheet.\n");
-      AcisQueryEngine::instance()->ACIS_API_error (rc_5);
-    }
-    else
-      PRINT_WARNING("Sheet grazes shell of volume.  Nothing was cut.\n");
-    return CUBIT_FAILURE;
-  }
+      new_body_ptr = get_new_Body(body_ptr, old_BODY, acis_BODY, false);
 
-  //it is possible that the sheet body tool and sheet blank overlap 
-  //use different webcut function then
-  
-  //if copy_webcut_BODY1 is a sheet body, see if resultant bodies overlap 
-  if( BodyACIS::is_sheet_body( copy_webcut_BODY1 ) )
-  {
-    bool overlap = false;
-    
-    API_BEGIN;
-    API_NOP_BEGIN;
-      outcome my_result = api_intersect( copy_webcut_BODY1, copy_webcut_BODY2 ); 
-      if( my_result.ok() && copy_webcut_BODY2->lump() )
-        overlap = true;
-    API_NOP_END;
-    API_END;
+      if (new_body_ptr) return CUBIT_SUCCESS;
+      else return CUBIT_FAILURE;
 
-    //if resultant bodies overlap...use appropriate webcut function 
-    if( overlap ) 
-    {
-      AcisQueryEngine::instance()->delete_ACIS_BODY(copy_webcut_BODY1, not_new_ids);
-      AcisQueryEngine::instance()->delete_ACIS_BODY(copy_webcut_BODY2, not_new_ids);
-
-      CubitStatus stat = AcisModifyEngine::webcut_BODY( webcut_body,
-                                                        sheet_body,
-                                                        copy_webcut_BODY1,
-                                                        copy_webcut_BODY2); 
-      if( stat == CUBIT_FAILURE )
-        return CUBIT_FAILURE;
     }
-  }
+  //-------------------------------------------------------------------------
+  // Purpose       : clean RefEntity
+  //
+  // Special Notes :
+  //
+  // Creator       : Lingyun Pan (CAT)
+  //
+  // Creation Date : 07/15/01
+  //-------------------------------------------------------------------------
 
-    //okay everything should be okay now.
-  if ( imprint == CUBIT_TRUE )
-  {
-    CubitStatus stat = imprint_BODYs( copy_webcut_BODY1,
-                                      copy_webcut_BODY2 );
-    if ( stat != CUBIT_SUCCESS ||
-         copy_webcut_BODY1 == NULL ||
-         copy_webcut_BODY2 == NULL )
+  CubitStatus AcisModifyEngine::regularize_entity( GeometryEntity *old_refentity_ptr,
+						   BodySM *&new_body_ptr)
     {
-      PRINT_ERROR("Error in webcutting volume with sheet.\n");
-      return CUBIT_FAILURE;
-    }
-  }
-  webcut_body_1 =  copy_webcut_BODY1;
-  webcut_body_2 =  copy_webcut_BODY2;
-  AcisQueryEngine::instance()->clear_bounding_box( webcut_body_1 );
-  AcisQueryEngine::instance()->bounding_box( webcut_body_1 );
-  AcisQueryEngine::instance()->clear_bounding_box( webcut_body_2 );
-  AcisQueryEngine::instance()->bounding_box( webcut_body_2 );
+      CubitBoolean new_ids = GeometryModifyTool::instance()->get_new_ids();
+      CubitBoolean not_new_ids = (new_ids ? CUBIT_FALSE : CUBIT_TRUE);
 
-  return CUBIT_SUCCESS;
-}
+      BODY *copied_BODY_ptr;
+      SurfaceACIS *ref_face = CAST_TO(old_refentity_ptr, SurfaceACIS);
+      CurveACIS *ref_edge= CAST_TO(old_refentity_ptr, CurveACIS);
+      PointACIS *ref_vertex= CAST_TO(old_refentity_ptr, PointACIS);
 
-CubitStatus
-AcisModifyEngine::webcut_with_extended_surf( DLIList<BodySM*> &webcut_body_list,
-                                             Surface *extend_from,
-                                             DLIList<BodySM*> &new_bodies,
-                                             int &num_cut,
-                                             bool imprint )
-{
-    //now lets create a new extended face from the surface.
-  SurfaceACIS *surf_ACIS = CAST_TO(extend_from, SurfaceACIS );
-  if(!surf_ACIS)
-  {
-     PRINT_ERROR("Couldn't extend face to use for webcutting.\n"
-                 "Possible incompatible geometry engine for this operation.\n");
-     return CUBIT_FAILURE;
-  }
-  FACE *extend_from_FACE = surf_ACIS->get_FACE_ptr();
+      DLIList<SurfaceACIS*> reg_face_list;
+      DLIList<FACE*> FACE_list;
 
-  FACE *extended_FACE = make_FACE( extend_from_FACE, CUBIT_TRUE );
-  if ( extended_FACE == NULL )
-  {
-    PRINT_ERROR("Couldn't extend face to use for webcutting.\n");
-    return CUBIT_FAILURE;
-  }
-  BodySM *webcut_body;
-  DLIList<BodySM*> temp_new_bodies;
-  num_cut = 0;
-  for ( int ii = webcut_body_list.size(); ii > 0; ii-- )
-  {
-    webcut_body = webcut_body_list.remove();
-    BODY *tool_BODY = AcisQueryEngine::instance()->get_BODY_of_ENTITY(extended_FACE);
-    BODY *webcut_BODY = AcisQueryEngine::get_BODY(webcut_body );
-      //now webcut with it.
-    BODY *new_BODY_1, *new_BODY_2;
-    CubitStatus status = webcut_with_sheet( webcut_BODY,
-                                            tool_BODY,
-                                            new_BODY_1,
-                                            new_BODY_2,
-                                            imprint );
-    if ( status == CUBIT_SUCCESS )
-    {
-      DLIList<BODY*> new_BODY_list;
-      new_BODY_list.append(new_BODY_1);
-      new_BODY_list.append(new_BODY_2);
-      temp_new_bodies.clean_out();
+      DLIList<CurveACIS*> reg_edge_list;
+      DLIList<EDGE*> EDGE_list;
 
-      CubitStatus result = get_new_Body(webcut_body, webcut_BODY,
-                                        new_BODY_list, temp_new_bodies,
-                                        CUBIT_FALSE);
-      if ( result != CUBIT_SUCCESS )
-      {
-        PRINT_ERROR("Problems with building volume.\n");
-        num_cut = 0;
-        return CUBIT_FAILURE;
-      }
-      else
-      {
-        new_bodies += temp_new_bodies;
-        num_cut++;
-      }
-    }
-  }
-  return CUBIT_SUCCESS;
-}
+      DLIList<PointACIS*> reg_vertex_list;
+      DLIList<VERTEX*> VERTEX_list;
 
-CubitStatus AcisModifyEngine::regularize_body( BodySM *body_ptr,
-                                               BodySM *&new_body_ptr)
-{
-  CubitBoolean new_ids = GeometryModifyTool::instance()->get_new_ids();
-  CubitBoolean not_new_ids = (new_ids ? CUBIT_FALSE : CUBIT_TRUE);
-
-   BODY *old_BODY = AcisQueryEngine::get_BODY(body_ptr );
-   if (!old_BODY)
-      return CUBIT_FAILURE;
-   BODY *acis_BODY = this->copy_BODY(old_BODY, new_ids);
-
-   outcome result = api_clean_entity( (ENTITY*) acis_BODY);
-   //outcome result = api_regularise_entity( (ENTITY*) acis_BODY);
-   if (!result.ok() || acis_BODY == NULL ||
-       acis_BODY->lump() == NULL )
-   {
-      PRINT_ERROR("found in AcisModifyEngine::regularize_body.\n"
-                  "api_regularise_entity failed.\n");
-      AcisQueryEngine::instance()->ACIS_API_error (result);
-      AcisQueryEngine::instance()->delete_ACIS_BODY(acis_BODY, not_new_ids);
-      return CUBIT_FAILURE;
-   }
-
-   new_body_ptr = get_new_Body(body_ptr, old_BODY, acis_BODY, false);
-
-   if (new_body_ptr) return CUBIT_SUCCESS;
-   else return CUBIT_FAILURE;
-
-}
-//-------------------------------------------------------------------------
-// Purpose       : clean RefEntity
-//
-// Special Notes :
-//
-// Creator       : Lingyun Pan (CAT)
-//
-// Creation Date : 07/15/01
-//-------------------------------------------------------------------------
-
-CubitStatus AcisModifyEngine::regularize_entity( GeometryEntity *old_refentity_ptr,
-                                                    BodySM *&new_body_ptr)
-{
-  CubitBoolean new_ids = GeometryModifyTool::instance()->get_new_ids();
-  CubitBoolean not_new_ids = (new_ids ? CUBIT_FALSE : CUBIT_TRUE);
-
-  BODY *copied_BODY_ptr;
-  SurfaceACIS *ref_face = CAST_TO(old_refentity_ptr, SurfaceACIS);
-  CurveACIS *ref_edge= CAST_TO(old_refentity_ptr, CurveACIS);
-  PointACIS *ref_vertex= CAST_TO(old_refentity_ptr, PointACIS);
-
-  DLIList<SurfaceACIS*> reg_face_list;
-  DLIList<FACE*> FACE_list;
-
-  DLIList<CurveACIS*> reg_edge_list;
-  DLIList<EDGE*> EDGE_list;
-
-  DLIList<PointACIS*> reg_vertex_list;
-  DLIList<VERTEX*> VERTEX_list;
-
-  // get the copied_BODY_ptr and FACE_list to clean
-  if (ref_face)
-  {
+      // get the copied_BODY_ptr and FACE_list to clean
+      if (ref_face)
+	{
 	  reg_face_list.append(ref_face);
-      if (get_copied_FACES_of_body( reg_face_list, FACE_list, copied_BODY_ptr )== CUBIT_FAILURE )
-	  {
-         PRINT_ERROR("Surface has no volume associated with it.\n");
-          return CUBIT_FAILURE;
-	  }
-  }
+	  if (get_copied_FACES_of_body( reg_face_list, FACE_list, copied_BODY_ptr )== CUBIT_FAILURE )
+	    {
+	      PRINT_ERROR("Surface has no volume associated with it.\n");
+	      return CUBIT_FAILURE;
+	    }
+	}
 
 
-// get the copied_BODY_ptr and EDGE_list to clean
-  if (ref_edge)
-  {
+      // get the copied_BODY_ptr and EDGE_list to clean
+      if (ref_edge)
+	{
 	  reg_edge_list.append(ref_edge);
-      if(get_copied_EDGES_of_body( reg_edge_list, EDGE_list, copied_BODY_ptr )== CUBIT_FAILURE )
-	  {
-         PRINT_ERROR("Edge has no volume associated with it.\n");
-         return CUBIT_FAILURE;
-	  }
-  }
+	  if(get_copied_EDGES_of_body( reg_edge_list, EDGE_list, copied_BODY_ptr )== CUBIT_FAILURE )
+	    {
+	      PRINT_ERROR("Edge has no volume associated with it.\n");
+	      return CUBIT_FAILURE;
+	    }
+	}
 
- if (ref_vertex)
-  {
+      if (ref_vertex)
+	{
 	  reg_vertex_list.append(ref_vertex);
-      if (get_copied_VERTICES_of_body( reg_vertex_list, VERTEX_list, copied_BODY_ptr )== CUBIT_FAILURE )
-	  {
-         PRINT_ERROR("Vertex has no volume associated with it.\n");
-         return CUBIT_FAILURE;
-	  }
-  }
+	  if (get_copied_VERTICES_of_body( reg_vertex_list, VERTEX_list, copied_BODY_ptr )== CUBIT_FAILURE )
+	    {
+	      PRINT_ERROR("Vertex has no volume associated with it.\n");
+	      return CUBIT_FAILURE;
+	    }
+	}
 
-  if (!ref_face && !ref_edge && !ref_vertex)
-  {
+      if (!ref_face && !ref_edge && !ref_vertex)
+	{
 	  //complain
-      PRINT_ERROR("RefEntity is neither a RefEdge, RefFace, nor RefVertex.\n");
+	  PRINT_ERROR("RefEntity is neither a RefEdge, RefFace, nor RefVertex.\n");
 	  PRINT_ERROR("found in AcisModifyEngine::regularize_refentity.\n"
-					  "api_regularise_refentity aborted.\n");
+		      "api_regularise_refentity aborted.\n");
 	  AcisQueryEngine::instance()->delete_ACIS_BODY(copied_BODY_ptr, not_new_ids);
-	   return CUBIT_FAILURE;
-  }
+	  return CUBIT_FAILURE;
+	}
 
-  // Get original Body and BODY
-  BodySM *body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY( copied_BODY_ptr );
+      // Get original Body and BODY
+      BodySM *body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY( copied_BODY_ptr );
 
-  BODY *BODY_ptr =  AcisQueryEngine::get_BODY(body_ptr);
+      BODY *BODY_ptr =  AcisQueryEngine::get_BODY(body_ptr);
 
-  int i;
-  FACE *acis_FACE;
-  EDGE *acis_EDGE;
-  VERTEX *acis_VERTEX;
+      int i;
+      FACE *acis_FACE;
+      EDGE *acis_EDGE;
+      VERTEX *acis_VERTEX;
 
- //clean FACE
-  for (i=0;i<FACE_list.size();i++)
-  {
+      //clean FACE
+      for (i=0;i<FACE_list.size();i++)
+	{
 	  acis_FACE = FACE_list.get_and_step();
 	  outcome result = api_clean_entity( (ENTITY*) acis_FACE);
 	  if (!result.ok() || acis_FACE == NULL )
-	  {
-		  PRINT_ERROR("found in AcisModifyEngine::regularize_refentity.\n"
-					  "api_regularise_refentity failed.\n");
-		 AcisQueryEngine::instance()->ACIS_API_error (result);
-		 AcisQueryEngine::instance()->delete_ACIS_BODY(copied_BODY_ptr, not_new_ids);
-		 return CUBIT_FAILURE;
-	  }
-  }
+	    {
+	      PRINT_ERROR("found in AcisModifyEngine::regularize_refentity.\n"
+			  "api_regularise_refentity failed.\n");
+	      AcisQueryEngine::instance()->ACIS_API_error (result);
+	      AcisQueryEngine::instance()->delete_ACIS_BODY(copied_BODY_ptr, not_new_ids);
+	      return CUBIT_FAILURE;
+	    }
+	}
 
-  // clean EDGE
-  for (i=0;i<EDGE_list.size();i++)
-  {
+      // clean EDGE
+      for (i=0;i<EDGE_list.size();i++)
+	{
 	  acis_EDGE = EDGE_list.get_and_step();
 	  outcome result = api_clean_entity( (ENTITY*) acis_EDGE);
 	  if (!result.ok() || acis_EDGE == NULL )
-	  {
-		  PRINT_ERROR("found in AcisModifyEngine::regularize_refentity.\n"
-					  "api_regularise_refentity failed.\n");
-		  AcisQueryEngine::instance()->ACIS_API_error (result);
-		  AcisQueryEngine::instance()->delete_ACIS_BODY(copied_BODY_ptr, not_new_ids);
-		  return CUBIT_FAILURE;
-	  }
-  }
+	    {
+	      PRINT_ERROR("found in AcisModifyEngine::regularize_refentity.\n"
+			  "api_regularise_refentity failed.\n");
+	      AcisQueryEngine::instance()->ACIS_API_error (result);
+	      AcisQueryEngine::instance()->delete_ACIS_BODY(copied_BODY_ptr, not_new_ids);
+	      return CUBIT_FAILURE;
+	    }
+	}
 
-  // clean VERTEX
-  for (i=0;i<VERTEX_list.size();i++)
-  {
+      // clean VERTEX
+      for (i=0;i<VERTEX_list.size();i++)
+	{
 	  acis_VERTEX = VERTEX_list.get_and_step();
 	  outcome result = api_clean_entity( (ENTITY*) acis_VERTEX);
 	  if (!result.ok() || acis_VERTEX == NULL )
-	  {
-		  PRINT_ERROR("found in AcisModifyEngine::regularize_refentity.\n"
-					  "api_regularise_refentity failed.\n");
-		  AcisQueryEngine::instance()->ACIS_API_error (result);
-		  AcisQueryEngine::instance()->delete_ACIS_BODY(copied_BODY_ptr, not_new_ids);
-		  return CUBIT_FAILURE;
-	  }
-  }
-  //rebuild the cubit geometry
-  new_body_ptr = get_new_Body( body_ptr,  BODY_ptr , copied_BODY_ptr , false);
-  if (new_body_ptr) return CUBIT_SUCCESS;
-	   else return CUBIT_FAILURE;
-}
+	    {
+	      PRINT_ERROR("found in AcisModifyEngine::regularize_refentity.\n"
+			  "api_regularise_refentity failed.\n");
+	      AcisQueryEngine::instance()->ACIS_API_error (result);
+	      AcisQueryEngine::instance()->delete_ACIS_BODY(copied_BODY_ptr, not_new_ids);
+	      return CUBIT_FAILURE;
+	    }
+	}
+      //rebuild the cubit geometry
+      new_body_ptr = get_new_Body( body_ptr,  BODY_ptr , copied_BODY_ptr , false);
+      if (new_body_ptr) return CUBIT_SUCCESS;
+      else return CUBIT_FAILURE;
+    }
 
-CubitStatus AcisModifyEngine::split_body( BodySM *body_ptr,
-                                          DLIList<BodySM*> &new_bodies )
-{
-  bool delete_attribs = GeometryModifyTool::instance()->get_new_ids() != 0;
-     //get the acis body.
-   BODY* acis_BODY = NULL;
-   BODY **new_BODY_list;
-   int n_body;
+  CubitStatus AcisModifyEngine::split_body( BodySM *body_ptr,
+					    DLIList<BodySM*> &new_bodies )
+    {
+      bool delete_attribs = GeometryModifyTool::instance()->get_new_ids() != 0;
+      //get the acis body.
+      BODY* acis_BODY = NULL;
+      BODY **new_BODY_list;
+      int n_body;
 
-   BODY *old_BODY = AcisQueryEngine::get_BODY(body_ptr );
-   acis_BODY = this->copy_BODY(old_BODY, delete_attribs);
+      BODY *old_BODY = AcisQueryEngine::get_BODY(body_ptr );
+      acis_BODY = this->copy_BODY(old_BODY, delete_attribs);
 
-   outcome result = api_separate_body( acis_BODY, n_body, new_BODY_list );
+      outcome result = api_separate_body( acis_BODY, n_body, new_BODY_list );
 
-   if (!result.ok())
-   {
-      PRINT_ERROR("Error in seperating volumes.\n");
-      AcisQueryEngine::instance()->delete_ACIS_BODY(acis_BODY, CUBIT_TRUE);
-      return CUBIT_FAILURE;
-   }
+      if (!result.ok())
+	{
+	  PRINT_ERROR("Error in seperating volumes.\n");
+	  AcisQueryEngine::instance()->delete_ACIS_BODY(acis_BODY, CUBIT_TRUE);
+	  return CUBIT_FAILURE;
+	}
 
-   DLIList<BODY*> new_BODYs;
-   for (int i = 0; i < n_body; i++)
-     new_BODYs.append(new_BODY_list[i]);
+      DLIList<BODY*> new_BODYs;
+      for (int i = 0; i < n_body; i++)
+	new_BODYs.append(new_BODY_list[i]);
 
-   CubitStatus status = get_new_Body(body_ptr, old_BODY,
-                                     new_BODYs, new_bodies,
-                                     CUBIT_FALSE);
-   return status;
-}
+      CubitStatus status = get_new_Body(body_ptr, old_BODY,
+					new_BODYs, new_bodies,
+					CUBIT_FALSE);
+      return status;
+    }
 
-CubitStatus AcisModifyEngine::split_periodic( BodySM *body_ptr,
-                                              BodySM *&new_body)
-{
+  CubitStatus AcisModifyEngine::split_periodic( BodySM *body_ptr,
+						BodySM *&new_body)
+    {
 
-   BODY* acis_BODY = NULL;
+      BODY* acis_BODY = NULL;
 
-     //get the ACIS BODY of tool_body
-   BODY *old_BODY = AcisQueryEngine::get_BODY( body_ptr );
-   acis_BODY = this->copy_BODY(old_BODY,
-                               GeometryModifyTool::instance()->get_new_ids());
+      //get the ACIS BODY of tool_body
+      BODY *old_BODY = AcisQueryEngine::get_BODY( body_ptr );
+      acis_BODY = this->copy_BODY(old_BODY,
+				  GeometryModifyTool::instance()->get_new_ids());
 
-   outcome some_result = api_split_periodic_faces( acis_BODY );
+      outcome some_result = api_split_periodic_faces( acis_BODY );
 
-   if ( acis_BODY == NULL || !some_result.ok() )
-   {
-      if (acis_BODY != NULL )
-          AcisQueryEngine::instance()->delete_ACIS_BODY( acis_BODY );
+      if ( acis_BODY == NULL || !some_result.ok() )
+	{
+	  if (acis_BODY != NULL )
+	    AcisQueryEngine::instance()->delete_ACIS_BODY( acis_BODY );
 
-      PRINT_ERROR("Unable to split periodic surface.\n");
-      return CUBIT_FAILURE;
-   }
+	  PRINT_ERROR("Unable to split periodic surface.\n");
+	  return CUBIT_FAILURE;
+	}
 
-   new_body = get_new_Body(body_ptr, old_BODY, acis_BODY, false);
+      new_body = get_new_Body(body_ptr, old_BODY, acis_BODY, false);
 
-   if ( new_body == NULL )
-   {
-      PRINT_ERROR("Can not make a volume out of the split volumes.\n");
-      return CUBIT_FAILURE;
-   }
+      if ( new_body == NULL )
+	{
+	  PRINT_ERROR("Can not make a volume out of the split volumes.\n");
+	  return CUBIT_FAILURE;
+	}
 
-   else return CUBIT_SUCCESS;
-}
+      else return CUBIT_SUCCESS;
+    }
 
-EDGE *
-AcisModifyEngine::make_spline_EDGE( DLIList<CubitVector*> &vec_list )
-{
-  int i;
-  EDGE *new_EDGE_ptr = NULL;
+  EDGE *
+    AcisModifyEngine::make_spline_EDGE( DLIList<CubitVector*> &vec_list )
+    {
+      int i;
+      EDGE *new_EDGE_ptr = NULL;
 
-  // Create a spline
-  int num_pnts = vec_list.size();
-  SPAposition* pos_array = new SPAposition[num_pnts];
+      // Create a spline
+      int num_pnts = vec_list.size();
+      SPAposition* pos_array = new SPAposition[num_pnts];
 
-  // Fill the vector_list of points
-  vec_list.reset();
-  for( i=0; i<num_pnts; i++)
-  {
-    // Set the coordinates of the SPAposition object
-    pos_array[i].set_x(vec_list.get()->x());
-    pos_array[i].set_y(vec_list.get()->y());
-    pos_array[i].set_z(vec_list.get()->z());
-    vec_list.step();
-  }
+      // Fill the vector_list of points
+      vec_list.reset();
+      for( i=0; i<num_pnts; i++)
+	{
+	  // Set the coordinates of the SPAposition object
+	  pos_array[i].set_x(vec_list.get()->x());
+	  pos_array[i].set_y(vec_list.get()->y());
+	  pos_array[i].set_z(vec_list.get()->z());
+	  vec_list.step();
+	}
 
-  outcome result = api_curve_spline(num_pnts, pos_array, NULL, NULL, new_EDGE_ptr);
-  delete [] pos_array;
-  if( !result.ok() || new_EDGE_ptr == NULL )
-  {
-    get_acis_query_engine()->ACIS_API_error(result);
-    PRINT_ERROR( "unable to make spline from list of positions\n" );
-    return NULL;
-  }
+      outcome result = api_curve_spline(num_pnts, pos_array, NULL, NULL, new_EDGE_ptr);
+      delete [] pos_array;
+      if( !result.ok() || new_EDGE_ptr == NULL )
+	{
+	  get_acis_query_engine()->ACIS_API_error(result);
+	  PRINT_ERROR( "unable to make spline from list of positions\n" );
+	  return NULL;
+	}
 
-  return new_EDGE_ptr;
-}
+      return new_EDGE_ptr;
+    }
 
-//-------------------------------------------------------------------------
-// Purpose       : Reverse the ACIS BODY
-//
-// Special Notes : Moved from BodyACIS - j.k, 2004-5-25
-//
-// Creator       : Tim Tautges
-//
-// Creation Date : 3/18/97
-//-------------------------------------------------------------------------
-CubitStatus AcisModifyEngine::reverse_body( BodySM* body_to_reverse )
-{
-  BODY* body_ptr = AcisQueryEngine::get_BODY( body_to_reverse );
-  if (!body_ptr)
-    return CUBIT_FAILURE;
+  //-------------------------------------------------------------------------
+  // Purpose       : Reverse the ACIS BODY
+  //
+  // Special Notes : Moved from BodyACIS - j.k, 2004-5-25
+  //
+  // Creator       : Tim Tautges
+  //
+  // Creation Date : 3/18/97
+  //-------------------------------------------------------------------------
+  CubitStatus AcisModifyEngine::reverse_body( BodySM* body_to_reverse )
+    {
+      BODY* body_ptr = AcisQueryEngine::get_BODY( body_to_reverse );
+      if (!body_ptr)
+	return CUBIT_FAILURE;
 
-  outcome result = api_reverse_body( body_ptr );
-  if (!result.ok())
-  {
-    AcisQueryEngine::instance()->ACIS_API_error( result, "reversing BODY." );
-    return CUBIT_FAILURE;
-  }
+      outcome result = api_reverse_body( body_ptr );
+      if (!result.ok())
+	{
+	  AcisQueryEngine::instance()->ACIS_API_error( result, "reversing BODY." );
+	  return CUBIT_FAILURE;
+	}
 
-  return CUBIT_SUCCESS;
-}
+      return CUBIT_SUCCESS;
+    }
 
-void AcisModifyEngine::webcut_cleanup( DLIList<BodySM*>& body_list,
+  void AcisModifyEngine::webcut_cleanup( DLIList<BodySM*>& body_list,
                                          ENTITY_LIST& BODY_list) const
-{
-     // This procedure is called by webcut_handler and gets rid of
-     // all the Body's and Acis BODY's created during the execution
-     // of the webcut command. The command was unsuccessful and hence,
-     // these entities need to be removed so the system can be returned
-     // to its state before the command was invoked.
+    {
+      // This procedure is called by webcut_handler and gets rid of
+      // all the Body's and Acis BODY's created during the execution
+      // of the webcut command. The command was unsuccessful and hence,
+      // these entities need to be removed so the system can be returned
+      // to its state before the command was invoked.
 
-     // Delete the Bodies
-   AcisQueryEngine::instance()->delete_solid_model_entities(body_list);
-   //GeometryQueryTool::instance()->delete_Body(body_list, CUBIT_TRUE);
+      // Delete the Bodies
+      AcisQueryEngine::instance()->delete_solid_model_entities(body_list);
+      //GeometryQueryTool::instance()->delete_Body(body_list, CUBIT_TRUE);
 
-     // Delete the Acis BODYs
-   AcisQueryEngine::instance()->delete_ACIS_BODY(BODY_list);
+      // Delete the Acis BODYs
+      AcisQueryEngine::instance()->delete_ACIS_BODY(BODY_list);
 
-   return;
+      return;
 
-}
+    }
 
-void AcisModifyEngine::webcut_imprint(
-    BODY* cutting_tool_BODY_ptr,
-    DLIList<BodySM*> &old_body_list,
-    DLIList<BODY*>& new_webcut_BODY_list,
-    DLIList<BODY*>& just_webcut_BODY_list,
-    DLIList<BodySM*>& results_list,
-    DLIList<BodySM*> &imprinted_Body_from_Model_list,
-    DLIList<BODY*> &imprinted_BODY_from_Model_list) const
-{
-     // This procedure takes care of the imprint operations that are required
-     // by the webcut operation. Each of the BODYs in the new_webcut_BODY_list
-     // is tested against every other BODY in the model as well as every other
-     // BODY in the same list for interference. If interference exists, then
-     // the BODYs are imprinted with each other and new (corresponding) Bodies
-     // are created. Pointers to these new Bodies are inserted into the list,
-     // new_webcut_body_list.
+  void AcisModifyEngine::webcut_imprint(
+					BODY* cutting_tool_BODY_ptr,
+					DLIList<BodySM*> &old_body_list,
+					DLIList<BODY*>& new_webcut_BODY_list,
+					DLIList<BODY*>& just_webcut_BODY_list,
+					DLIList<BodySM*>& results_list,
+					DLIList<BodySM*> &imprinted_Body_from_Model_list,
+					DLIList<BODY*> &imprinted_BODY_from_Model_list) const
+    {
+      // This procedure takes care of the imprint operations that are required
+      // by the webcut operation. Each of the BODYs in the new_webcut_BODY_list
+      // is tested against every other BODY in the model as well as every other
+      // BODY in the same list for interference. If interference exists, then
+      // the BODYs are imprinted with each other and new (corresponding) Bodies
+      // are created. Pointers to these new Bodies are inserted into the list,
+      // new_webcut_body_list.
 
-     // MJP Note:
-     // Note that this procedure takes care of imprinting the existing Bodies
-     // (i.e., the ones in the model) and creating new Bodies when necessary
-     // to replace these. However, new Body's are *not* created from the list
-     // of ACIS BODYs in the input list, new_webcut_BODY_list. These are simply
-     // returned to the calling routine, where it is expected that new Bodies
-     // will be created, as required.
+      // MJP Note:
+      // Note that this procedure takes care of imprinting the existing Bodies
+      // (i.e., the ones in the model) and creating new Bodies when necessary
+      // to replace these. However, new Body's are *not* created from the list
+      // of ACIS BODYs in the input list, new_webcut_BODY_list. These are simply
+      // returned to the calling routine, where it is expected that new Bodies
+      // will be created, as required.
 
-   int webcut_debug_flag = 18;
-   int webcut_debug_flag_on = DEBUG_FLAG(webcut_debug_flag);
+      int webcut_debug_flag = 18;
+      int webcut_debug_flag_on = DEBUG_FLAG(webcut_debug_flag);
 
-   int i = 0;
-   int j = 0;
+      int i = 0;
+      int j = 0;
 
-     // Make copies of the input BODYs
-   DLIList<BODY*> copy_new_webcut_BODY_list ;
-   DLIList<BODY*> new_results_BODYS;
-   new_webcut_BODY_list.reset() ;
-   for (i = 0; i < new_webcut_BODY_list.size() ; i++)
-   {
-      BODY* old_BODY = new_webcut_BODY_list.get_and_step() ;
-      BODY* new_BODY = this->copy_BODY(old_BODY,
-                                       GeometryModifyTool::instance()->get_new_ids()) ;
+      // Make copies of the input BODYs
+      DLIList<BODY*> copy_new_webcut_BODY_list ;
+      DLIList<BODY*> new_results_BODYS;
+      new_webcut_BODY_list.reset() ;
+      for (i = 0; i < new_webcut_BODY_list.size() ; i++)
+	{
+	  BODY* old_BODY = new_webcut_BODY_list.get_and_step() ;
+	  BODY* new_BODY = this->copy_BODY(old_BODY,
+					   GeometryModifyTool::instance()->get_new_ids()) ;
 
-        // Make sure the the new BODY is a valid BODY
-      assert( new_BODY != NULL) ;
+	  // Make sure the the new BODY is a valid BODY
+	  assert( new_BODY != NULL) ;
 
-        // Add the new BODY to the backup list
-      copy_new_webcut_BODY_list.append(new_BODY) ;
-   }
+	  // Add the new BODY to the backup list
+	  copy_new_webcut_BODY_list.append(new_BODY) ;
+	}
 
-     // Loop over each of the new BODYs and imprint it with any other new BODY
-     // that touches it.
-   BODY* first_BODY_ptr = NULL;
-   BODY* second_BODY_ptr = NULL;
-   copy_new_webcut_BODY_list.reset() ;
-   for (i = 0; i < (copy_new_webcut_BODY_list.size() - 1); i++)
-   {
-        // Get the first BODY
-      first_BODY_ptr = copy_new_webcut_BODY_list.get_and_step();
+      // Loop over each of the new BODYs and imprint it with any other new BODY
+      // that touches it.
+      BODY* first_BODY_ptr = NULL;
+      BODY* second_BODY_ptr = NULL;
+      copy_new_webcut_BODY_list.reset() ;
+      for (i = 0; i < (copy_new_webcut_BODY_list.size() - 1); i++)
+	{
+	  // Get the first BODY
+	  first_BODY_ptr = copy_new_webcut_BODY_list.get_and_step();
 
-      for (j = (i + 1); j < copy_new_webcut_BODY_list.size(); j++)
-      {
-           // Get the second BODY
-         second_BODY_ptr = copy_new_webcut_BODY_list.get_and_step();
+	  for (j = (i + 1); j < copy_new_webcut_BODY_list.size(); j++)
+	    {
+	      // Get the second BODY
+	      second_BODY_ptr = copy_new_webcut_BODY_list.get_and_step();
 
-           // If these BODYs touch, then imprint them
-         CubitBoolean result_interfer =
-             BODYs_interfering( first_BODY_ptr,second_BODY_ptr );
+	      // If these BODYs touch, then imprint them
+	      CubitBoolean result_interfer =
+		BODYs_interfering( first_BODY_ptr,second_BODY_ptr );
 
-         if ( result_interfer == CUBIT_TRUE )
-         {
-            CubitStatus resultImprint =
-                imprint_BODYs( first_BODY_ptr, second_BODY_ptr );
+	      if ( result_interfer == CUBIT_TRUE )
+		{
+		  CubitStatus resultImprint =
+		    imprint_BODYs( first_BODY_ptr, second_BODY_ptr );
 
-            if( resultImprint == CUBIT_FAILURE )
-            {
-               PRINT_WARNING ("Imprint operation failed.\n"
-                              "         Going back to the previous state");
+		  if( resultImprint == CUBIT_FAILURE )
+		    {
+		      PRINT_WARNING ("Imprint operation failed.\n"
+				     "         Going back to the previous state");
 
-                 // Delete the new BODYs and return.
-               copy_new_webcut_BODY_list.reset() ;
-               for (int k = 0 ; k < copy_new_webcut_BODY_list.size() ; k++)
-               {
-                  first_BODY_ptr = copy_new_webcut_BODY_list.get_and_step() ;
-                  AcisQueryEngine::instance()->delete_ACIS_BODY(first_BODY_ptr) ;
-               }
-               return ;
-            }
-         }
-      }
+		      // Delete the new BODYs and return.
+		      copy_new_webcut_BODY_list.reset() ;
+		      for (int k = 0 ; k < copy_new_webcut_BODY_list.size() ; k++)
+			{
+			  first_BODY_ptr = copy_new_webcut_BODY_list.get_and_step() ;
+			  AcisQueryEngine::instance()->delete_ACIS_BODY(first_BODY_ptr) ;
+			}
+		      return ;
+		    }
+		}
+	    }
 
-        // Go to the (i+1)th element of the list
-      copy_new_webcut_BODY_list.reset() ;
-      copy_new_webcut_BODY_list.step(i+1) ;
+	  // Go to the (i+1)th element of the list
+	  copy_new_webcut_BODY_list.reset() ;
+	  copy_new_webcut_BODY_list.step(i+1) ;
 
-   }
+	}
 
-/*
-  CDE-- commented out this code.  For now, we've decided that when webcutting 
-  with the 'imprint' option, the imprint should occur between bodies involved
-  in the webcut.  This code was imprinting all resulting pieces of the webcut 
-  with all the other Bodies in the model.
+      /*
+	CDE-- commented out this code.  For now, we've decided that when webcutting 
+	with the 'imprint' option, the imprint should occur between bodies involved
+	in the webcut.  This code was imprinting all resulting pieces of the webcut 
+	with all the other Bodies in the model.
 
-     // Get the Bodys in the Model
-   DLIList<Body*> Body_in_Model_list_tmp;
-   GeometryQueryTool::instance()->bodies(Body_in_Model_list_tmp);
-   DLIList<BodySM*> Body_in_Model_list;
-   Body_in_Model_list_tmp.reset();
-   for (i = Body_in_Model_list_tmp.size(); i--; )
-    Body_in_Model_list.append( Body_in_Model_list_tmp.get_and_step()->get_body_sm_ptr());
+	// Get the Bodys in the Model
+	DLIList<Body*> Body_in_Model_list_tmp;
+	GeometryQueryTool::instance()->bodies(Body_in_Model_list_tmp);
+	DLIList<BodySM*> Body_in_Model_list;
+	Body_in_Model_list_tmp.reset();
+	for (i = Body_in_Model_list_tmp.size(); i--; )
+	Body_in_Model_list.append( Body_in_Model_list_tmp.get_and_step()->get_body_sm_ptr());
 
-     // Loop over each of the new BODYs and imprint it with any of the
-     // BODYs already existing in the model, if they touch.
+	// Loop over each of the new BODYs and imprint it with any of the
+	// BODYs already existing in the model, if they touch.
 
-     // List of new imprinted BODYs -- Bodies need to be created from these
-   DLIList<BODY*> copy_imprinted_BODY_from_Model_list;
+	// List of new imprinted BODYs -- Bodies need to be created from these
+	DLIList<BODY*> copy_imprinted_BODY_from_Model_list;
 
-   BodySM* model_Body_ptr = NULL;
-   BODY* model_BODY_ptr = NULL;
-   BODY* new_model_BODY_ptr = NULL;
-   BODY* new_BODY_ptr = NULL ;
-   int copy_made = CUBIT_FALSE;
+	BodySM* model_Body_ptr = NULL;
+	BODY* model_BODY_ptr = NULL;
+	BODY* new_model_BODY_ptr = NULL;
+	BODY* new_BODY_ptr = NULL ;
+	int copy_made = CUBIT_FALSE;
 
-   Body_in_Model_list.reset();
-     // Loop over all the existing Bodies
-   for (i = 0; i < Body_in_Model_list.size(); i++)
-   {
+	Body_in_Model_list.reset();
+	// Loop over all the existing Bodies
+	for (i = 0; i < Body_in_Model_list.size(); i++)
+	{
         // Get this existing Body's parent ACIS BODY
-      model_Body_ptr = Body_in_Model_list.get_and_step() ;
-      model_BODY_ptr = AcisQueryEngine::get_BODY(model_Body_ptr) ;
+	model_Body_ptr = Body_in_Model_list.get_and_step() ;
+	model_BODY_ptr = AcisQueryEngine::get_BODY(model_Body_ptr) ;
 
         // Make sure that model_BODY_ptr is not the Cutting Tool as the
         // user is allowed to use an existing Body as a Cutting Tool.
         // If this is the case, then don't involve it in the imprint
         // operations.
-      if (model_BODY_ptr == cutting_tool_BODY_ptr || old_body_list.move_to(model_Body_ptr))
-      {
-           // Don't do anything
-         continue;
-      }
+	if (model_BODY_ptr == cutting_tool_BODY_ptr || old_body_list.move_to(model_Body_ptr))
+	{
+	// Don't do anything
+	continue;
+	}
 
         // Loop over all the newly created (by webcutting) ACIS BODYs and test
         // the existing Body against them (for imprinting purposes, if there
         // is interference)
-      copy_made = CUBIT_FALSE;
-      new_model_BODY_ptr = NULL;
-      copy_new_webcut_BODY_list.reset();
+	copy_made = CUBIT_FALSE;
+	new_model_BODY_ptr = NULL;
+	copy_new_webcut_BODY_list.reset();
 
-      for (j = 0; j < copy_new_webcut_BODY_list.size(); j++)
-      {
-           // Get the BODY that we're going to test the existing Body against
-         new_BODY_ptr = copy_new_webcut_BODY_list.get_and_step() ;
+	for (j = 0; j < copy_new_webcut_BODY_list.size(); j++)
+	{
+	// Get the BODY that we're going to test the existing Body against
+	new_BODY_ptr = copy_new_webcut_BODY_list.get_and_step() ;
 
-           // DEBUG stuff
-         if (webcut_debug_flag_on)
-         {
-              //Save the two BODYs
-            AcisQueryEngine::instance()->save_ENTITY_as_sat_file(new_BODY_ptr, "BODY1.sat", "w");
-            AcisQueryEngine::instance()->save_ENTITY_as_sat_file(model_BODY_ptr, "BODY2.sat", "w");
-         }
+	// DEBUG stuff
+	if (webcut_debug_flag_on)
+	{
+	//Save the two BODYs
+	AcisQueryEngine::instance()->save_ENTITY_as_sat_file(new_BODY_ptr, "BODY1.sat", "w");
+	AcisQueryEngine::instance()->save_ENTITY_as_sat_file(model_BODY_ptr, "BODY2.sat", "w");
+	}
 
-           // If these BODYs touch, then ...
-         if ( BODYs_interfering(new_BODY_ptr, model_BODY_ptr) == CUBIT_TRUE )
-         {
-              // DEBUG stuff
-            if (webcut_debug_flag_on)
-            {
-               AcisQueryEngine::instance()->save_ENTITY_as_sat_file(new_BODY_ptr,
-                                             "BODY1_after_test.sat",
-                                             "w");
-               AcisQueryEngine::instance()->save_ENTITY_as_sat_file(new_model_BODY_ptr,
-                                             "BODY2_after_test.sat",
-                                             "w");
-            }
+	// If these BODYs touch, then ...
+	if ( BODYs_interfering(new_BODY_ptr, model_BODY_ptr) == CUBIT_TRUE )
+	{
+	// DEBUG stuff
+	if (webcut_debug_flag_on)
+	{
+	AcisQueryEngine::instance()->save_ENTITY_as_sat_file(new_BODY_ptr,
+	"BODY1_after_test.sat",
+	"w");
+	AcisQueryEngine::instance()->save_ENTITY_as_sat_file(new_model_BODY_ptr,
+	"BODY2_after_test.sat",
+	"w");
+	}
 
-              // Because of the fact that the RefEntity datastructure is
-              // nonmanifold and hence shares underlying ACIS ENTITYs, I have to:
-              //   a) make a copy of the parent ACIS BODY of the Body being
-              //      deactivated (this is done only once for the inner loop)
-              //   b) then all imprinting is done with this copy instead of
-              //     with the original parent ACIS BODY.
-              // deactivateRefStructure takes care of detaching the RefEntities
-              // and their associated ACIS ENTITYs (removing the double links
-              // between them).
-            if (!copy_made) // Make this copy at most once per outer loop iteration
-            {
-                 // Make a copy of the parent ACIS BODY.
-               new_model_BODY_ptr = this->copy_BODY(model_BODY_ptr,
-                                                    GeometryModifyTool::instance()->get_new_ids());
+	// Because of the fact that the RefEntity datastructure is
+	// nonmanifold and hence shares underlying ACIS ENTITYs, I have to:
+	//   a) make a copy of the parent ACIS BODY of the Body being
+	//      deactivated (this is done only once for the inner loop)
+	//   b) then all imprinting is done with this copy instead of
+	//     with the original parent ACIS BODY.
+	// deactivateRefStructure takes care of detaching the RefEntities
+	// and their associated ACIS ENTITYs (removing the double links
+	// between them).
+	if (!copy_made) // Make this copy at most once per outer loop iteration
+	{
+	// Make a copy of the parent ACIS BODY.
+	new_model_BODY_ptr = this->copy_BODY(model_BODY_ptr,
+	GeometryModifyTool::instance()->get_new_ids());
 
-                 // Make sure a valid copy was made. If not, then we need to exit
-                 // this loop (i.e., stop testing this Body for imprinting
-                 // and go on to the next one).
-               if (new_model_BODY_ptr == NULL)
-               {
-                  PRINT_ERROR("Cannot test imprinting for volume.\n" );
-                  break;
-               }
-               else
-               {
-                  copy_made = CUBIT_TRUE;
-                  if ( results_list.move_to(model_Body_ptr) )
-                    new_results_BODYS.append( new_model_BODY_ptr );
-                  imprinted_Body_from_Model_list.append(model_Body_ptr) ;
-                  imprinted_BODY_from_Model_list.append(model_BODY_ptr) ;
-                  copy_imprinted_BODY_from_Model_list.append(new_model_BODY_ptr) ;
-               }
-            }
+	// Make sure a valid copy was made. If not, then we need to exit
+	// this loop (i.e., stop testing this Body for imprinting
+	// and go on to the next one).
+	if (new_model_BODY_ptr == NULL)
+	{
+	PRINT_ERROR("Cannot test imprinting for volume.\n" );
+	break;
+	}
+	else
+	{
+	copy_made = CUBIT_TRUE;
+	if ( results_list.move_to(model_Body_ptr) )
+	new_results_BODYS.append( new_model_BODY_ptr );
+	imprinted_Body_from_Model_list.append(model_Body_ptr) ;
+	imprinted_BODY_from_Model_list.append(model_BODY_ptr) ;
+	copy_imprinted_BODY_from_Model_list.append(new_model_BODY_ptr) ;
+	}
+	}
 
-              // Imprint the BODYs (use the new copied BODY). If the imprint
-              // operation fails, the state of these BODYs is left unchanged.
-            if (imprint_BODYs(new_BODY_ptr, new_model_BODY_ptr) ==  CUBIT_SUCCESS )
-            {
-                 // DEBUG stuff, if the imprint operation succeeded.
-               if (webcut_debug_flag_on)
-               {
-                  AcisQueryEngine::instance()->save_ENTITY_as_sat_file(new_BODY_ptr,
-                                                "BODY1_after_imprint.sat",
-                                                "w");
-                  AcisQueryEngine::instance()->save_ENTITY_as_sat_file(new_model_BODY_ptr,
-                                                "BODY2_after_imprint.sat",
-                                                "w");
-               }
-            }
+	// Imprint the BODYs (use the new copied BODY). If the imprint
+	// operation fails, the state of these BODYs is left unchanged.
+	if (imprint_BODYs(new_BODY_ptr, new_model_BODY_ptr) ==  CUBIT_SUCCESS )
+	{
+	// DEBUG stuff, if the imprint operation succeeded.
+	if (webcut_debug_flag_on)
+	{
+	AcisQueryEngine::instance()->save_ENTITY_as_sat_file(new_BODY_ptr,
+	"BODY1_after_imprint.sat",
+	"w");
+	AcisQueryEngine::instance()->save_ENTITY_as_sat_file(new_model_BODY_ptr,
+	"BODY2_after_imprint.sat",
+	"w");
+	}
+	}
 
-            else
-            {
-               PRINT_WARNING ("Imprint operation failed.\n"
-                              "         Going back to the previous state");
+	else
+	{
+	PRINT_WARNING ("Imprint operation failed.\n"
+	"         Going back to the previous state");
 
-                 // Delete the new BODYs and return.
-               copy_new_webcut_BODY_list.reset() ;
-               int k;
-               for (k = 0 ; k < copy_new_webcut_BODY_list.size() ; k++)
-               {
-                  new_BODY_ptr = copy_new_webcut_BODY_list.get_and_step() ;
-                  AcisQueryEngine::instance()->delete_ACIS_BODY(first_BODY_ptr) ;
-               }
+	// Delete the new BODYs and return.
+	copy_new_webcut_BODY_list.reset() ;
+	int k;
+	for (k = 0 ; k < copy_new_webcut_BODY_list.size() ; k++)
+	{
+	new_BODY_ptr = copy_new_webcut_BODY_list.get_and_step() ;
+	AcisQueryEngine::instance()->delete_ACIS_BODY(first_BODY_ptr) ;
+	}
 
-               copy_imprinted_BODY_from_Model_list.reset() ;
-               for (k = 0 ; k < copy_imprinted_BODY_from_Model_list.size() ; k++)
-               {
-                  new_model_BODY_ptr = copy_imprinted_BODY_from_Model_list.get_and_step() ;
-                  AcisQueryEngine::instance()->delete_ACIS_BODY(new_model_BODY_ptr) ;
-               }
+	copy_imprinted_BODY_from_Model_list.reset() ;
+	for (k = 0 ; k < copy_imprinted_BODY_from_Model_list.size() ; k++)
+	{
+	new_model_BODY_ptr = copy_imprinted_BODY_from_Model_list.get_and_step() ;
+	AcisQueryEngine::instance()->delete_ACIS_BODY(new_model_BODY_ptr) ;
+	}
 
-               return ;
-            }
-         }
-      } // Loop over the new (webcut) BODYs
+	return ;
+	}
+	}
+	} // Loop over the new (webcut) BODYs
 
-   } // Loop over the existing Bodies in Model
-*/
-     // Now that we have come so far successfully, create the final list
-     // of new BODYs that will be used to create VGI Bodys.
-   new_webcut_BODY_list.clean_out() ;
+	} // Loop over the existing Bodies in Model
+      */
+      // Now that we have come so far successfully, create the final list
+      // of new BODYs that will be used to create VGI Bodys.
+      new_webcut_BODY_list.clean_out() ;
 
-     // First the BODYs that were copies of the webcut BODYs
-   BODY* new_BODY_ptr = NULL ;
-   copy_new_webcut_BODY_list.reset() ;
-   for (i = 0 ; i < copy_new_webcut_BODY_list.size() ; i++)
-   {
-      new_BODY_ptr = copy_new_webcut_BODY_list.get_and_step() ;
-      new_webcut_BODY_list.append(new_BODY_ptr) ;
-   }
-   just_webcut_BODY_list = new_webcut_BODY_list;
+      // First the BODYs that were copies of the webcut BODYs
+      BODY* new_BODY_ptr = NULL ;
+      copy_new_webcut_BODY_list.reset() ;
+      for (i = 0 ; i < copy_new_webcut_BODY_list.size() ; i++)
+	{
+	  new_BODY_ptr = copy_new_webcut_BODY_list.get_and_step() ;
+	  new_webcut_BODY_list.append(new_BODY_ptr) ;
+	}
+      just_webcut_BODY_list = new_webcut_BODY_list;
 
-/*
-     // Then the BODYs that were copies of Model BODYs
-   copy_imprinted_BODY_from_Model_list.reset() ;
-   for (i = 0 ; i < copy_imprinted_BODY_from_Model_list.size() ; i++)
-   {
+      /*
+      // Then the BODYs that were copies of Model BODYs
+      copy_imprinted_BODY_from_Model_list.reset() ;
+      for (i = 0 ; i < copy_imprinted_BODY_from_Model_list.size() ; i++)
+      {
       new_BODY_ptr = copy_imprinted_BODY_from_Model_list.get_and_step() ;
       new_webcut_BODY_list.append(new_BODY_ptr) ;
-   }
-*/
-     // now, two important lists:
-     // a) just_webcut_BODY_list: bodies in original bodies-to-be-webcut list
-     //        that were modified, either by webcut or by imprint
-     // b) new_webcut_BODY_list: all bodies modified by webcut or imprint,
-     //        including model bodies affected by imprint
+      }
+      */
+      // now, two important lists:
+      // a) just_webcut_BODY_list: bodies in original bodies-to-be-webcut list
+      //        that were modified, either by webcut or by imprint
+      // b) new_webcut_BODY_list: all bodies modified by webcut or imprint,
+      //        including model bodies affected by imprint
 
-   return;
-}
+      return;
+    }
 
-BODY* AcisModifyEngine::create_infinite_plane_cutting_tool(
-    const CubitVector &input_p1,
-    const CubitVector &input_p2,
-    const CubitVector &input_p3,
-    const SPAbox& box_to_cut,
-    bool just_face ) const
-{
-    // Create a plane from the vertices
-    // Note:  The old infinite plane code always swept in the opposite direction
-    //        from the normal of the passed in points, so we create the plane with
-    //        the points in opposite order.
-  CubitPlane p;
-  p.mk_plane_with_points(input_p3, input_p2, input_p1);
+  BODY* AcisModifyEngine::create_infinite_plane_cutting_tool(
+							     const CubitVector &input_p1,
+							     const CubitVector &input_p2,
+							     const CubitVector &input_p3,
+							     const SPAbox& box_to_cut,
+							     bool just_face ) const
+    {
+      // Create a plane from the vertices
+      // Note:  The old infinite plane code always swept in the opposite direction
+      //        from the normal of the passed in points, so we create the plane with
+      //        the points in opposite order.
+      CubitPlane p;
+      p.mk_plane_with_points(input_p3, input_p2, input_p1);
 
-    // Convert it to an ACIS plane
-  SPAunit_vector plane_normal(p.normal().x(),
-                           p.normal().y(),
-                           p.normal().z());
+      // Convert it to an ACIS plane
+      SPAunit_vector plane_normal(p.normal().x(),
+				  p.normal().y(),
+				  p.normal().z());
 
-  plane the_plane(SPAposition(input_p1.x(),
-                           input_p1.y(),
-                           input_p1.z()),
-                  plane_normal);
+      plane the_plane(SPAposition(input_p1.x(),
+				  input_p1.y(),
+				  input_p1.z()),
+		      plane_normal);
 
-  if (DEBUG_FLAG(18))
-    PRINT_DEBUG_18(
-                "plane created with root point (%g %g %g) and\n"
-                "  normal (%g %g %g).\n",
-                input_p1.x(),
-                input_p1.y(),
-                input_p1.z(),
-                plane_normal.x(),
-                plane_normal.y(),
-                plane_normal.z());
+      if (DEBUG_FLAG(18))
+	PRINT_DEBUG_18(
+		       "plane created with root point (%g %g %g) and\n"
+		       "  normal (%g %g %g).\n",
+		       input_p1.x(),
+		       input_p1.y(),
+		       input_p1.z(),
+		       plane_normal.x(),
+		       plane_normal.y(),
+		       plane_normal.z());
 
-    // Need to declare this up here so that it is outside of the API block
-  BODY* infinite_plane_BODY = NULL;
-  API_BEGIN;
+      // Need to declare this up here so that it is outside of the API block
+      BODY* infinite_plane_BODY = NULL;
+      API_BEGIN;
 
-    // Make a PLANE from it
-  PLANE* the_PLANE = new PLANE(the_plane);
+      // Make a PLANE from it
+      PLANE* the_PLANE = new PLANE(the_plane);
 
-    // Make a FACE out of it
-  FACE* planar_FACE = new FACE(NULL, NULL, the_PLANE, FORWARD);
+      // Make a FACE out of it
+      FACE* planar_FACE = new FACE(NULL, NULL, the_PLANE, FORWARD);
 
-    // Get the midpoint and diagonal length of the
-    // SPAbox this needs to fit around.  Make diag length a little
-    // bigger than necessary as a buffer.
-  SPAposition midpoint = box_to_cut.mid();
-  double diag_length = 1.01 * (box_to_cut.high() - midpoint).len();
+      // Get the midpoint and diagonal length of the
+      // SPAbox this needs to fit around.  Make diag length a little
+      // bigger than necessary as a buffer.
+      SPAposition midpoint = box_to_cut.mid();
+      double diag_length = 1.01 * (box_to_cut.high() - midpoint).len();
 
-    // Get the point on the plane that the SPAbox midpoint projects to.
-  ENTITY_LIST temp_list;
-  double distance;
-  double *dist_ptr = &distance;
-  ENTITY* entity_ptr = planar_FACE;
-    // Test points behind plane
-  result = api_ray_test_ents(midpoint, plane_normal, 1, 1, 1, &entity_ptr,
-                             temp_list, dist_ptr);
-  if (!result.ok())
-  {
-    AcisQueryEngine::instance()->ACIS_API_error(result);
-  }
-  if (temp_list.count() < 1)
-  {
-      // Test points in front of plane, if needed
-    result = api_ray_test_ents(midpoint, -plane_normal, 1, 1, 1, &entity_ptr,
-                               temp_list, dist_ptr);
-    if (!result.ok())
-    {
-      AcisQueryEngine::instance()->ACIS_API_error(result);
-    }
-      // Indicate that the distance is in front of the plane
-    distance = -distance;
-  }
+      // Get the point on the plane that the SPAbox midpoint projects to.
+      ENTITY_LIST temp_list;
+      double distance;
+      double *dist_ptr = &distance;
+      ENTITY* entity_ptr = planar_FACE;
+      // Test points behind plane
+      result = api_ray_test_ents(midpoint, plane_normal, 1, 1, 1, &entity_ptr,
+				 temp_list, dist_ptr);
+      if (!result.ok())
+	{
+	  AcisQueryEngine::instance()->ACIS_API_error(result);
+	}
+      if (temp_list.count() < 1)
+	{
+	  // Test points in front of plane, if needed
+	  result = api_ray_test_ents(midpoint, -plane_normal, 1, 1, 1, &entity_ptr,
+				     temp_list, dist_ptr);
+	  if (!result.ok())
+	    {
+	      AcisQueryEngine::instance()->ACIS_API_error(result);
+	    }
+	  // Indicate that the distance is in front of the plane
+	  distance = -distance;
+	}
 
-  if (DEBUG_FLAG(18))
-  {
-    PRINT_DEBUG_18(
-                "Midpoint before moving it: %g, %g, %g.\n",
-                midpoint.x(), midpoint.y(), midpoint.z());
-  }
+      if (DEBUG_FLAG(18))
+	{
+	  PRINT_DEBUG_18(
+			 "Midpoint before moving it: %g, %g, %g.\n",
+			 midpoint.x(), midpoint.y(), midpoint.z());
+	}
 
-    // Move midpoint from SPAbox to plane
-  midpoint += distance * plane_normal;
+      // Move midpoint from SPAbox to plane
+      midpoint += distance * plane_normal;
 
-  if (DEBUG_FLAG(18))
-  {
-    PRINT_DEBUG_18(
-                "just_face = %d.\n"
-                "The center of the box was %s the plane.\n",
-                just_face,
-                distance >= 0 ? "behind" : "in front of");
-    PRINT_DEBUG_18(
-                "Distance to center of box was determined to be %g.\n",
-                distance);
-    PRINT_DEBUG_18( "Mapped point is %g, %g, %g.\n",
-                midpoint.x(), midpoint.y(), midpoint.z());
-  }
+      if (DEBUG_FLAG(18))
+	{
+	  PRINT_DEBUG_18(
+			 "just_face = %d.\n"
+			 "The center of the box was %s the plane.\n",
+			 just_face,
+			 distance >= 0 ? "behind" : "in front of");
+	  PRINT_DEBUG_18(
+			 "Distance to center of box was determined to be %g.\n",
+			 distance);
+	  PRINT_DEBUG_18( "Mapped point is %g, %g, %g.\n",
+			  midpoint.x(), midpoint.y(), midpoint.z());
+	}
 
-    // Get 4 points on the plane that form a square with sides of
-    // length 2*diag_length.
-  SPAvector in_plane_1 = diag_length * normalise(the_plane.u_deriv);
-  SPAvector in_plane_2 = plane_normal * in_plane_1;
-  SPAposition corners[4];
-  corners[0] = midpoint - in_plane_1 - in_plane_2;
-  corners[1] = midpoint + in_plane_1 - in_plane_2;
-  corners[2] = midpoint + in_plane_1 + in_plane_2;
-  corners[3] = midpoint - in_plane_1 + in_plane_2;
-  if (DEBUG_FLAG(18))
-  {
-      // Uncomment this if you want to see the plane before it's swept
-//     GfxDebug::draw_line(
-//       corners[0].x(), corners[0].y(), corners[0].z(),
-//       corners[1].x(), corners[1].y(), corners[1].z(), CUBIT_RED);
-//     GfxDebug::draw_line(
-//       corners[1].x(), corners[1].y(), corners[1].z(),
-//       corners[2].x(), corners[2].y(), corners[2].z(), CUBIT_GREEN);
-//     GfxDebug::draw_line(
-//       corners[2].x(), corners[2].y(), corners[2].z(),
-//       corners[3].x(), corners[3].y(), corners[3].z(), CUBIT_BLUE);
-//     GfxDebug::draw_line(
-//       corners[3].x(), corners[3].y(), corners[3].z(),
-//       corners[0].x(), corners[0].y(), corners[0].z(), CUBIT_CYAN);
-//     GfxDebug::draw_line(
-//       midpoint.x(), midpoint.y(), midpoint.z(),
-//       midpoint.x()+plane_normal.x(),
-//       midpoint.y()+plane_normal.y(),
-//       midpoint.z()+plane_normal.z(), CUBIT_BLUE);
-//     GfxDebug::flush();
-
-    PRINT_DEBUG_18( "Diag length is %g.\n"
-                "Got four corners: (%g %g %g)\n"
-                "                  (%g %g %g).\n"
-                "                  (%g %g %g).\n"
-                "                  (%g %g %g).\n",
-                diag_length,
-                corners[0].x(), corners[0].y(), corners[0].z(),
-                corners[1].x(), corners[1].y(), corners[1].z(),
-                corners[2].x(), corners[2].y(), corners[2].z(),
-                corners[3].x(), corners[3].y(), corners[3].z());
-  }
-    // Make some geometry and topology from the corners
-  STRAIGHT* S[4];
-  S[0] = new STRAIGHT(corners[0], normalise(in_plane_1));
-  S[1] = new STRAIGHT(corners[1], normalise(in_plane_2));
-  S[2] = new STRAIGHT(corners[2], normalise(-in_plane_1));
-  S[3] = new STRAIGHT(corners[3], normalise(-in_plane_2));
-  APOINT* P[4];
-  VERTEX* V[4];
-  EDGE*   E[4];
-  COEDGE* CE[4];
-  int i;
-  for ( i = 0; i < 4; i++)
-  {
-    P[i] = new APOINT (corners[i]);
-    V[i] = new VERTEX (P[i]);
-  }
-  CE[0] = NULL;
-  for (i = 0; i < 4; i++)
-  {
-    E[i] = new EDGE(V[i], V[(i+ 1)%4], S[i], FORWARD);
-    CE[i] = new COEDGE(E[i], FORWARD,
-                       i == 0 ? NULL : CE[i-1],
-                       i == 3 ? CE[0] : NULL);
-  }
-  LOOP* LOOP1 = new LOOP (CE[0], NULL);
-  FACE* FACE1 = new FACE (LOOP1, NULL, the_PLANE, FORWARD);
-  SHELL* SHELL1 = new SHELL(FACE1, NULL, NULL);
-  LUMP* LUMP1 = new LUMP(SHELL1, NULL);
-  infinite_plane_BODY = new BODY(LUMP1);
-    // At this point we are done with planar_FACE.  It has been replaced by
-    // a FACE that is bounded by a LOOPm FACE1.
-  planar_FACE->lose();
-    // Let's make sure everything went as planned.
-  if (infinite_plane_BODY != NULL)
-  {
-    result = api_body_to_2d(infinite_plane_BODY);
-    if (!result.ok() || infinite_plane_BODY == NULL)
-    {
-      PRINT_ERROR("Unable to create infinite plane.\n");
-      AcisQueryEngine::instance()->ACIS_API_error(result);
-      infinite_plane_BODY = NULL;
-    }
-      // Just leave it as a 2D body if we are creating a sheet, or
-      // if the plane never intersects the input box_to_cut.
-    else if (!just_face && distance < diag_length && distance > -diag_length)
-    {
-        // Now sweep the FACE to make a 3D body
+      // Get 4 points on the plane that form a square with sides of
+      // length 2*diag_length.
+      SPAvector in_plane_1 = diag_length * normalise(the_plane.u_deriv);
+      SPAvector in_plane_2 = plane_normal * in_plane_1;
+      SPAposition corners[4];
+      corners[0] = midpoint - in_plane_1 - in_plane_2;
+      corners[1] = midpoint + in_plane_1 - in_plane_2;
+      corners[2] = midpoint + in_plane_1 + in_plane_2;
+      corners[3] = midpoint - in_plane_1 + in_plane_2;
       if (DEBUG_FLAG(18))
-        PRINT_DEBUG_18(
-                    "Sweeping (%g %g %g).\n",
-                    ((diag_length-distance)*plane_normal).x(),
-                    ((diag_length-distance)*plane_normal).y(),
-                    ((diag_length-distance)*plane_normal).z());
+	{
+	  // Uncomment this if you want to see the plane before it's swept
+	  //     GfxDebug::draw_line(
+	  //       corners[0].x(), corners[0].y(), corners[0].z(),
+	  //       corners[1].x(), corners[1].y(), corners[1].z(), CUBIT_RED);
+	  //     GfxDebug::draw_line(
+	  //       corners[1].x(), corners[1].y(), corners[1].z(),
+	  //       corners[2].x(), corners[2].y(), corners[2].z(), CUBIT_GREEN);
+	  //     GfxDebug::draw_line(
+	  //       corners[2].x(), corners[2].y(), corners[2].z(),
+	  //       corners[3].x(), corners[3].y(), corners[3].z(), CUBIT_BLUE);
+	  //     GfxDebug::draw_line(
+	  //       corners[3].x(), corners[3].y(), corners[3].z(),
+	  //       corners[0].x(), corners[0].y(), corners[0].z(), CUBIT_CYAN);
+	  //     GfxDebug::draw_line(
+	  //       midpoint.x(), midpoint.y(), midpoint.z(),
+	  //       midpoint.x()+plane_normal.x(),
+	  //       midpoint.y()+plane_normal.y(),
+	  //       midpoint.z()+plane_normal.z(), CUBIT_BLUE);
+	  //     GfxDebug::flush();
 
-        // A negative distance means that it was in front of the plane, so
-        // we need to sweep extra distance.  A positive distance means behind the
-        // plane, so we don't need to sweep as far.
-      sweep_options sweep_ops;
-      logical ACIS_primary_side = true;
-      sweep_ops.set_which_side(ACIS_primary_side);
-      result = api_sweep_with_options(FACE1,
-                                      (diag_length-distance)*plane_normal,
-                                      &sweep_ops,
-                                      infinite_plane_BODY);
-      if (!result.ok())
-      {
-        PRINT_ERROR("In GeometryModifyTool::create_infinite_plane_cutting_tool.\n"
-                    "       Problem sweeping the infinite plane.\n");
-        AcisQueryEngine::instance()->ACIS_API_error(result);
-        infinite_plane_BODY = NULL;
-      }
-    }
-    else if (DEBUG_FLAG(18))
-      PRINT_DEBUG_18( "Not sweeping the infinite plane.\n");
-  }
+	  PRINT_DEBUG_18( "Diag length is %g.\n"
+			  "Got four corners: (%g %g %g)\n"
+			  "                  (%g %g %g).\n"
+			  "                  (%g %g %g).\n"
+			  "                  (%g %g %g).\n",
+			  diag_length,
+			  corners[0].x(), corners[0].y(), corners[0].z(),
+			  corners[1].x(), corners[1].y(), corners[1].z(),
+			  corners[2].x(), corners[2].y(), corners[2].z(),
+			  corners[3].x(), corners[3].y(), corners[3].z());
+	}
+      // Make some geometry and topology from the corners
+      STRAIGHT* S[4];
+      S[0] = new STRAIGHT(corners[0], normalise(in_plane_1));
+      S[1] = new STRAIGHT(corners[1], normalise(in_plane_2));
+      S[2] = new STRAIGHT(corners[2], normalise(-in_plane_1));
+      S[3] = new STRAIGHT(corners[3], normalise(-in_plane_2));
+      APOINT* P[4];
+      VERTEX* V[4];
+      EDGE*   E[4];
+      COEDGE* CE[4];
+      int i;
+      for ( i = 0; i < 4; i++)
+	{
+	  P[i] = new APOINT (corners[i]);
+	  V[i] = new VERTEX (P[i]);
+	}
+      CE[0] = NULL;
+      for (i = 0; i < 4; i++)
+	{
+	  E[i] = new EDGE(V[i], V[(i+ 1)%4], S[i], FORWARD);
+	  CE[i] = new COEDGE(E[i], FORWARD,
+			     i == 0 ? NULL : CE[i-1],
+			     i == 3 ? CE[0] : NULL);
+	}
+      LOOP* LOOP1 = new LOOP (CE[0], NULL);
+      FACE* FACE1 = new FACE (LOOP1, NULL, the_PLANE, FORWARD);
+      SHELL* SHELL1 = new SHELL(FACE1, NULL, NULL);
+      LUMP* LUMP1 = new LUMP(SHELL1, NULL);
+      infinite_plane_BODY = new BODY(LUMP1);
+      // At this point we are done with planar_FACE.  It has been replaced by
+      // a FACE that is bounded by a LOOPm FACE1.
+      planar_FACE->lose();
+      // Let's make sure everything went as planned.
+      if (infinite_plane_BODY != NULL)
+	{
+	  result = api_body_to_2d(infinite_plane_BODY);
+	  if (!result.ok() || infinite_plane_BODY == NULL)
+	    {
+	      PRINT_ERROR("Unable to create infinite plane.\n");
+	      AcisQueryEngine::instance()->ACIS_API_error(result);
+	      infinite_plane_BODY = NULL;
+	    }
+	  // Just leave it as a 2D body if we are creating a sheet, or
+	  // if the plane never intersects the input box_to_cut.
+	  else if (!just_face && distance < diag_length && distance > -diag_length)
+	    {
+	      // Now sweep the FACE to make a 3D body
+	      if (DEBUG_FLAG(18))
+		PRINT_DEBUG_18(
+			       "Sweeping (%g %g %g).\n",
+			       ((diag_length-distance)*plane_normal).x(),
+			       ((diag_length-distance)*plane_normal).y(),
+			       ((diag_length-distance)*plane_normal).z());
 
-  API_END;
+	      // A negative distance means that it was in front of the plane, so
+	      // we need to sweep extra distance.  A positive distance means behind the
+	      // plane, so we don't need to sweep as far.
+	      sweep_options sweep_ops;
+	      logical ACIS_primary_side = true;
+	      sweep_ops.set_which_side(ACIS_primary_side);
+	      result = api_sweep_with_options(FACE1,
+					      (diag_length-distance)*plane_normal,
+					      &sweep_ops,
+					      infinite_plane_BODY);
+	      if (!result.ok())
+		{
+		  PRINT_ERROR("In GeometryModifyTool::create_infinite_plane_cutting_tool.\n"
+			      "       Problem sweeping the infinite plane.\n");
+		  AcisQueryEngine::instance()->ACIS_API_error(result);
+		  infinite_plane_BODY = NULL;
+		}
+	    }
+	  else if (DEBUG_FLAG(18))
+	    PRINT_DEBUG_18( "Not sweeping the infinite plane.\n");
+	}
 
-  return infinite_plane_BODY;
-}
+      API_END;
 
-//***********************************************************
-// Function: create_solid_bodies_from_surfs
-// Description: This function assumes that the reffaces sent into
-// this function are either sheet bodies, or free surfaces.  This
-// Will have been taken care of in the calling function.  GT?
-// All the surfaces, in ACIS, will be turned into sheet bodies.  They
-// will be united, then the void enclosed.  The result will be healed
-// if the option is specified (default is to heal, from experience).
-// This function will not create new reffaces.
-//***********************************************************
-CubitStatus AcisModifyEngine::create_solid_bodies_from_surfs( DLIList<Surface*> &ref_face_list,
-                                                      DLIList<BodySM*> &new_bodies,
-                                                      bool keep_old,
-                                                      bool heal ) const
-{
-  int ii;
-  Surface* ref_face;
-  outcome rc;
-    //First sort the ref_face_list to sheet_bodies and free faces.
-  DLIList<BodySM*> body_list;
-  DLIList<Surface*> free_faces;
+      return infinite_plane_BODY;
+    }
 
-  AcisQueryEngine* aqe = AcisQueryEngine::instance();
+  //***********************************************************
+  // Function: create_solid_bodies_from_surfs
+  // Description: This function assumes that the reffaces sent into
+  // this function are either sheet bodies, or free surfaces.  This
+  // Will have been taken care of in the calling function.  GT?
+  // All the surfaces, in ACIS, will be turned into sheet bodies.  They
+  // will be united, then the void enclosed.  The result will be healed
+  // if the option is specified (default is to heal, from experience).
+  // This function will not create new reffaces.
+  //***********************************************************
+  CubitStatus AcisModifyEngine::create_solid_bodies_from_surfs( DLIList<Surface*> &ref_face_list,
+								DLIList<BodySM*> &new_bodies,
+								bool keep_old,
+								bool heal ) const
+    {
+      int ii;
+      Surface* ref_face;
+      outcome rc;
+      //First sort the ref_face_list to sheet_bodies and free faces.
+      DLIList<BodySM*> body_list;
+      DLIList<Surface*> free_faces;
 
-  ref_face_list.reset();
-  for( ii = ref_face_list.size(); ii > 0; ii-- )
-  {
-    ref_face = ref_face_list.get_and_step();
-    FACE* FACE_ptr = aqe->get_FACE(ref_face);
-    BodySM* body_ptr = aqe->get_body_sm_of_ENTITY(FACE_ptr);
+      AcisQueryEngine* aqe = AcisQueryEngine::instance();
 
-    if (body_ptr)
-      body_list.append_unique(body_ptr);
-    else
-      free_faces.append_unique(ref_face);
-  }
+      ref_face_list.reset();
+      for( ii = ref_face_list.size(); ii > 0; ii-- )
+	{
+	  ref_face = ref_face_list.get_and_step();
+	  FACE* FACE_ptr = aqe->get_FACE(ref_face);
+	  BodySM* body_ptr = aqe->get_body_sm_of_ENTITY(FACE_ptr);
 
-    //Now for all of the free_faces, create BODYS for them.
-  DLIList<BODY*> BODY_list, old_BODY_list;
-  for ( ii = free_faces.size(); ii > 0; ii-- )
-  {
-    ref_face = free_faces.get_and_step();
-    FACE *acis_FACE = AcisQueryEngine::get_FACE(ref_face);
-    if (!acis_FACE)
-      return CUBIT_FAILURE;
+	  if (body_ptr)
+	    body_list.append_unique(body_ptr);
+	  else
+	    free_faces.append_unique(ref_face);
+	}
 
-    FACE *face_list[1];
-    BODY *sheet_body;
-    face_list[0] = acis_FACE;
-    rc = api_sheet_from_ff(1, face_list, sheet_body);
-    if (!rc.ok())
-    {
-      PRINT_ERROR("Couldn't build a volume with Surface.\n") ;
-      for (int jj = BODY_list.size(); jj > 0; jj-- )
-        AcisQueryEngine::instance()->delete_ACIS_BODY(BODY_list.remove());
-      AcisQueryEngine::instance()->ACIS_API_error (rc);
-      return CUBIT_FAILURE;
-    }
-    rc = api_body_to_2d(sheet_body);
-    if (!rc.ok())
-    {
-      PRINT_ERROR("Couldn't build a volume with Surface.\n" );
-      for (int jj = BODY_list.size(); jj > 0; jj-- )
-        AcisQueryEngine::instance()->delete_ACIS_BODY(BODY_list.remove());
-      AcisQueryEngine::instance()->ACIS_API_error (rc);
-      return CUBIT_FAILURE;
-    }
-      // Make sure we were successful
-    if ( sheet_body->lump() == NULL ||
-         sheet_body->lump()->shell() == NULL ||
-         sheet_body->lump()->shell()->first_face() == NULL )
-    {
-      PRINT_ERROR("Couldn't build a volume with Surface.\n" );
-      for (int jj = BODY_list.size(); jj > 0; jj-- )
-        AcisQueryEngine::instance()->delete_ACIS_BODY(BODY_list.remove());
-      return CUBIT_FAILURE;
-    }
-    BODY_list.append(sheet_body);
-  }
-  BODY *first_BODY = NULL;
+      //Now for all of the free_faces, create BODYS for them.
+      DLIList<BODY*> BODY_list, old_BODY_list;
+      for ( ii = free_faces.size(); ii > 0; ii-- )
+	{
+	  ref_face = free_faces.get_and_step();
+	  FACE *acis_FACE = AcisQueryEngine::get_FACE(ref_face);
+	  if (!acis_FACE)
+	    return CUBIT_FAILURE;
 
-  for ( ii = body_list.size(); ii > 0; ii-- )
-  {
-    BodySM *body_ptr = body_list.get_and_step();
-    BODY *BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
-    if (!BODY_ptr)
-      return CUBIT_FAILURE;
+	  FACE *face_list[1];
+	  BODY *sheet_body;
+	  face_list[0] = acis_FACE;
+	  rc = api_sheet_from_ff(1, face_list, sheet_body);
+	  if (!rc.ok())
+	    {
+	      PRINT_ERROR("Couldn't build a volume with Surface.\n") ;
+	      for (int jj = BODY_list.size(); jj > 0; jj-- )
+		AcisQueryEngine::instance()->delete_ACIS_BODY(BODY_list.remove());
+	      AcisQueryEngine::instance()->ACIS_API_error (rc);
+	      return CUBIT_FAILURE;
+	    }
+	  rc = api_body_to_2d(sheet_body);
+	  if (!rc.ok())
+	    {
+	      PRINT_ERROR("Couldn't build a volume with Surface.\n" );
+	      for (int jj = BODY_list.size(); jj > 0; jj-- )
+		AcisQueryEngine::instance()->delete_ACIS_BODY(BODY_list.remove());
+	      AcisQueryEngine::instance()->ACIS_API_error (rc);
+	      return CUBIT_FAILURE;
+	    }
+	  // Make sure we were successful
+	  if ( sheet_body->lump() == NULL ||
+	       sheet_body->lump()->shell() == NULL ||
+	       sheet_body->lump()->shell()->first_face() == NULL )
+	    {
+	      PRINT_ERROR("Couldn't build a volume with Surface.\n" );
+	      for (int jj = BODY_list.size(); jj > 0; jj-- )
+		AcisQueryEngine::instance()->delete_ACIS_BODY(BODY_list.remove());
+	      return CUBIT_FAILURE;
+	    }
+	  BODY_list.append(sheet_body);
+	}
+      BODY *first_BODY = NULL;
 
-    if (first_BODY == NULL )
-      first_BODY = BODY_ptr;
-    BODY_list.append(BODY_ptr);
-    old_BODY_list.append(BODY_ptr);
-  }
-    //Okay unite all of these bodies into one body.
-  BODY_list.reset();
-  int new_ids = GeometryModifyTool::instance()->get_new_ids();
-  bool delete_attribs = (new_ids || keep_old);
-  BODY *master;
+      for ( ii = body_list.size(); ii > 0; ii-- )
+	{
+	  BodySM *body_ptr = body_list.get_and_step();
+	  BODY *BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
+	  if (!BODY_ptr)
+	    return CUBIT_FAILURE;
 
-  //if we're not healing, we're assuming the surfaces have gaps between each other
-  //less than 1e-6, so we'll use stitching, otherwise we assume the gaps are bigger than
-  //1e-6 and we'll us api_combine_body, and subsequently we'll heal
-  ENTITY_LIST bodies_to_be_stitched;
+	  if (first_BODY == NULL )
+	    first_BODY = BODY_ptr;
+	  BODY_list.append(BODY_ptr);
+	  old_BODY_list.append(BODY_ptr);
+	}
+      //Okay unite all of these bodies into one body.
+      BODY_list.reset();
+      int new_ids = GeometryModifyTool::instance()->get_new_ids();
+      bool delete_attribs = (new_ids || keep_old);
+      BODY *master;
 
-  if ( first_BODY )
-  {
-    master = this->copy_BODY(first_BODY, delete_attribs);
-    BODY_list.remove(first_BODY);
-  }
-  else
-    master = this->copy_BODY(BODY_list.remove(), delete_attribs);
+      //if we're not healing, we're assuming the surfaces have gaps between each other
+      //less than 1e-6, so we'll use stitching, otherwise we assume the gaps are bigger than
+      //1e-6 and we'll us api_combine_body, and subsequently we'll heal
+      ENTITY_LIST bodies_to_be_stitched;
 
-  if( !heal )
-    bodies_to_be_stitched.add( master );
+      if ( first_BODY )
+	{
+	  master = this->copy_BODY(first_BODY, delete_attribs);
+	  BODY_list.remove(first_BODY);
+	}
+      else
+	master = this->copy_BODY(BODY_list.remove(), delete_attribs);
 
-  for ( ii = BODY_list.size(); ii > 0; ii-- )
-  {
-    BODY *BODY_ptr = BODY_list.get_and_step();
-    BODY *copy = this->copy_BODY(BODY_ptr, delete_attribs);
-    if (copy == NULL)
-    {
-      AcisQueryEngine::instance()->delete_ACIS_BODY(master);
-      return CUBIT_FAILURE;
-    }
-    if( !heal )
-      bodies_to_be_stitched.add( copy );
-    else
-    {
-      outcome result = api_combine_body(copy, master );
+      if( !heal )
+	bodies_to_be_stitched.add( master );
 
-      if (!result.ok() || (!master ))
-      {
-        // If there are no LUMPs in the resulting BODY, return with a failure
-        if (master == NULL)
-          PRINT_ERROR("In AcisModifyEngine::create_solid_bodies_from_surfs\n");
+      for ( ii = BODY_list.size(); ii > 0; ii-- )
+	{
+	  BODY *BODY_ptr = BODY_list.get_and_step();
+	  BODY *copy = this->copy_BODY(BODY_ptr, delete_attribs);
+	  if (copy == NULL)
+	    {
+	      AcisQueryEngine::instance()->delete_ACIS_BODY(master);
+	      return CUBIT_FAILURE;
+	    }
+	  if( !heal )
+	    bodies_to_be_stitched.add( copy );
+	  else
+	    {
+	      outcome result = api_combine_body(copy, master );
 
-        AcisQueryEngine::instance()->ACIS_API_error(result, "create body from surfs");
-        if (master != NULL) AcisQueryEngine::instance()->delete_ACIS_BODY(master);
-        if (copy   != NULL) AcisQueryEngine::instance()->delete_ACIS_BODY(copy);
+	      if (!result.ok() || (!master ))
+		{
+		  // If there are no LUMPs in the resulting BODY, return with a failure
+		  if (master == NULL)
+		    PRINT_ERROR("In AcisModifyEngine::create_solid_bodies_from_surfs\n");
 
-        return CUBIT_FAILURE;
-      }
-    }
-  }
+		  AcisQueryEngine::instance()->ACIS_API_error(result, "create body from surfs");
+		  if (master != NULL) AcisQueryEngine::instance()->delete_ACIS_BODY(master);
+		  if (copy   != NULL) AcisQueryEngine::instance()->delete_ACIS_BODY(copy);
 
-  if( !heal )
-  {
-    ENTITY_LIST dummy_list, resultant_bodies;
-    tolerant_stitch_options stitch_opts;
-    //surfaces better be between GEOMETRY_RESABS or else fail
-    stitch_opts.set_max_stitch_tol( GEOMETRY_RESABS );
-    outcome result = api_stitch( bodies_to_be_stitched, dummy_list, resultant_bodies, &stitch_opts );
+		  return CUBIT_FAILURE;
+		}
+	    }
+	}
 
-    master = (BODY*)dummy_list.first();
+      if( !heal )
+	{
+	  ENTITY_LIST dummy_list, resultant_bodies;
+	  tolerant_stitch_options stitch_opts;
+	  //surfaces better be between GEOMETRY_RESABS or else fail
+	  stitch_opts.set_max_stitch_tol( GEOMETRY_RESABS );
+	  outcome result = api_stitch( bodies_to_be_stitched, dummy_list, resultant_bodies, &stitch_opts );
 
-    if (!result.ok() || (!master ))
-    {
-      // If there are no LUMPs in the resulting BODY, return with a failure
-      if (master == NULL)
-        PRINT_ERROR("In AcisModifyEngine::create_solid_bodies_from_surfs\n");
+	  master = (BODY*)dummy_list.first();
 
-      AcisQueryEngine::instance()->ACIS_API_error(result, "create body from surfs");
-      if (master != NULL) AcisQueryEngine::instance()->delete_ACIS_BODY(master);
+	  if (!result.ok() || (!master ))
+	    {
+	      // If there are no LUMPs in the resulting BODY, return with a failure
+	      if (master == NULL)
+		PRINT_ERROR("In AcisModifyEngine::create_solid_bodies_from_surfs\n");
 
-      return CUBIT_FAILURE;
-    }
-  }
+	      AcisQueryEngine::instance()->ACIS_API_error(result, "create body from surfs");
+	      if (master != NULL) AcisQueryEngine::instance()->delete_ACIS_BODY(master);
 
-    // If all went well, delete the old Bodies
-  DLIList<TopologyBridge*> old_entities;
-  body_list.reset() ;
+	      return CUBIT_FAILURE;
+	    }
+	}
 
-  CAST_LIST_TO_PARENT(body_list, old_entities);
+      // If all went well, delete the old Bodies
+      DLIList<TopologyBridge*> old_entities;
+      body_list.reset() ;
 
-  for ( ii = free_faces.size(); ii > 0; ii-- )
-    old_entities.append(free_faces.get_and_step());
+      CAST_LIST_TO_PARENT(body_list, old_entities);
 
-/*
-  if (!keep_old )
-  {
-    for( ii = body_list.size(); ii > 0; ii--)
-    {
-      Body* body_ptr = body_list.get_and_step() ;
-      GeometryModifyTool::instance()->delete_Body(body_ptr) ;
-    }
-    for ( ii = free_faces.size(); ii > 0; ii-- )
-    {
-      RefFace *ref_ptr = free_faces.get_and_step();
-      RefEntity *ref_entity_ptr = CAST_TO(ref_ptr, RefEntity);
-      GeometryModifyTool::instance()->delete_RefEntity(ref_entity_ptr);
-    }
-  }
-*/
+      for ( ii = free_faces.size(); ii > 0; ii-- )
+	old_entities.append(free_faces.get_and_step());
 
-  BODY *new_master = master;
+      /*
+	if (!keep_old )
+	{
+	for( ii = body_list.size(); ii > 0; ii--)
+	{
+	Body* body_ptr = body_list.get_and_step() ;
+	GeometryModifyTool::instance()->delete_Body(body_ptr) ;
+	}
+	for ( ii = free_faces.size(); ii > 0; ii-- )
+	{
+	RefFace *ref_ptr = free_faces.get_and_step();
+	RefEntity *ref_entity_ptr = CAST_TO(ref_ptr, RefEntity);
+	GeometryModifyTool::instance()->delete_RefEntity(ref_entity_ptr);
+	}
+	}
+      */
+
+      BODY *new_master = master;
 #ifdef ACIS_HEALER
-//  BODY *new_master = master;
-  if ( heal )
-  {
+      //  BODY *new_master = master;
+      if ( heal )
+	{
 
-      // Now heal the combined body
-    PRINT_INFO(" Healing the combined volume...\n");
-    if( AcisHealerTool::instance()->init_BODY_for_healing( master ) == CUBIT_SUCCESS )
-    {
-      int percent_before, percent_after, number_splines_simplified;
-      if( AcisHealerTool::instance()->heal_BODY( master, percent_before,
-                                                 percent_after, number_splines_simplified ) == CUBIT_FAILURE )
-        PRINT_ERROR( "Error healing the combined volume\n" );
-      else
-        PRINT_INFO( "Healed the combined volume to %d%% good geometry.\n", percent_after );
-      AcisHealerTool::instance()->end_BODY_for_healing( master );
-    }
-  }
+	  // Now heal the combined body
+	  PRINT_INFO(" Healing the combined volume...\n");
+	  if( AcisHealerTool::instance()->init_BODY_for_healing( master ) == CUBIT_SUCCESS )
+	    {
+	      int percent_before, percent_after, number_splines_simplified;
+	      if( AcisHealerTool::instance()->heal_BODY( master, percent_before,
+							 percent_after, number_splines_simplified ) == CUBIT_FAILURE )
+		PRINT_ERROR( "Error healing the combined volume\n" );
+	      else
+		PRINT_INFO( "Healed the combined volume to %d%% good geometry.\n", percent_after );
+	      AcisHealerTool::instance()->end_BODY_for_healing( master );
+	    }
+	}
 #else
-  PRINT_WARNING("Healer was not included with this version.\n"
-                " Volume healing is usually required for creating\n"
-                " volumes out of surfaces.\n");
+      PRINT_WARNING("Healer was not included with this version.\n"
+		    " Volume healing is usually required for creating\n"
+		    " volumes out of surfaces.\n");
 #endif
 
-  //Gather all the FACEs from resultant BODY
-  ENTITY_LIST tmp_FACEs;
-  api_get_faces( new_master, tmp_FACEs );
-  FACE **tmp_FACE_array = new FACE*[tmp_FACEs.count()];
-  tmp_FACEs.init();
-  ENTITY *tmp_ent = NULL;
-  while( (tmp_ent = tmp_FACEs.next()) != NULL)
-    tmp_FACE_array[ii++] = static_cast<FACE*>(tmp_ent);
+      //Gather all the FACEs from resultant BODY
+      ENTITY_LIST tmp_FACEs;
+      api_get_faces( new_master, tmp_FACEs );
+      FACE **tmp_FACE_array = new FACE*[tmp_FACEs.count()];
+      tmp_FACEs.init();
+      ENTITY *tmp_ent = NULL;
+      while( (tmp_ent = tmp_FACEs.next()) != NULL)
+	tmp_FACE_array[ii++] = static_cast<FACE*>(tmp_ent);
 
-  //lets make sure that there are not inappropriate intersections between FACEs
-  ENTITY_LIST insane_ents;
-  logical bad_ints = true;
-  api_check_list_ff_ints( tmp_FACEs.count(), tmp_FACE_array, &insane_ents, bad_ints );
+      //lets make sure that there are not inappropriate intersections between FACEs
+      ENTITY_LIST insane_ents;
+      logical bad_ints = true;
+      api_check_list_ff_ints( tmp_FACEs.count(), tmp_FACE_array, &insane_ents, bad_ints );
 
-  delete [] tmp_FACE_array;
+      delete [] tmp_FACE_array;
 
-  if( insane_ents.count() || bad_ints )
-  {
-    PRINT_INFO("Bad surface-surface intersections\n");
-    insane_ents.init();
-    while( (tmp_ent=insane_ents.next()) != NULL)
-    {
-      ERROR_ENTITY *error_ent = static_cast<ERROR_ENTITY*>(tmp_ent);
-      PRINT_ERROR("ACIS error number %d %s\n", error_ent->get_error_id(),
-                              find_err_mess (error_ent->get_error_id()));
-    }
-    api_delent( new_master );
-    return CUBIT_FAILURE;
-  }
+      if( insane_ents.count() || bad_ints )
+	{
+	  PRINT_INFO("Bad surface-surface intersections\n");
+	  insane_ents.init();
+	  while( (tmp_ent=insane_ents.next()) != NULL)
+	    {
+	      ERROR_ENTITY *error_ent = static_cast<ERROR_ENTITY*>(tmp_ent);
+	      PRINT_ERROR("ACIS error number %d %s\n", error_ent->get_error_id(),
+			  find_err_mess (error_ent->get_error_id()));
+	    }
+	  api_delent( new_master );
+	  return CUBIT_FAILURE;
+	}
 
-  //separate the bodies so that you have no multi-volume bodies
-  ENTITY_LIST separated_bodies;
-  BODY **new_BODY_list;
-  int n_bodies;
-  api_separate_body( new_master, n_bodies, new_BODY_list );
+      //separate the bodies so that you have no multi-volume bodies
+      ENTITY_LIST separated_bodies;
+      BODY **new_BODY_list;
+      int n_bodies;
+      api_separate_body( new_master, n_bodies, new_BODY_list );
 
-  DLIList<BODY*> new_BODIES;
-  int i;
-  for( i=0; i<n_bodies; i++ )
-    new_BODIES.append( new_BODY_list[i] );
+      DLIList<BODY*> new_BODIES;
+      int i;
+      for( i=0; i<n_bodies; i++ )
+	new_BODIES.append( new_BODY_list[i] );
 
-  CubitStatus success =
-    get_new_Body(old_entities, new_BODIES, new_bodies, keep_old);
+      CubitStatus success =
+	get_new_Body(old_entities, new_BODIES, new_bodies, keep_old);
 
-  if ( new_bodies.size() == 0 )
-  {
-    PRINT_ERROR("Problems creating new volume.\n" );
-    return CUBIT_FAILURE;
-  }
-  return CUBIT_SUCCESS;
-}
+      if ( new_bodies.size() == 0 )
+	{
+	  PRINT_ERROR("Problems creating new volume.\n" );
+	  return CUBIT_FAILURE;
+	}
+      return CUBIT_SUCCESS;
+    }
 
-// Currently no command line to this
-CubitStatus AcisModifyEngine::webcut_across_translate(
-                                                 DLIList<BodySM*>& body_list,
-                                                 Surface* top_surf_ptr,
-                                                 Surface* bottom_surf_ptr,
-                                                 DLIList<BodySM*>& ,
-                                                 bool  ) const
-{
-   CubitVector top_orig, top_norm, bottom_orig, bottom_norm;
-   double top_orig_pnt[3], top_norm_vec[3], bottom_orig_pnt[3], bottom_norm_vec[3];
-   //CubitVector top_sweep_vector, bottom_sweep_vector;
-   double distance;
-   int i, ii;
-   BodySM* body_ptr;
-   Surface* ref_face_ptr;
-   FACE* FACE_ptr;
-   FACE* copied_FACE_ptr;
-   ENTITY *entity_ptr;
-   DLIList<BODY*> tool_BODY_list;
-   //int volume_is_negative;
-   AgtSide side;
-   AgtOrientation orien;
-   outcome result;
+  // Currently no command line to this
+  CubitStatus AcisModifyEngine::webcut_across_translate(
+							DLIList<BodySM*>& body_list,
+							Surface* top_surf_ptr,
+							Surface* bottom_surf_ptr,
+							DLIList<BodySM*>& ,
+							bool  ) const
+    {
+      CubitVector top_orig, top_norm, bottom_orig, bottom_norm;
+      double top_orig_pnt[3], top_norm_vec[3], bottom_orig_pnt[3], bottom_norm_vec[3];
+      //CubitVector top_sweep_vector, bottom_sweep_vector;
+      double distance;
+      int i, ii;
+      BodySM* body_ptr;
+      Surface* ref_face_ptr;
+      FACE* FACE_ptr;
+      FACE* copied_FACE_ptr;
+      ENTITY *entity_ptr;
+      DLIList<BODY*> tool_BODY_list;
+      //int volume_is_negative;
+      AgtSide side;
+      AgtOrientation orien;
+      outcome result;
 
-   AnalyticGeometryTool* agt = AnalyticGeometryTool::instance();
+      AnalyticGeometryTool* agt = AnalyticGeometryTool::instance();
 
-   // Find top plane
-   if( top_surf_ptr->get_point_normal( top_orig, top_norm ) == CUBIT_FAILURE )
-   {
-      PRINT_ERROR( "Surface is not planar\n" );
-      return CUBIT_FAILURE;
-   }
+      // Find top plane
+      if( top_surf_ptr->get_point_normal( top_orig, top_norm ) == CUBIT_FAILURE )
+	{
+	  PRINT_ERROR( "Surface is not planar\n" );
+	  return CUBIT_FAILURE;
+	}
 
-   if( bottom_surf_ptr->get_point_normal( bottom_orig, bottom_norm ) == CUBIT_FAILURE )
-   {
-      PRINT_ERROR( "Surface is not planar\n" );
-      return CUBIT_FAILURE;
-   }
+      if( bottom_surf_ptr->get_point_normal( bottom_orig, bottom_norm ) == CUBIT_FAILURE )
+	{
+	  PRINT_ERROR( "Surface is not planar\n" );
+	  return CUBIT_FAILURE;
+	}
 
-   top_orig.get_xyz( top_orig_pnt ); top_norm.get_xyz( top_norm_vec );
-   bottom_orig.get_xyz( bottom_orig_pnt ); bottom_norm.get_xyz( bottom_norm_vec );
+      top_orig.get_xyz( top_orig_pnt ); top_norm.get_xyz( top_norm_vec );
+      bottom_orig.get_xyz( bottom_orig_pnt ); bottom_norm.get_xyz( bottom_norm_vec );
 
-   // Check distance between planes
-   distance = agt->dist_pln_pln( top_orig_pnt, top_norm_vec, bottom_orig_pnt, bottom_norm_vec,
-                                 &side, &orien );
+      // Check distance between planes
+      distance = agt->dist_pln_pln( top_orig_pnt, top_norm_vec, bottom_orig_pnt, bottom_norm_vec,
+				    &side, &orien );
 
-   if( agt->dbl_eq( distance, 0.0 ) )
-   {
-      PRINT_ERROR( "Distance between planes is 0.0\n" );
-      return CUBIT_FAILURE;
-   }
+      if( agt->dbl_eq( distance, 0.0 ) )
+	{
+	  PRINT_ERROR( "Distance between planes is 0.0\n" );
+	  return CUBIT_FAILURE;
+	}
 
-   double top_bott[3];
-   top_bott[0] = top_norm.x();
-   top_bott[1] = top_norm.y();
-   top_bott[2] = top_norm.z();
-   if( side == AGT_NEG_SIDE ) {
-      agt->reverse_vec( top_bott, top_bott );
-   }
+      double top_bott[3];
+      top_bott[0] = top_norm.x();
+      top_bott[1] = top_norm.y();
+      top_bott[2] = top_norm.z();
+      if( side == AGT_NEG_SIDE ) {
+	agt->reverse_vec( top_bott, top_bott );
+      }
 
-   // Top plane
-   for( i=0; i<body_list.size(); i++ )
-   {
-      body_ptr = body_list.get_and_step();
+      // Top plane
+      for( i=0; i<body_list.size(); i++ )
+	{
+	  body_ptr = body_list.get_and_step();
 
-      DLIList<Surface*> ref_face_list;
-      AcisQueryEngine::instance()->get_surfs_on_plane( body_ptr, top_orig_pnt, top_norm_vec, ref_face_list );
+	  DLIList<Surface*> ref_face_list;
+	  AcisQueryEngine::instance()->get_surfs_on_plane( body_ptr, top_orig_pnt, top_norm_vec, ref_face_list );
 
-      if( ref_face_list.size() == 0 )
-         continue;
+	  if( ref_face_list.size() == 0 )
+	    continue;
 
-      for( ii=0; ii<ref_face_list.size(); ii++ )
-      {
-         ref_face_ptr = ref_face_list.get_and_step();
+	  for( ii=0; ii<ref_face_list.size(); ii++ )
+	    {
+	      ref_face_ptr = ref_face_list.get_and_step();
 
-         // Copy each surface, reverse and extrude
-         FACE_ptr = AcisQueryEngine::get_FACE( ref_face_ptr );
+	      // Copy each surface, reverse and extrude
+	      FACE_ptr = AcisQueryEngine::get_FACE( ref_face_ptr );
 
-         if( FACE_ptr == NULL )
-         {
-            return CUBIT_FAILURE;
-         }
+	      if( FACE_ptr == NULL )
+		{
+		  return CUBIT_FAILURE;
+		}
 
-         result = api_copy_entity_contents( (ENTITY *)FACE_ptr, entity_ptr);
-         if( !result.ok() )
-         {
-            PRINT_ERROR( "Unable to copy face off volume\n" );
-            continue;
-         }
+	      result = api_copy_entity_contents( (ENTITY *)FACE_ptr, entity_ptr);
+	      if( !result.ok() )
+		{
+		  PRINT_ERROR( "Unable to copy face off volume\n" );
+		  continue;
+		}
 
-         copied_FACE_ptr = (FACE *)entity_ptr;
-         ATTRIB_CUBIT_OWNER::remove_cubit_owner( (ENTITY *)copied_FACE_ptr,
-                                                 CUBIT_TRUE );
+	      copied_FACE_ptr = (FACE *)entity_ptr;
+	      ATTRIB_CUBIT_OWNER::remove_cubit_owner( (ENTITY *)copied_FACE_ptr,
+						      CUBIT_TRUE );
 
-         // Create a sheet body from this free-face
-         BODY* sheet_BODY_ptr;
-         result = api_sheet_from_ff( 1, &copied_FACE_ptr, sheet_BODY_ptr );
-         if (!result.ok())
-         {
-            PRINT_ERROR("Error in api_sheet_from_ff\n");
-            AcisQueryEngine::instance()->ACIS_API_error(result);
-            PRINT_ERROR( "Unable to create sheet volume from face\n" );
-            continue;
-         }
-         if( sheet_BODY_ptr == NULL )
-         {
-            PRINT_ERROR( "Unable to create sheet volume from face\n" );
-            continue;
-         }
+	      // Create a sheet body from this free-face
+	      BODY* sheet_BODY_ptr;
+	      result = api_sheet_from_ff( 1, &copied_FACE_ptr, sheet_BODY_ptr );
+	      if (!result.ok())
+		{
+		  PRINT_ERROR("Error in api_sheet_from_ff\n");
+		  AcisQueryEngine::instance()->ACIS_API_error(result);
+		  PRINT_ERROR( "Unable to create sheet volume from face\n" );
+		  continue;
+		}
+	      if( sheet_BODY_ptr == NULL )
+		{
+		  PRINT_ERROR( "Unable to create sheet volume from face\n" );
+		  continue;
+		}
 
-         DLIList<FACE*> sheet_FACE_list;
-         AcisQueryEngine::instance()->get_FACEs( (ENTITY *)sheet_BODY_ptr, sheet_FACE_list );
-         if( sheet_FACE_list.size() != 1 )
-         {
-            PRINT_ERROR( "Sheet doesn't have one face\n" );
-            continue;
-         }
-         FACE* sheet_FACE_ptr = sheet_FACE_list.get();
+	      DLIList<FACE*> sheet_FACE_list;
+	      AcisQueryEngine::instance()->get_FACEs( (ENTITY *)sheet_BODY_ptr, sheet_FACE_list );
+	      if( sheet_FACE_list.size() != 1 )
+		{
+		  PRINT_ERROR( "Sheet doesn't have one face\n" );
+		  continue;
+		}
+	      FACE* sheet_FACE_ptr = sheet_FACE_list.get();
 
-         // Get underlying plane normal.  The FACE normal might be reversed
-         // of this.
-         surface const* acis_surface = &(sheet_FACE_ptr->geometry()->equation());
-         SPAposition sheet_surf_orig;
-         SPAunit_vector sheet_surf_norm;
-         acis_surface->planar( sheet_surf_orig, sheet_surf_norm );
-         double sheet_norm[3];
-         sheet_norm[0] = sheet_surf_norm.x();
-         sheet_norm[1] = sheet_surf_norm.y();
-         sheet_norm[2] = sheet_surf_norm.z();
+	      // Get underlying plane normal.  The FACE normal might be reversed
+	      // of this.
+	      surface const* acis_surface = &(sheet_FACE_ptr->geometry()->equation());
+	      SPAposition sheet_surf_orig;
+	      SPAunit_vector sheet_surf_norm;
+	      acis_surface->planar( sheet_surf_orig, sheet_surf_norm );
+	      double sheet_norm[3];
+	      sheet_norm[0] = sheet_surf_norm.x();
+	      sheet_norm[1] = sheet_surf_norm.y();
+	      sheet_norm[2] = sheet_surf_norm.z();
 
-         // Get sheet normal in same direction as ACIS FACE.  The direction of the
-         // ACIS face is the direction of sweep.
-         if( sheet_FACE_ptr->sense() == REVERSED )
-            agt->reverse_vec( sheet_norm, sheet_norm );
+	      // Get sheet normal in same direction as ACIS FACE.  The direction of the
+	      // ACIS face is the direction of sweep.
+	      if( sheet_FACE_ptr->sense() == REVERSED )
+		agt->reverse_vec( sheet_norm, sheet_norm );
 
-         // Properties of dot product
-         // angle acute if dot product > 0
-         // angle obtuse if dot product < 0
-         // angle 90 deg if dot product = 0
+	      // Properties of dot product
+	      // angle acute if dot product > 0
+	      // angle obtuse if dot product < 0
+	      // angle 90 deg if dot product = 0
 
-         if( agt->dot_vec( sheet_norm, top_bott ) < 0.0 )
-         {
-            //PRINT_INFO( "Reversing volume...\n" );
-            api_reverse_body( sheet_BODY_ptr );
-         }
+	      if( agt->dot_vec( sheet_norm, top_bott ) < 0.0 )
+		{
+		  //PRINT_INFO( "Reversing volume...\n" );
+		  api_reverse_body( sheet_BODY_ptr );
+		}
 
-         result = api_sw_face_norm( sheet_FACE_ptr, FORWARD, distance+distance*(.50), 0, 0 );
+	      result = api_sw_face_norm( sheet_FACE_ptr, FORWARD, distance+distance*(.50), 0, 0 );
 
-         if (!result.ok())
-         {
-            PRINT_ERROR("Error during ACIS sweep operation, api_sw_face_norm\n");
-            AcisQueryEngine::instance()->ACIS_API_error(result);
-            continue;
-         }
+	      if (!result.ok())
+		{
+		  PRINT_ERROR("Error during ACIS sweep operation, api_sw_face_norm\n");
+		  AcisQueryEngine::instance()->ACIS_API_error(result);
+		  continue;
+		}
 
-         BODY* tool_BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(sheet_FACE_ptr);
+	      BODY* tool_BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY(sheet_FACE_ptr);
 
-         if (is_BODY(tool_BODY_ptr))
-         {
-            result = api_body_to_2d(tool_BODY_ptr);
-            if (!result.ok())
-              PRINT_WARNING("Couldn't turn a tool into a 3D sheet\n" );
+	      if (is_BODY(tool_BODY_ptr))
+		{
+		  result = api_body_to_2d(tool_BODY_ptr);
+		  if (!result.ok())
+		    PRINT_WARNING("Couldn't turn a tool into a 3D sheet\n" );
 
-            tool_BODY_list.append( tool_BODY_ptr );
+		  tool_BODY_list.append( tool_BODY_ptr );
 
-            // Move the body slightly so it overlaps
-            // Create a SPAvector representing the offsets
-            double fact = 0.35;
-            SPAvector translation_vector( -top_bott[0]*distance*fact, -top_bott[1]*distance*fact, -top_bott[2]*distance*fact );
-            SPAtransf tran_vec = translate_transf (translation_vector);
+		  // Move the body slightly so it overlaps
+		  // Create a SPAvector representing the offsets
+		  double fact = 0.35;
+		  SPAvector translation_vector( -top_bott[0]*distance*fact, -top_bott[1]*distance*fact, -top_bott[2]*distance*fact );
+		  SPAtransf tran_vec = translate_transf (translation_vector);
 
-            // Concatenate the input transformation to the existing one
-            result = api_apply_transf ( tool_BODY_ptr, tran_vec );
-            if (!result.ok())
-            {
-               AcisQueryEngine::instance()->ACIS_API_error ( result, "transforming body" );
-               continue;
-            }
-            TRANSFORM* identity = new TRANSFORM(scale_transf(1.0));
-            result = api_change_body_trans ( tool_BODY_ptr, identity, FALSE );
-            identity->lose();
-            if (!result.ok())
-            {
-               AcisQueryEngine::instance()->ACIS_API_error ( result, "transforming body" );
-               continue;
+		  // Concatenate the input transformation to the existing one
+		  result = api_apply_transf ( tool_BODY_ptr, tran_vec );
+		  if (!result.ok())
+		    {
+		      AcisQueryEngine::instance()->ACIS_API_error ( result, "transforming body" );
+		      continue;
+		    }
+		  TRANSFORM* identity = new TRANSFORM(scale_transf(1.0));
+		  result = api_change_body_trans ( tool_BODY_ptr, identity, FALSE );
+		  identity->lose();
+		  if (!result.ok())
+		    {
+		      AcisQueryEngine::instance()->ACIS_API_error ( result, "transforming body" );
+		      continue;
 
-            }
+		    }
 
-         }
+		}
 
-         else
-         {
-            PRINT_ERROR( "Unable to create tool from surface\n" );
-         }
-      }
+	      else
+		{
+		  PRINT_ERROR( "Unable to create tool from surface\n" );
+		}
+	    }
 
-      PRINT_INFO( "Got %d tools\n from the top\n", tool_BODY_list.size() );
+	  PRINT_INFO( "Got %d tools\n from the top\n", tool_BODY_list.size() );
 
-      // For now just create tools
-      for( ii=0; ii<tool_BODY_list.size(); ii++ )
-      {
-         BODY *temp_tool_BODY_ptr = tool_BODY_list.get_and_step();
+	  // For now just create tools
+	  for( ii=0; ii<tool_BODY_list.size(); ii++ )
+	    {
+	      BODY *temp_tool_BODY_ptr = tool_BODY_list.get_and_step();
 
-         /*BodySM *new_body = */
-         AcisQueryEngine::instance()->populate_topology_bridges(temp_tool_BODY_ptr);
-      }
+	      /*BodySM *new_body = */
+	      AcisQueryEngine::instance()->populate_topology_bridges(temp_tool_BODY_ptr);
+	    }
 
-   }
+	}
 
-   return CUBIT_SUCCESS;
-}
+      return CUBIT_SUCCESS;
+    }
 
-// Imprints curves to bodies.
-CubitStatus AcisModifyEngine::imprint( DLIList<BodySM*> &body_list,
-                                       DLIList<Curve*> &ref_edge_list,
-                                       DLIList<BodySM*>& new_body_list,
-                                       bool keep_old_body,
-                                       bool show_messages) const
-{
-   int i, j;
-   outcome result;
-   CubitStatus status = CUBIT_SUCCESS;
-   CubitBoolean imprint_worked = CUBIT_FALSE;
+  // Imprints curves to bodies.
+  CubitStatus AcisModifyEngine::imprint( DLIList<BodySM*> &body_list,
+					 DLIList<Curve*> &ref_edge_list,
+					 DLIList<BodySM*>& new_body_list,
+					 bool keep_old_body,
+					 bool show_messages) const
+    {
+      int i, j;
+      outcome result;
+      CubitStatus status = CUBIT_SUCCESS;
+      CubitBoolean imprint_worked = CUBIT_FALSE;
 
-   Curve* ref_edge_ptr;
-   BodySM *body_ptr;
+      Curve* ref_edge_ptr;
+      BodySM *body_ptr;
 
-   BODY *BODY_ptr;
-   BODY *copied_BODY_ptr;
-   BODY *wire_BODY_ptr;
+      BODY *BODY_ptr;
+      BODY *copied_BODY_ptr;
+      BODY *wire_BODY_ptr;
 
-   EDGE *EDGE_ptr;
-   EDGE *copied_EDGE_ptr;
+      EDGE *EDGE_ptr;
+      EDGE *copied_EDGE_ptr;
 
-   DLIList<BODY*> ewire_list;
+      DLIList<BODY*> ewire_list;
 
-   bool delete_attribs =
-      (GeometryModifyTool::instance()->get_new_ids() || keep_old_body);
+      bool delete_attribs =
+	(GeometryModifyTool::instance()->get_new_ids() || keep_old_body);
 
-   // Make wires which can be used to imprint onto the bodies
-   ref_edge_list.reset();
-   for( i=0; i<ref_edge_list.size(); i++ )
-   {
-      ref_edge_ptr = ref_edge_list.get_and_step();
+      // Make wires which can be used to imprint onto the bodies
+      ref_edge_list.reset();
+      for( i=0; i<ref_edge_list.size(); i++ )
+	{
+	  ref_edge_ptr = ref_edge_list.get_and_step();
 
-      // Get the EDGE pointer
-      EDGE_ptr = AcisQueryEngine::get_EDGE( ref_edge_ptr );
+	  // Get the EDGE pointer
+	  EDGE_ptr = AcisQueryEngine::get_EDGE( ref_edge_ptr );
 
-      if( EDGE_ptr == NULL )
-      {
-         return CUBIT_FAILURE;
-      }
+	  if( EDGE_ptr == NULL )
+	    {
+	      return CUBIT_FAILURE;
+	    }
 
-      // Copy the EDGE.  I've found that the ewire will reference
-      // the original EDGE and that EDGE can get split later when
-      // doing imprints.  Also note that the copied EDGE will get
-      // deleted when deleting the ewire.
-      result = api_edge( EDGE_ptr, copied_EDGE_ptr );
-      if (!result.ok())
-      {
-         PRINT_ERROR( "Unable to copy curve; aborting\n" );
-         AcisQueryEngine::instance()->ACIS_API_error (result);
-         return CUBIT_FAILURE;
-      }
+	  // Copy the EDGE.  I've found that the ewire will reference
+	  // the original EDGE and that EDGE can get split later when
+	  // doing imprints.  Also note that the copied EDGE will get
+	  // deleted when deleting the ewire.
+	  result = api_edge( EDGE_ptr, copied_EDGE_ptr );
+	  if (!result.ok())
+	    {
+	      PRINT_ERROR( "Unable to copy curve; aborting\n" );
+	      AcisQueryEngine::instance()->ACIS_API_error (result);
+	      return CUBIT_FAILURE;
+	    }
 
-      // Remove the CUBIT owner attribute from the EDGE
-      ATTRIB_CUBIT_OWNER::remove_cubit_owner( (ENTITY *)copied_EDGE_ptr,
-                                              CUBIT_TRUE );
+	  // Remove the CUBIT owner attribute from the EDGE
+	  ATTRIB_CUBIT_OWNER::remove_cubit_owner( (ENTITY *)copied_EDGE_ptr,
+						  CUBIT_TRUE );
 
-      // Make an ewire from this EDGE
-      result = api_make_ewire( 1, &copied_EDGE_ptr, wire_BODY_ptr );
-      if (!result.ok())
-      {
-         AcisQueryEngine::instance()->ACIS_API_error (result);
-         PRINT_ERROR( "Unable to make ACIS WIRE from curve; aborting\n" );
-         for( j=0; j<ewire_list.size(); j++ )
-            api_delent( ewire_list.get_and_step() );
-         return CUBIT_FAILURE;
-      }
+	  // Make an ewire from this EDGE
+	  result = api_make_ewire( 1, &copied_EDGE_ptr, wire_BODY_ptr );
+	  if (!result.ok())
+	    {
+	      AcisQueryEngine::instance()->ACIS_API_error (result);
+	      PRINT_ERROR( "Unable to make ACIS WIRE from curve; aborting\n" );
+	      for( j=0; j<ewire_list.size(); j++ )
+		api_delent( ewire_list.get_and_step() );
+	      return CUBIT_FAILURE;
+	    }
 
-      ewire_list.append( wire_BODY_ptr );
-   }
+	  ewire_list.append( wire_BODY_ptr );
+	}
 
-   // Loop on bodies, imprinting each with all the ewires
-   for( i=0; i<body_list.size(); i++ )
-   {
-      body_ptr = body_list.get_and_step();
+      // Loop on bodies, imprinting each with all the ewires
+      for( i=0; i<body_list.size(); i++ )
+	{
+	  body_ptr = body_list.get_and_step();
 
-      BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
-      if( BODY_ptr == NULL )
-      {
-         PRINT_ERROR( "Unable to find ACIS BODY from volume; aborting\n" );
-         for( j=0; j<ewire_list.size(); j++ )
-            api_delent( ewire_list.get_and_step() );
-         return CUBIT_FAILURE;
-      }
+	  BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
+	  if( BODY_ptr == NULL )
+	    {
+	      PRINT_ERROR( "Unable to find ACIS BODY from volume; aborting\n" );
+	      for( j=0; j<ewire_list.size(); j++ )
+		api_delent( ewire_list.get_and_step() );
+	      return CUBIT_FAILURE;
+	    }
 
-      // Copy the body before working with it
-      copied_BODY_ptr = copy_BODY( BODY_ptr, delete_attribs );
+	  // Copy the body before working with it
+	  copied_BODY_ptr = copy_BODY( BODY_ptr, delete_attribs );
 
-      // Imprint the wire-bodies onto the BODY
-      api_set_int_option("all_free_edges", TRUE );
-      ewire_list.reset();
-      ref_edge_list.reset();
-      for( j=0; j<ewire_list.size(); j++ )
-      {
-         wire_BODY_ptr = ewire_list.get_and_step();
-         ref_edge_ptr = ref_edge_list.get_and_step();
-         BODY* temp_BODY_ptr = copy_BODY( copied_BODY_ptr, delete_attribs );
+	  // Imprint the wire-bodies onto the BODY
+	  api_set_int_option("all_free_edges", TRUE );
+	  ewire_list.reset();
+	  ref_edge_list.reset();
+	  for( j=0; j<ewire_list.size(); j++ )
+	    {
+	      wire_BODY_ptr = ewire_list.get_and_step();
+	      ref_edge_ptr = ref_edge_list.get_and_step();
+	      BODY* temp_BODY_ptr = copy_BODY( copied_BODY_ptr, delete_attribs );
 
-         result = api_imprint( wire_BODY_ptr, copied_BODY_ptr );
+	      result = api_imprint( wire_BODY_ptr, copied_BODY_ptr );
 
-         //Gets rid of sliver curves/surfaces that could get produced by the imprint.
-         AcisModifyEngine::instance()->cleanup_slivers( copied_BODY_ptr );
+	      //Gets rid of sliver curves/surfaces that could get produced by the imprint.
+	      AcisModifyEngine::instance()->cleanup_slivers( copied_BODY_ptr );
 
-         if( !result.ok() && result.error_number()!=200 )
-         {
-           if ( show_messages )
-           {
-             PRINT_ERROR( "problem imprinting curve onto volume\n" );
-             AcisQueryEngine::instance()->ACIS_API_error(result);
-           }
-             //revert back to the old body.
-           api_delent(copied_BODY_ptr);
-           copied_BODY_ptr = temp_BODY_ptr;
-           status = CUBIT_FAILURE;
-         }
-         else
-           imprint_worked = CUBIT_TRUE;
-      }
-      if( imprint_worked )
-      {
-          api_set_int_option("all_free_edges", FALSE );
+	      if( !result.ok() && result.error_number()!=200 )
+		{
+		  if ( show_messages )
+		    {
+		      PRINT_ERROR( "problem imprinting curve onto volume\n" );
+		      AcisQueryEngine::instance()->ACIS_API_error(result);
+		    }
+		  //revert back to the old body.
+		  api_delent(copied_BODY_ptr);
+		  copied_BODY_ptr = temp_BODY_ptr;
+		  status = CUBIT_FAILURE;
+		}
+	      else
+		imprint_worked = CUBIT_TRUE;
+	    }
+	  if( imprint_worked )
+	    {
+	      api_set_int_option("all_free_edges", FALSE );
 
-          DLIList<EDGE*> new_edges = AcisModifyEngine::instance()->find_new_EDGES(copied_BODY_ptr);
+	      DLIList<EDGE*> new_edges = AcisModifyEngine::instance()->find_new_EDGES(copied_BODY_ptr);
 
-          BodySM* new_body_ptr = get_new_Body( body_ptr, BODY_ptr, copied_BODY_ptr,
-              keep_old_body, CUBIT_TRUE );
+	      BodySM* new_body_ptr = get_new_Body( body_ptr, BODY_ptr, copied_BODY_ptr,
+						   keep_old_body, CUBIT_TRUE );
 
-          if( new_body_ptr )
-          {
-              // Add a imprint feature to the topo edges
-              for (int edge_count = new_edges.size(); edge_count--; ) 
-              {
-                  CubitSimpleAttrib *tmp_attrib = new CubitSimpleAttrib( "SOURCE_FEATURE", "IMPRINT" );
-                  new ATTRIB_SNL_SIMPLE( new_edges[edge_count], tmp_attrib );
-                  delete tmp_attrib;
-              }
-              new_body_list.append(new_body_ptr);
-          }
-      }
-   }
+	      if( new_body_ptr )
+		{
+		  // Add a imprint feature to the topo edges
+		  for (int edge_count = new_edges.size(); edge_count--; ) 
+		    {
+		      CubitSimpleAttrib *tmp_attrib = new CubitSimpleAttrib( "SOURCE_FEATURE", "IMPRINT" );
+		      new ATTRIB_SNL_SIMPLE( new_edges[edge_count], tmp_attrib );
+		      delete tmp_attrib;
+		    }
+		  new_body_list.append(new_body_ptr);
+		}
+	    }
+	}
 
-   // Free memory
-   for( i=0; i<ewire_list.size(); i++ )
-      api_delent( ewire_list.get_and_step() );
-   if ( imprint_worked && status != CUBIT_SUCCESS )
-     status = CUBIT_SUCCESS;
-   return status;
-}
+      // Free memory
+      for( i=0; i<ewire_list.size(); i++ )
+	api_delent( ewire_list.get_and_step() );
+      if ( imprint_worked && status != CUBIT_SUCCESS )
+	status = CUBIT_SUCCESS;
+      return status;
+    }
 
-// This is a special case - needed because if a curve hangs over
-// several surfaces on a body and the user wants to split only one
-// of the surfaces.  This method sometimes works when function to
-// imprint a curve to a body fails.  The surfaces must be part of
-// a body, but the curves just have to be valid ACIS EDGEs.
-CubitStatus AcisModifyEngine::imprint( DLIList<Surface*> &surface_list,
-                                       DLIList<Curve*> &curve_list,
-                                       DLIList<BodySM*>& new_body_list,
-                                       bool keep_old_body ) const
-{
-  int i;
+  // This is a special case - needed because if a curve hangs over
+  // several surfaces on a body and the user wants to split only one
+  // of the surfaces.  This method sometimes works when function to
+  // imprint a curve to a body fails.  The surfaces must be part of
+  // a body, but the curves just have to be valid ACIS EDGEs.
+  CubitStatus AcisModifyEngine::imprint( DLIList<Surface*> &surface_list,
+					 DLIList<Curve*> &curve_list,
+					 DLIList<BodySM*>& new_body_list,
+					 bool keep_old_body ) const
+    {
+      int i;
 
-  outcome result;
+      outcome result;
 
-  // Copy the incoming surface_list since we will be pulling
-  // surfaces out of it.
-  DLIList<SurfaceACIS*> copied_surface_list(surface_list.size());
-  Curve* curve_ptr;
+      // Copy the incoming surface_list since we will be pulling
+      // surfaces out of it.
+      DLIList<SurfaceACIS*> copied_surface_list(surface_list.size());
+      Curve* curve_ptr;
 
-  BodySM *body_ptr;
-  BODY *BODY_ptr;
+      BodySM *body_ptr;
+      BODY *BODY_ptr;
 
-  EDGE *EDGE_ptr;
-  EDGE *copied_EDGE_ptr;
+      EDGE *EDGE_ptr;
+      EDGE *copied_EDGE_ptr;
 
-  bool delete_attribs =
-    (GeometryModifyTool::instance()->get_new_ids() || keep_old_body);
+      bool delete_attribs =
+	(GeometryModifyTool::instance()->get_new_ids() || keep_old_body);
 
-  CAST_LIST( surface_list, copied_surface_list, SurfaceACIS );
-  if (surface_list.size() != copied_surface_list.size())
-  {
-    PRINT_ERROR("Non-ACIS Surface at %s:%d\n", __FILE__, __LINE__ );
-    return CUBIT_FAILURE;
-  }
+      CAST_LIST( surface_list, copied_surface_list, SurfaceACIS );
+      if (surface_list.size() != copied_surface_list.size())
+	{
+	  PRINT_ERROR("Non-ACIS Surface at %s:%d\n", __FILE__, __LINE__ );
+	  return CUBIT_FAILURE;
+	}
 
-  // Need to copy all of the EDGE's before doing anything, if they are
-  // part of a body being imprinted on they could be invalidated before
-  // subsequent imprints.
-  DLIList<EDGE*> EDGE_list;
-  curve_list.reset();
-  for( i=curve_list.size(); i--; )
-  {
-    curve_ptr = curve_list.get_and_step();
+      // Need to copy all of the EDGE's before doing anything, if they are
+      // part of a body being imprinted on they could be invalidated before
+      // subsequent imprints.
+      DLIList<EDGE*> EDGE_list;
+      curve_list.reset();
+      for( i=curve_list.size(); i--; )
+	{
+	  curve_ptr = curve_list.get_and_step();
 
-    // Get the EDGE pointer
-    EDGE_ptr = AcisQueryEngine::get_EDGE( curve_ptr );
+	  // Get the EDGE pointer
+	  EDGE_ptr = AcisQueryEngine::get_EDGE( curve_ptr );
 
-    if( EDGE_ptr == NULL )
-    {
-      PRINT_ERROR("Non-ACIS Curve at %s:%d\n", __FILE__, __LINE__ );
-      return CUBIT_FAILURE;
-    }
+	  if( EDGE_ptr == NULL )
+	    {
+	      PRINT_ERROR("Non-ACIS Curve at %s:%d\n", __FILE__, __LINE__ );
+	      return CUBIT_FAILURE;
+	    }
 
-    // Copy the EDGE.
-    result = api_edge( EDGE_ptr, copied_EDGE_ptr );
-    if (!result.ok())
-    {
-      AcisQueryEngine::instance()->ACIS_API_error (result);
-      PRINT_ERROR( "Unable to copy curve; aborting.\n" );
-      return CUBIT_FAILURE;
-    }
+	  // Copy the EDGE.
+	  result = api_edge( EDGE_ptr, copied_EDGE_ptr );
+	  if (!result.ok())
+	    {
+	      AcisQueryEngine::instance()->ACIS_API_error (result);
+	      PRINT_ERROR( "Unable to copy curve; aborting.\n" );
+	      return CUBIT_FAILURE;
+	    }
 
-    // Remove the CUBIT owner attribute from the EDGE
-    ATTRIB_CUBIT_OWNER::remove_cubit_owner( (ENTITY *)copied_EDGE_ptr, CUBIT_TRUE );
+	  // Remove the CUBIT owner attribute from the EDGE
+	  ATTRIB_CUBIT_OWNER::remove_cubit_owner( (ENTITY *)copied_EDGE_ptr, CUBIT_TRUE );
 
-    // Add the EDGE to the list
-    EDGE_list.append( copied_EDGE_ptr );
-  }
+	  // Add the EDGE to the list
+	  EDGE_list.append( copied_EDGE_ptr );
+	}
 
-  // Loop on FACEs.  We will work on imprinting surfaces from one body at a time.
-  copied_surface_list.reset();
-  while( copied_surface_list.size() )
-  {
-    DLIList<FACE*> imprint_FACE_list;
-    BODY *copied_BODY_ptr;
-    if( get_copied_FACES_of_body( copied_surface_list, imprint_FACE_list,
-                                  copied_BODY_ptr ) == CUBIT_FAILURE )
-      continue;
+      // Loop on FACEs.  We will work on imprinting surfaces from one body at a time.
+      copied_surface_list.reset();
+      while( copied_surface_list.size() )
+	{
+	  DLIList<FACE*> imprint_FACE_list;
+	  BODY *copied_BODY_ptr;
+	  if( get_copied_FACES_of_body( copied_surface_list, imprint_FACE_list,
+					copied_BODY_ptr ) == CUBIT_FAILURE )
+	    continue;
 
-    // Get original Body and BODY
-    body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY( copied_BODY_ptr );
-    BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
+	  // Get original Body and BODY
+	  body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY( copied_BODY_ptr );
+	  BODY_ptr = AcisQueryEngine::get_BODY(body_ptr);
 
-    // Now cleanout the owner attributes from the copied BODY, if required
-    if( delete_attribs )
-      AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copied_BODY_ptr);
+	  // Now cleanout the owner attributes from the copied BODY, if required
+	  if( delete_attribs )
+	    AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copied_BODY_ptr);
 
-    if( imprint( copied_BODY_ptr, imprint_FACE_list, EDGE_list ) == CUBIT_FAILURE )
-    {
-      // This only fails if there is a serious error - delete the copied Body
-        api_delent( copied_BODY_ptr );
-        continue;
-    }
+	  if( imprint( copied_BODY_ptr, imprint_FACE_list, EDGE_list ) == CUBIT_FAILURE )
+	    {
+	      // This only fails if there is a serious error - delete the copied Body
+	      api_delent( copied_BODY_ptr );
+	      continue;
+	    }
 
-    DLIList<EDGE*> new_edges = AcisModifyEngine::instance()->find_new_EDGES(copied_BODY_ptr);
+	  DLIList<EDGE*> new_edges = AcisModifyEngine::instance()->find_new_EDGES(copied_BODY_ptr);
 
-    BodySM* new_body_ptr = get_new_Body( body_ptr, BODY_ptr, copied_BODY_ptr,
-        keep_old_body, CUBIT_TRUE );
+	  BodySM* new_body_ptr = get_new_Body( body_ptr, BODY_ptr, copied_BODY_ptr,
+					       keep_old_body, CUBIT_TRUE );
 
-    if( new_body_ptr )
-    {
-        // Add a imprint feature to the topo edges
-        for (int edge_count = new_edges.size(); edge_count--; ) 
-        {
-            CubitSimpleAttrib *tmp_attrib = new CubitSimpleAttrib( "SOURCE_FEATURE", "IMPRINT" );
-            new ATTRIB_SNL_SIMPLE( new_edges[edge_count], tmp_attrib );
-            delete tmp_attrib;
-        }
+	  if( new_body_ptr )
+	    {
+	      // Add a imprint feature to the topo edges
+	      for (int edge_count = new_edges.size(); edge_count--; ) 
+		{
+		  CubitSimpleAttrib *tmp_attrib = new CubitSimpleAttrib( "SOURCE_FEATURE", "IMPRINT" );
+		  new ATTRIB_SNL_SIMPLE( new_edges[edge_count], tmp_attrib );
+		  delete tmp_attrib;
+		}
 
-        new_body_list.append( new_body_ptr );
-    }
-  }
+	      new_body_list.append( new_body_ptr );
+	    }
+	}
 
-  // Free the memory allocated when copying edges
-  for( i=0; i<EDGE_list.size(); i++ )
-  {
-    copied_EDGE_ptr = EDGE_list.get_and_step();
-    api_delent( copied_EDGE_ptr );
-  }
+      // Free the memory allocated when copying edges
+      for( i=0; i<EDGE_list.size(); i++ )
+	{
+	  copied_EDGE_ptr = EDGE_list.get_and_step();
+	  api_delent( copied_EDGE_ptr );
+	}
 
-  return CUBIT_SUCCESS;
-}
+      return CUBIT_SUCCESS;
+    }
 
-// Imprint EDGEs to select FACEs.  FACEs must be from same BODY.  Input FACEs
-// are modified but EDGEs are not.
-CubitStatus AcisModifyEngine::imprint( BODY *BODY_ptr,
-                                       DLIList<FACE*> &FACE_list,
-                                       DLIList<EDGE*> &EDGE_list ) const
-{
-  // Imprint the edges to the surfaces on this body
-  outcome result;
-  EDGE *EDGE_ptr;
-  FACE *FACE_ptr;
-  EDGE_list.reset();
-  FACE_list.reset();
-  int i, j;
-  for( i=EDGE_list.size(); i--; )
-  {
-    // Imprint this edge selectively to the given faces on this body
-    EDGE_ptr = EDGE_list.get_and_step();
-
-    // Track the existing FACEs before imprinting this BODY with the edge.
-    // Needed so we know which new surfaces result from the imprint.  These
-    // new surfaces will need to be imprinted with subsequent edges.
-    DLIList<FACE*> FACES_BEFORE;
-    DLIList<FACE*> FACES_AFTER;
-    AcisQueryEngine::instance()->get_FACEs( (ENTITY *)BODY_ptr, FACES_BEFORE );
-
-    FACE_list.reset();
-    for( j=FACE_list.size(); j--; )
+  // Imprint EDGEs to select FACEs.  FACEs must be from same BODY.  Input FACEs
+  // are modified but EDGEs are not.
+  CubitStatus AcisModifyEngine::imprint( BODY *BODY_ptr,
+					 DLIList<FACE*> &FACE_list,
+					 DLIList<EDGE*> &EDGE_list ) const
     {
-      // Get the FACE to imprint to
-      FACE_ptr = FACE_list.get_and_step();
+      // Imprint the edges to the surfaces on this body
+      outcome result;
+      EDGE *EDGE_ptr;
+      FACE *FACE_ptr;
+      EDGE_list.reset();
+      FACE_list.reset();
+      int i, j;
+      for( i=EDGE_list.size(); i--; )
+	{
+	  // Imprint this edge selectively to the given faces on this body
+	  EDGE_ptr = EDGE_list.get_and_step();
 
-      if( imprint( BODY_ptr, FACE_ptr, EDGE_ptr ) == CUBIT_FAILURE )
-      {
-        PRINT_ERROR( "Unable to imprint EDGE to FACE\n" );
-        continue;
-      }
+	  // Track the existing FACEs before imprinting this BODY with the edge.
+	  // Needed so we know which new surfaces result from the imprint.  These
+	  // new surfaces will need to be imprinted with subsequent edges.
+	  DLIList<FACE*> FACES_BEFORE;
+	  DLIList<FACE*> FACES_AFTER;
+	  AcisQueryEngine::instance()->get_FACEs( (ENTITY *)BODY_ptr, FACES_BEFORE );
 
-      // Check against an assumption that if invalid, will
-      // cause a crash.  The assumption is that the imprinted
-      // FACE_ptr will remain valid after each imprint.
-      FACES_AFTER.clean_out();
-      AcisQueryEngine::instance()->get_FACEs( (ENTITY *)BODY_ptr, FACES_AFTER );
-      if( !FACES_AFTER.is_in_list( FACE_ptr ) )
-      {
-        PRINT_ERROR( "serious problem in imprint - an imprinted surface disappeared!\n"
-          "       Model restored - operation aborted\n" );
-        return CUBIT_FAILURE;
-      }
+	  FACE_list.reset();
+	  for( j=FACE_list.size(); j--; )
+	    {
+	      // Get the FACE to imprint to
+	      FACE_ptr = FACE_list.get_and_step();
 
-     }
-     // End of looping over FACES
+	      if( imprint( BODY_ptr, FACE_ptr, EDGE_ptr ) == CUBIT_FAILURE )
+		{
+		  PRINT_ERROR( "Unable to imprint EDGE to FACE\n" );
+		  continue;
+		}
 
-     // Find which new surfaces were created - add these to the
-     // FACE_list so that additional edges will imprint
-     // on these as well.
-     DLIList<FACE*> new_FACES;
-     FACE* after_FACE_ptr;
-     for( j=FACES_AFTER.size(); j--; )
-     {
-       after_FACE_ptr = FACES_AFTER.get_and_step();
+	      // Check against an assumption that if invalid, will
+	      // cause a crash.  The assumption is that the imprinted
+	      // FACE_ptr will remain valid after each imprint.
+	      FACES_AFTER.clean_out();
+	      AcisQueryEngine::instance()->get_FACEs( (ENTITY *)BODY_ptr, FACES_AFTER );
+	      if( !FACES_AFTER.is_in_list( FACE_ptr ) )
+		{
+		  PRINT_ERROR( "serious problem in imprint - an imprinted surface disappeared!\n"
+			       "       Model restored - operation aborted\n" );
+		  return CUBIT_FAILURE;
+		}
 
-       if( !FACES_BEFORE.is_in_list( after_FACE_ptr ) )
-         new_FACES.append(after_FACE_ptr);
-     }
-     FACE_list += new_FACES;
-  }
+	    }
+	  // End of looping over FACES
 
-  return CUBIT_SUCCESS;
-}
+	  // Find which new surfaces were created - add these to the
+	  // FACE_list so that additional edges will imprint
+	  // on these as well.
+	  DLIList<FACE*> new_FACES;
+	  FACE* after_FACE_ptr;
+	  for( j=FACES_AFTER.size(); j--; )
+	    {
+	      after_FACE_ptr = FACES_AFTER.get_and_step();
 
-CubitStatus AcisModifyEngine::imprint( BODY *BODY_ptr,
-                                       FACE *FACE_ptr,
-                                       EDGE *EDGE_ptr ) const
-{
-  outcome result;
+	      if( !FACES_BEFORE.is_in_list( after_FACE_ptr ) )
+		new_FACES.append(after_FACE_ptr);
+	    }
+	  FACE_list += new_FACES;
+	}
 
-  BODY* tbody = NULL;
-  BODY* bbody = NULL;    // Blank body
-  FACE* bface = NULL;    // Blank face
-  surface* tsurf = NULL; // Tool surface
-  EDGE* edge = NULL;
+      return CUBIT_SUCCESS;
+    }
 
-  //EXCEPTION_TRY
+  CubitStatus AcisModifyEngine::imprint( BODY *BODY_ptr,
+					 FACE *FACE_ptr,
+					 EDGE *EDGE_ptr ) const
+    {
+      outcome result;
 
-  bbody = BODY_ptr;
-  bface = FACE_ptr;
-  edge = EDGE_ptr;
+      BODY* tbody = NULL;
+      BODY* bbody = NULL;    // Blank body
+      FACE* bface = NULL;    // Blank face
+      surface* tsurf = NULL; // Tool surface
+      EDGE* edge = NULL;
 
-  // Get the geometry of the blank face.
-  surface const& bsurf = bface->geometry()->equation();
+      //EXCEPTION_TRY
 
-  // Create an empty tool body
-  tbody = ACIS_NEW BODY( (LUMP*) NULL );
+      bbody = BODY_ptr;
+      bface = FACE_ptr;
+      edge = EDGE_ptr;
 
-  // Create the tool body which consists of a single face
-  // with a "cross surface" geometric support and no loops.
-  const curve &temp_cur = edge->geometry()->equation();
-  SPAinterval cur_range = temp_cur.param_range();
-  SPAinterval edge_range = edge->param_range();
-  if (edge->sense() == REVERSED)
-    edge_range = -edge_range;
-  if (edge_range == cur_range)
-    tsurf = cross_surface( edge->geometry()->equation(),
-    bsurf, *(pcurve*) NULL_REF);
-  else
-  {
-    // Create using a subsetted copy of the curve
-    curve* subset_cur = temp_cur.subset(edge_range&cur_range);
-    tsurf = cross_surface( *subset_cur, bsurf, *(pcurve*) NULL_REF);
-    ACIS_DELETE subset_cur;
-  }
-  if( !tsurf )
-  {
-    PRINT_ERROR( "Unable to make imprint surface on body\n" );
-    return CUBIT_FAILURE;
-  }
-  FACE* tface = ACIS_NEW FACE( NULL, NULL, make_surface( *tsurf ), FORWARD );
-  ACIS_DELETE tsurf; // SRS Added 10-29-99
-  tbody->set_lump( ACIS_NEW LUMP( ACIS_NEW SHELL( tface, NULL, NULL ), NULL ) );
+      // Get the geometry of the blank face.
+      surface const& bsurf = bface->geometry()->equation();
 
-  // Now, imprint the two bodies and throw away the tool body. The
-  // resultant blank body will have the edge imprinted on the
-  // selected face.
-  EDGE* ssi_edges[1];
-  FACE* tfaces[1];
-  FACE* bfaces[1];
+      // Create an empty tool body
+      tbody = ACIS_NEW BODY( (LUMP*) NULL );
 
-  ssi_edges[0] = edge;
-  tfaces[0] = tface;
-  bfaces[0] = bface;
+      // Create the tool body which consists of a single face
+      // with a "cross surface" geometric support and no loops.
+      const curve &temp_cur = edge->geometry()->equation();
+      SPAinterval cur_range = temp_cur.param_range();
+      SPAinterval edge_range = edge->param_range();
+      if (edge->sense() == REVERSED)
+	edge_range = -edge_range;
+      if (edge_range == cur_range)
+	tsurf = cross_surface( edge->geometry()->equation(),
+			       bsurf, *(pcurve*) NULL_REF);
+      else
+	{
+	  // Create using a subsetted copy of the curve
+	  curve* subset_cur = temp_cur.subset(edge_range&cur_range);
+	  tsurf = cross_surface( *subset_cur, bsurf, *(pcurve*) NULL_REF);
+	  ACIS_DELETE subset_cur;
+	}
+      if( !tsurf )
+	{
+	  PRINT_ERROR( "Unable to make imprint surface on body\n" );
+	  return CUBIT_FAILURE;
+	}
+      FACE* tface = ACIS_NEW FACE( NULL, NULL, make_surface( *tsurf ), FORWARD );
+      ACIS_DELETE tsurf; // SRS Added 10-29-99
+      tbody->set_lump( ACIS_NEW LUMP( ACIS_NEW SHELL( tface, NULL, NULL ), NULL ) );
 
-  result = api_boolean_start( tbody, bbody );
+      // Now, imprint the two bodies and throw away the tool body. The
+      // resultant blank body will have the edge imprinted on the
+      // selected face.
+      EDGE* ssi_edges[1];
+      FACE* tfaces[1];
+      FACE* bfaces[1];
 
-  if( result.ok() )
-  {
-    // If the edge is known to lie on the face, some expensive
-    // checking can be ommited by changing the last argument from
-    // TRUE to FALSE.
-    result = api_update_intersection( tface, *(SPAtransf *)NULL_REF, bface,
-      *(SPAtransf *)NULL_REF, 1, ssi_edges, TRUE);
+      ssi_edges[0] = edge;
+      tfaces[0] = tface;
+      bfaces[0] = bface;
 
-    if( result.ok() )
-    {
-      result = api_selectively_intersect( 1, tfaces, bfaces );
+      result = api_boolean_start( tbody, bbody );
+
       if( result.ok() )
-      {
-        result = api_imprint_complete( tbody, bbody );
-        if( !result.ok() )
-        {
-          PRINT_ERROR( "problem in completing imprint for curve on surface\n" );
-          AcisQueryEngine::instance()->ACIS_API_error(result);
-          api_delent( tbody );
-          return CUBIT_FAILURE;
-        }
-      }
-      else
-      {
-        PRINT_ERROR( "problem in selective intersect for curve on surface\n" );
-        AcisQueryEngine::instance()->ACIS_API_error(result);
-        api_delent( tbody );
-        return CUBIT_FAILURE;
-      }
-    }
-    else if( result.error_number()!=200 && result.error_number()!=615
-      && result.error_number()!=715 )
-    {
-      // Error 200 can occur when the imprint does nothing (curve that's
-      // a surface boundary, curve away from surface).  Errors 615/715 can occur
-      // when imprinting a remnant of the same FACE again with the same curve.
-      // The orignal FACE_ptr remains after an imprint - it lives as one
-      // of the remnants.  Then, when we attempt to imprint the other pieces
-      // with the same curves, we are getting error 715.  The same error
-      // can occur when trying to use one of the surfaces own edges to
-      // imprint with.  This has been reported to Spatial and logged as r6294.
-      // It's not fatal so for now we ignore it.
+	{
+	  // If the edge is known to lie on the face, some expensive
+	  // checking can be ommited by changing the last argument from
+	  // TRUE to FALSE.
+	  result = api_update_intersection( tface, *(SPAtransf *)NULL_REF, bface,
+					    *(SPAtransf *)NULL_REF, 1, ssi_edges, TRUE);
 
-      // We get these all the time, and they don't seem to hurt us.
-      api_delent( tbody );
-      return CUBIT_SUCCESS;
-    }
-  }
-  else
-  {
-    PRINT_ERROR( "problem starting boolean for curve on surface\n" );
-    AcisQueryEngine::instance()->ACIS_API_error(result);
-    api_delent( tbody );
-    return CUBIT_FAILURE;
-  }
+	  if( result.ok() )
+	    {
+	      result = api_selectively_intersect( 1, tfaces, bfaces );
+	      if( result.ok() )
+		{
+		  result = api_imprint_complete( tbody, bbody );
+		  if( !result.ok() )
+		    {
+		      PRINT_ERROR( "problem in completing imprint for curve on surface\n" );
+		      AcisQueryEngine::instance()->ACIS_API_error(result);
+		      api_delent( tbody );
+		      return CUBIT_FAILURE;
+		    }
+		}
+	      else
+		{
+		  PRINT_ERROR( "problem in selective intersect for curve on surface\n" );
+		  AcisQueryEngine::instance()->ACIS_API_error(result);
+		  api_delent( tbody );
+		  return CUBIT_FAILURE;
+		}
+	    }
+	  else if( result.error_number()!=200 && result.error_number()!=615
+		   && result.error_number()!=715 )
+	    {
+	      // Error 200 can occur when the imprint does nothing (curve that's
+	      // a surface boundary, curve away from surface).  Errors 615/715 can occur
+	      // when imprinting a remnant of the same FACE again with the same curve.
+	      // The orignal FACE_ptr remains after an imprint - it lives as one
+	      // of the remnants.  Then, when we attempt to imprint the other pieces
+	      // with the same curves, we are getting error 715.  The same error
+	      // can occur when trying to use one of the surfaces own edges to
+	      // imprint with.  This has been reported to Spatial and logged as r6294.
+	      // It's not fatal so for now we ignore it.
 
-  //EXCEPTION_CATCH(TRUE)
+	      // We get these all the time, and they don't seem to hurt us.
+	      api_delent( tbody );
+	      return CUBIT_SUCCESS;
+	    }
+	}
+      else
+	{
+	  PRINT_ERROR( "problem starting boolean for curve on surface\n" );
+	  AcisQueryEngine::instance()->ACIS_API_error(result);
+	  api_delent( tbody );
+	  return CUBIT_FAILURE;
+	}
 
-  // Remove temporary objects
-  api_delent( tbody );
+      //EXCEPTION_CATCH(TRUE)
 
-  //EXCEPTION_END
+      // Remove temporary objects
+      api_delent( tbody );
 
-  return CUBIT_SUCCESS;
-}
+      //EXCEPTION_END
 
-//- Imprints a list of Surfaces with list of Curves, sorted per
-//- Surface (ie., curve_lists_list is same length as surface_list).
-//- This version is more efficient than the general-purpose one
-//- above, as we know which curves to imprint with which surfaces.
-//- All input surfaces must be from the same body.
-CubitStatus AcisModifyEngine::imprint( DLIList<Surface*> &surface_list,
-                                       DLIList<DLIList<Curve*>*> &curve_lists_list,
-                                       BodySM*& new_body,
-                                       bool keep_old_body ) const
-{
-  // Calling code has already ensured that all the Surfaces are from the
-  // same body
+      return CUBIT_SUCCESS;
+    }
 
-  bool delete_attribs =
-    (GeometryModifyTool::instance()->get_new_ids() || keep_old_body);
+  //- Imprints a list of Surfaces with list of Curves, sorted per
+  //- Surface (ie., curve_lists_list is same length as surface_list).
+  //- This version is more efficient than the general-purpose one
+  //- above, as we know which curves to imprint with which surfaces.
+  //- All input surfaces must be from the same body.
+  CubitStatus AcisModifyEngine::imprint( DLIList<Surface*> &surface_list,
+					 DLIList<DLIList<Curve*>*> &curve_lists_list,
+					 BodySM*& new_body,
+					 bool keep_old_body ) const
+    {
+      // Calling code has already ensured that all the Surfaces are from the
+      // same body
 
-  SurfaceACIS* surf_ptr = dynamic_cast<SurfaceACIS*>(surface_list.get());
-  if( surf_ptr == NULL )
-    return CUBIT_FAILURE;
-  FACE *FACE_ptr = surf_ptr->get_FACE_ptr();
-  if (!FACE_ptr)
-  {
-    PRINT_ERROR("Invalid SurfaceACIS (no FACE ptr) at %s:%d\n",__FILE__,__LINE__);
-    return CUBIT_FAILURE;
-  }
-  BODY *BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACE_ptr );
-  if( BODY_ptr == NULL )
-    return CUBIT_FAILURE;
-  BodySM *body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY( FACE_ptr );
-  if( body_ptr == NULL )
-    return CUBIT_FAILURE;
+      bool delete_attribs =
+	(GeometryModifyTool::instance()->get_new_ids() || keep_old_body);
 
-  int i, j;
-  EDGE *EDGE_ptr;
-  DLIList<DLIList<EDGE*>*> EDGE_lists_list;
-  DLIList<EDGE*> *EDGE_list_ptr;
-  DLIList<SurfaceACIS*> surf_ACIS_list;
+      SurfaceACIS* surf_ptr = dynamic_cast<SurfaceACIS*>(surface_list.get());
+      if( surf_ptr == NULL )
+	return CUBIT_FAILURE;
+      FACE *FACE_ptr = surf_ptr->get_FACE_ptr();
+      if (!FACE_ptr)
+	{
+	  PRINT_ERROR("Invalid SurfaceACIS (no FACE ptr) at %s:%d\n",__FILE__,__LINE__);
+	  return CUBIT_FAILURE;
+	}
+      BODY *BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACE_ptr );
+      if( BODY_ptr == NULL )
+	return CUBIT_FAILURE;
+      BodySM *body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY( FACE_ptr );
+      if( body_ptr == NULL )
+	return CUBIT_FAILURE;
 
-  surface_list.reset();
-  curve_lists_list.reset();
-  for( i=surface_list.size(); i--; )
-  {
-    surf_ptr = dynamic_cast<SurfaceACIS*>(surface_list.get_and_step());
-    if (!surf_ptr)
-    {
-      PRINT_ERROR("Non-ACIS surface at %s: %d\n",__FILE__,__LINE__);
-      return CUBIT_FAILURE;
-    }
-    surf_ACIS_list.append( surf_ptr );
+      int i, j;
+      EDGE *EDGE_ptr;
+      DLIList<DLIList<EDGE*>*> EDGE_lists_list;
+      DLIList<EDGE*> *EDGE_list_ptr;
+      DLIList<SurfaceACIS*> surf_ACIS_list;
 
-    // Make sure there is a FACE associated with this SurfaceACIS
-    FACE_ptr = surf_ptr->get_FACE_ptr();
-    if (!FACE_ptr)
-    {
-      PRINT_ERROR("Invalid SurfaceACIS (no FACE ptr) at %s:%d\n",__FILE__,__LINE__);
-      return CUBIT_FAILURE;
-    }
+      surface_list.reset();
+      curve_lists_list.reset();
+      for( i=surface_list.size(); i--; )
+	{
+	  surf_ptr = dynamic_cast<SurfaceACIS*>(surface_list.get_and_step());
+	  if (!surf_ptr)
+	    {
+	      PRINT_ERROR("Non-ACIS surface at %s: %d\n",__FILE__,__LINE__);
+	      return CUBIT_FAILURE;
+	    }
+	  surf_ACIS_list.append( surf_ptr );
 
-    EDGE_list_ptr = new DLIList<EDGE*>;
-    EDGE_lists_list.append( EDGE_list_ptr );
+	  // Make sure there is a FACE associated with this SurfaceACIS
+	  FACE_ptr = surf_ptr->get_FACE_ptr();
+	  if (!FACE_ptr)
+	    {
+	      PRINT_ERROR("Invalid SurfaceACIS (no FACE ptr) at %s:%d\n",__FILE__,__LINE__);
+	      return CUBIT_FAILURE;
+	    }
 
-    DLIList<Curve*> *curve_list_ptr = curve_lists_list.get_and_step();
-    curve_list_ptr->reset();
-    for( j=curve_list_ptr->size(); j--; )
-    {
-      Curve *curve_ptr = curve_list_ptr->get_and_step();
-      CurveACIS* curve_acis_ptr = dynamic_cast<CurveACIS*>(curve_ptr);
-      if (!curve_acis_ptr)
-      {
-        PRINT_ERROR("Non-ACIS curve at %s: %d\n",__FILE__,__LINE__);
-        return CUBIT_FAILURE;
-      }
-      EDGE_ptr = curve_acis_ptr->get_EDGE_ptr();
-      if( EDGE_ptr == NULL )
-      {
-        PRINT_ERROR("Invalid CurveACIS (no EDGE ptr) at %s:%d\n",__FILE__,__LINE__);
-        return CUBIT_FAILURE;
-      }
-      EDGE_list_ptr->append( EDGE_ptr );
-    }
-  }
+	  EDGE_list_ptr = new DLIList<EDGE*>;
+	  EDGE_lists_list.append( EDGE_list_ptr );
 
-  // Copy the BODY and get the corresponding FACEs on the copied BODY that need
-  // to be imprinted
-  DLIList<FACE*> copied_FACE_list;
-  BODY *copied_BODY_ptr;
-  if( get_copied_FACES_of_body( surf_ACIS_list, copied_FACE_list, copied_BODY_ptr )
-    == CUBIT_FAILURE )
-  {
-    return CUBIT_FAILURE;
-  }
+	  DLIList<Curve*> *curve_list_ptr = curve_lists_list.get_and_step();
+	  curve_list_ptr->reset();
+	  for( j=curve_list_ptr->size(); j--; )
+	    {
+	      Curve *curve_ptr = curve_list_ptr->get_and_step();
+	      CurveACIS* curve_acis_ptr = dynamic_cast<CurveACIS*>(curve_ptr);
+	      if (!curve_acis_ptr)
+		{
+		  PRINT_ERROR("Non-ACIS curve at %s: %d\n",__FILE__,__LINE__);
+		  return CUBIT_FAILURE;
+		}
+	      EDGE_ptr = curve_acis_ptr->get_EDGE_ptr();
+	      if( EDGE_ptr == NULL )
+		{
+		  PRINT_ERROR("Invalid CurveACIS (no EDGE ptr) at %s:%d\n",__FILE__,__LINE__);
+		  return CUBIT_FAILURE;
+		}
+	      EDGE_list_ptr->append( EDGE_ptr );
+	    }
+	}
 
-  // Now cleanout the owner attributes from the copied BODY, if required
-  if( delete_attribs )
-    AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copied_BODY_ptr);
+      // Copy the BODY and get the corresponding FACEs on the copied BODY that need
+      // to be imprinted
+      DLIList<FACE*> copied_FACE_list;
+      BODY *copied_BODY_ptr;
+      if( get_copied_FACES_of_body( surf_ACIS_list, copied_FACE_list, copied_BODY_ptr )
+	  == CUBIT_FAILURE )
+	{
+	  return CUBIT_FAILURE;
+	}
 
-  // Imprint the temporary EDGEs to the FACEs
-  if( imprint( copied_BODY_ptr, copied_FACE_list, EDGE_lists_list ) == CUBIT_FAILURE )
-  {
-    api_delent( copied_BODY_ptr );
-    while( EDGE_lists_list.size() ) delete EDGE_lists_list.pop();
-    return CUBIT_FAILURE;
-  }
-  DLIList<EDGE*> new_edges = AcisModifyEngine::instance()->find_new_EDGES(copied_BODY_ptr);
-  new_body = get_new_Body( body_ptr, BODY_ptr, copied_BODY_ptr, false);
+      // Now cleanout the owner attributes from the copied BODY, if required
+      if( delete_attribs )
+	AcisQueryEngine::instance()->remove_cubit_owner_attrib_in_BODY(copied_BODY_ptr);
 
-  // Add a imprint feature to the topo edges
-  for (int edge_count = new_edges.size(); edge_count-- && new_body; ) 
-  {
-      CubitSimpleAttrib *tmp_attrib = new CubitSimpleAttrib( "SOURCE_FEATURE", "IMPRINT" );
-      new ATTRIB_SNL_SIMPLE( new_edges[edge_count], tmp_attrib );
-      delete tmp_attrib;
-  }
+      // Imprint the temporary EDGEs to the FACEs
+      if( imprint( copied_BODY_ptr, copied_FACE_list, EDGE_lists_list ) == CUBIT_FAILURE )
+	{
+	  api_delent( copied_BODY_ptr );
+	  while( EDGE_lists_list.size() ) delete EDGE_lists_list.pop();
+	  return CUBIT_FAILURE;
+	}
+      DLIList<EDGE*> new_edges = AcisModifyEngine::instance()->find_new_EDGES(copied_BODY_ptr);
+      new_body = get_new_Body( body_ptr, BODY_ptr, copied_BODY_ptr, false);
 
-  // Free memory allocated in EDGE_lists_list
-  while( EDGE_lists_list.size() ) delete EDGE_lists_list.pop();
+      // Add a imprint feature to the topo edges
+      for (int edge_count = new_edges.size(); edge_count-- && new_body; ) 
+	{
+	  CubitSimpleAttrib *tmp_attrib = new CubitSimpleAttrib( "SOURCE_FEATURE", "IMPRINT" );
+	  new ATTRIB_SNL_SIMPLE( new_edges[edge_count], tmp_attrib );
+	  delete tmp_attrib;
+	}
 
-  return new_body ? CUBIT_SUCCESS : CUBIT_FAILURE;
-}
+      // Free memory allocated in EDGE_lists_list
+      while( EDGE_lists_list.size() ) delete EDGE_lists_list.pop();
 
-DLIList<EDGE*> AcisModifyEngine::find_new_EDGES(BODY *copied_BODY_ptr)
-{
-    DLIList<EDGE*> return_list;
-    ENTITY_LIST edge_list;
-    api_get_edges(copied_BODY_ptr, edge_list);
-    AcisBridge *ab_edge_ptr = NULL;
-    for(int i=0; i<edge_list.count(); i++)
+      return new_body ? CUBIT_SUCCESS : CUBIT_FAILURE;
+    }
+
+  DLIList<EDGE*> AcisModifyEngine::find_new_EDGES(BODY *copied_BODY_ptr)
     {
-        ab_edge_ptr = ATTRIB_CUBIT_OWNER::cubit_owner( edge_list[i] );
-        if( !ab_edge_ptr )
-        {
-            return_list.append((EDGE*)edge_list[i]);
-            //AcisDrawTool::instance()->draw_EDGE( (EDGE*)edge_list[i], CUBIT_BLUE );
-        }
+      DLIList<EDGE*> return_list;
+      ENTITY_LIST edge_list;
+      api_get_edges(copied_BODY_ptr, edge_list);
+      AcisBridge *ab_edge_ptr = NULL;
+      for(int i=0; i<edge_list.count(); i++)
+	{
+	  ab_edge_ptr = ATTRIB_CUBIT_OWNER::cubit_owner( edge_list[i] );
+	  if( !ab_edge_ptr )
+	    {
+	      return_list.append((EDGE*)edge_list[i]);
+	      //AcisDrawTool::instance()->draw_EDGE( (EDGE*)edge_list[i], CUBIT_BLUE );
+	    }
+	}
+      // GfxDebug::flush();
+      return return_list;
     }
-    // GfxDebug::flush();
-    return return_list;
-}
 
-// This version is more efficient if it is known exactly which EDGEs
-// need to be imprinted with which FACEs (ie., it does not attempt to
-// imprint all input EDGEs to all input FACEs - only those in corresponding
-// list positions)
-CubitStatus AcisModifyEngine::imprint( BODY *BODY_ptr,
-                                       DLIList<FACE*> &FACE_list,
-                                       DLIList<DLIList<EDGE*>*> &EDGE_lists_list ) const
-{
-  // Imprint the edges to the surfaces on this body
-  outcome result;
-  FACE *FACE_ptr = 0;
-  EDGE *EDGE_ptr = 0;
+  // This version is more efficient if it is known exactly which EDGEs
+  // need to be imprinted with which FACEs (ie., it does not attempt to
+  // imprint all input EDGEs to all input FACEs - only those in corresponding
+  // list positions)
+  CubitStatus AcisModifyEngine::imprint( BODY *BODY_ptr,
+					 DLIList<FACE*> &FACE_list,
+					 DLIList<DLIList<EDGE*>*> &EDGE_lists_list ) const
+    {
+      // Imprint the edges to the surfaces on this body
+      outcome result;
+      FACE *FACE_ptr = 0;
+      EDGE *EDGE_ptr = 0;
 
-  int i, j, k, m;
+      int i, j, k, m;
 
-  DLIList<EDGE*> *EDGE_list_ptr;
-  EDGE_lists_list.reset();
-  FACE_list.reset();
-  for( i=EDGE_lists_list.size(); i--; )
-  {
-    EDGE_list_ptr = EDGE_lists_list.get_and_step();
-    FACE_ptr = FACE_list.get_and_step();
+      DLIList<EDGE*> *EDGE_list_ptr;
+      EDGE_lists_list.reset();
+      FACE_list.reset();
+      for( i=EDGE_lists_list.size(); i--; )
+	{
+	  EDGE_list_ptr = EDGE_lists_list.get_and_step();
+	  FACE_ptr = FACE_list.get_and_step();
 
-    DLIList<FACE*> temp_FACE_list;
-    temp_FACE_list.append( FACE_ptr );
+	  DLIList<FACE*> temp_FACE_list;
+	  temp_FACE_list.append( FACE_ptr );
 
-    EDGE_list_ptr->reset();
-    for( j=EDGE_list_ptr->size(); j--; )
-    {
-      // Imprint this edge list selectively to the current FACE
-      EDGE_ptr = EDGE_list_ptr->get_and_step();
+	  EDGE_list_ptr->reset();
+	  for( j=EDGE_list_ptr->size(); j--; )
+	    {
+	      // Imprint this edge list selectively to the current FACE
+	      EDGE_ptr = EDGE_list_ptr->get_and_step();
 
-      // Track the existing FACEs before imprinting this BODY with the edge.
-      // Needed so we know which new surfaces result from the imprint.  These
-      // new surfaces will need to be imprinted with subsequent edges.
-      DLIList<FACE*> FACES_BEFORE;
-      DLIList<FACE*> FACES_AFTER;
+	      // Track the existing FACEs before imprinting this BODY with the edge.
+	      // Needed so we know which new surfaces result from the imprint.  These
+	      // new surfaces will need to be imprinted with subsequent edges.
+	      DLIList<FACE*> FACES_BEFORE;
+	      DLIList<FACE*> FACES_AFTER;
 
-      temp_FACE_list.reset();
-      for( k=0; k<temp_FACE_list.size(); k++ )
-      {
-        FACE_ptr = temp_FACE_list.get_and_step();
+	      temp_FACE_list.reset();
+	      for( k=0; k<temp_FACE_list.size(); k++ )
+		{
+		  FACE_ptr = temp_FACE_list.get_and_step();
 
-        FACES_BEFORE.clean_out();
-        AcisQueryEngine::instance()->get_FACEs( (ENTITY *)BODY_ptr, FACES_BEFORE );
+		  FACES_BEFORE.clean_out();
+		  AcisQueryEngine::instance()->get_FACEs( (ENTITY *)BODY_ptr, FACES_BEFORE );
 
-        if( imprint( BODY_ptr, FACE_ptr, EDGE_ptr ) == CUBIT_FAILURE )
-        {
-          PRINT_ERROR( "Unable to imprint EDGE to FACE\n" );
-          continue;
-        }
+		  if( imprint( BODY_ptr, FACE_ptr, EDGE_ptr ) == CUBIT_FAILURE )
+		    {
+		      PRINT_ERROR( "Unable to imprint EDGE to FACE\n" );
+		      continue;
+		    }
 
-        // Check against an assumption that if invalid, will
-        // cause a crash.  The assumption is that the imprinted
-        // FACE_ptr will remain valid after each imprint.
-        FACES_AFTER.clean_out();
-        AcisQueryEngine::instance()->get_FACEs( (ENTITY *)BODY_ptr, FACES_AFTER );
-        if( !FACES_AFTER.is_in_list( FACE_ptr ) )
-        {
-          PRINT_ERROR( "serious problem in imprint - an imprinted surface disappeared!\n"
-            "       Model restored - operation aborted\n" );
-          return CUBIT_FAILURE;
-        }
+		  // Check against an assumption that if invalid, will
+		  // cause a crash.  The assumption is that the imprinted
+		  // FACE_ptr will remain valid after each imprint.
+		  FACES_AFTER.clean_out();
+		  AcisQueryEngine::instance()->get_FACEs( (ENTITY *)BODY_ptr, FACES_AFTER );
+		  if( !FACES_AFTER.is_in_list( FACE_ptr ) )
+		    {
+		      PRINT_ERROR( "serious problem in imprint - an imprinted surface disappeared!\n"
+				   "       Model restored - operation aborted\n" );
+		      return CUBIT_FAILURE;
+		    }
 
-        // Find which new surfaces were created - add these to the
-        // temp_FACE_list so that additional edges will imprint
-        // on these as well.
-        DLIList<FACE*> new_FACES;
-        FACE* after_FACE_ptr;
-        for( m=FACES_AFTER.size(); m--; )
-        {
-          after_FACE_ptr = FACES_AFTER.get_and_step();
+		  // Find which new surfaces were created - add these to the
+		  // temp_FACE_list so that additional edges will imprint
+		  // on these as well.
+		  DLIList<FACE*> new_FACES;
+		  FACE* after_FACE_ptr;
+		  for( m=FACES_AFTER.size(); m--; )
+		    {
+		      after_FACE_ptr = FACES_AFTER.get_and_step();
 
-          if( !FACES_BEFORE.is_in_list( after_FACE_ptr ) )
-            new_FACES.append(after_FACE_ptr);
-        }
-        temp_FACE_list += new_FACES;
+		      if( !FACES_BEFORE.is_in_list( after_FACE_ptr ) )
+			new_FACES.append(after_FACE_ptr);
+		    }
+		  temp_FACE_list += new_FACES;
 
-        // Set list back to correct location
-        temp_FACE_list.move_to( FACE_ptr );
-        temp_FACE_list.step();
-     } // End of looping over temp_FACE_list
+		  // Set list back to correct location
+		  temp_FACE_list.move_to( FACE_ptr );
+		  temp_FACE_list.step();
+		} // End of looping over temp_FACE_list
+	    }
+	}
+      return CUBIT_SUCCESS;
     }
-  }
-  return CUBIT_SUCCESS;
-}
 
-// Imprints locations to bodies (for splitting curves or putting hardpoints
-// on surfaces).
-CubitStatus AcisModifyEngine::imprint( DLIList<BodySM*> &body_list,
-                                       DLIList<CubitVector*> &vector_list,
-                                       DLIList<BodySM*>& new_body_list,
-                                       bool keep_old_body,
-                                       DLIList<TopologyBridge*> *new_tbs,
-                                       DLIList<TopologyBridge*> *att_tbs ) const
-{
-   // Until Spatial fixes imprinting with vertices, implement a hack
-   // (Steve Storm, Caterpillar Inc.)
-   int i, j, k;
-   outcome result;
-   double tol = 1e-3;
-   //CubitStatus status = CUBIT_SUCCESS;
+  // Imprints locations to bodies (for splitting curves or putting hardpoints
+  // on surfaces).
+  CubitStatus AcisModifyEngine::imprint( DLIList<BodySM*> &body_list,
+					 DLIList<CubitVector*> &vector_list,
+					 DLIList<BodySM*>& new_body_list,
+					 bool keep_old_body,
+					 DLIList<TopologyBridge*> *new_tbs,
+					 DLIList<TopologyBridge*> *att_tbs ) const
+    {
+      // Until Spatial fixes imprinting with vertices, implement a hack
+      // (Steve Storm, Caterpillar Inc.)
+      int i, j, k;
+      outcome result;
+      double tol = 1e-3;
+      //CubitStatus status = CUBIT_SUCCESS;
 
-   CubitVector* vector_ptr;
-   BodySM *body_ptr;
+      CubitVector* vector_ptr;
+      BodySM *body_ptr;
 
-   VERTEX *VERTEX_ptr;
-   EDGE *EDGE_ptr;
-   FACE *FACE_ptr;
+      VERTEX *VERTEX_ptr;
+      EDGE *EDGE_ptr;
+      FACE *FACE_ptr;
 
-   BODY *BODY_ptr;
-   BODY *copied_BODY_ptr;
+      BODY *BODY_ptr;
+      BODY *copied_BODY_ptr;
 
-   //CubitVector vertex_coords;
+      //CubitVector vertex_coords;
 
-   bool delete_attribs =
-      (GeometryModifyTool::instance()->get_new_ids() || keep_old_body);
+      bool delete_attribs =
+	(GeometryModifyTool::instance()->get_new_ids() || keep_old_body);
 
-   // Set an option for imprinting
-   api_set_int_option("all_free_edges", TRUE );
+      // Set an option for imprinting
+      api_set_int_option("all_free_edges", TRUE );
 
-  // new_ENTITIES will hold new entities that were created by 
-  // the imprint operation.  att_ENTITIES will hold entities
-  // from the original bodies that had composite attributes
-  // on them.  At the end we will compare the new entities
-  // with the ones that had attributes and if we find matches
-  // we will put a composite attribute on the new entity.
-  // This is how we are handling the imprinting of bodies
-  // with composites.
-  DLIList<ENTITY*> new_ENTITIES;
-  DLIList<ENTITY*> att_ENTITIES;
+      // new_ENTITIES will hold new entities that were created by 
+      // the imprint operation.  att_ENTITIES will hold entities
+      // from the original bodies that had composite attributes
+      // on them.  At the end we will compare the new entities
+      // with the ones that had attributes and if we find matches
+      // we will put a composite attribute on the new entity.
+      // This is how we are handling the imprinting of bodies
+      // with composites.
+      DLIList<ENTITY*> new_ENTITIES;
+      DLIList<ENTITY*> att_ENTITIES;
 
-   body_list.reset();
-   for( i=0; i<body_list.size(); i++ )
-   {
-      body_ptr = body_list.get_and_step();
+      body_list.reset();
+      for( i=0; i<body_list.size(); i++ )
+	{
+	  body_ptr = body_list.get_and_step();
 
-      BODY_ptr = AcisQueryEngine::get_BODY( body_ptr );
-      if( BODY_ptr == NULL )
-         return CUBIT_FAILURE;
+	  BODY_ptr = AcisQueryEngine::get_BODY( body_ptr );
+	  if( BODY_ptr == NULL )
+	    return CUBIT_FAILURE;
 
-      // Copy the body before working with it
-      copied_BODY_ptr = copy_BODY( BODY_ptr, delete_attribs );
+	  // Copy the body before working with it
+	  copied_BODY_ptr = copy_BODY( BODY_ptr, delete_attribs );
 
-      // Get all the vertices of the BODY
-      DLIList<VERTEX*> VERTEX_list;
-      AcisQueryEngine::instance()->get_VERTICEs( (ENTITY*)BODY_ptr, VERTEX_list );
+	  // Get all the vertices of the BODY
+	  DLIList<VERTEX*> VERTEX_list;
+	  AcisQueryEngine::instance()->get_VERTICEs( (ENTITY*)BODY_ptr, VERTEX_list );
 
-      // Get all the FACES of the *original* BODY
-      DLIList<FACE*> FACE_list;
-      AcisQueryEngine::instance()->get_FACEs( (ENTITY*)BODY_ptr, FACE_list );
+	  // Get all the FACES of the *original* BODY
+	  DLIList<FACE*> FACE_list;
+	  AcisQueryEngine::instance()->get_FACEs( (ENTITY*)BODY_ptr, FACE_list );
 
-      // Loop through the passed-in locations, first checking for coincidence
-      // w/vertices, then if on curves, then on faces.
-      vector_list.reset();
-      for( j=0; j<vector_list.size(); j++ )
-      {
-         vector_ptr = vector_list.get_and_step();
-         SPAposition test_point( vector_ptr->x(), vector_ptr->y(), vector_ptr->z() );
+	  // Loop through the passed-in locations, first checking for coincidence
+	  // w/vertices, then if on curves, then on faces.
+	  vector_list.reset();
+	  for( j=0; j<vector_list.size(); j++ )
+	    {
+	      vector_ptr = vector_list.get_and_step();
+	      SPAposition test_point( vector_ptr->x(), vector_ptr->y(), vector_ptr->z() );
 
-         CubitBoolean on_vertex = CUBIT_FALSE;
-         VERTEX_list.reset();
-         for( k=0; k<VERTEX_list.size(); k++ )
-         {
-            VERTEX_ptr = VERTEX_list.get_and_step();
+	      CubitBoolean on_vertex = CUBIT_FALSE;
+	      VERTEX_list.reset();
+	      for( k=0; k<VERTEX_list.size(); k++ )
+		{
+		  VERTEX_ptr = VERTEX_list.get_and_step();
 
-            SPAposition VERTEX_coords = VERTEX_ptr->geometry()->coords();
+		  SPAposition VERTEX_coords = VERTEX_ptr->geometry()->coords();
 
-            if (( fabs(VERTEX_coords.x() - vector_ptr->x()) < tol) &&
-               ( fabs(VERTEX_coords.y() - vector_ptr->y()) < tol) &&
-               ( fabs(VERTEX_coords.z() - vector_ptr->z()) < tol))
-            {
-               on_vertex = CUBIT_TRUE;
-               break; // Skip - coincident with a vertex
-            }
-         }
+		  if (( fabs(VERTEX_coords.x() - vector_ptr->x()) < tol) &&
+		      ( fabs(VERTEX_coords.y() - vector_ptr->y()) < tol) &&
+		      ( fabs(VERTEX_coords.z() - vector_ptr->z()) < tol))
+		    {
+		      on_vertex = CUBIT_TRUE;
+		      break; // Skip - coincident with a vertex
+		    }
+		}
 
-         if( on_vertex )
-            continue; // No imprinting necessary
+	      if( on_vertex )
+		continue; // No imprinting necessary
 
-         // Get all the EDGES of the copied BODY
-         DLIList<EDGE*> EDGE_list;
-         AcisQueryEngine::instance()->get_EDGEs( (ENTITY*)copied_BODY_ptr, EDGE_list );
+	      // Get all the EDGES of the copied BODY
+	      DLIList<EDGE*> EDGE_list;
+	      AcisQueryEngine::instance()->get_EDGEs( (ENTITY*)copied_BODY_ptr, EDGE_list );
 
-         // Check the EDGES
-         CubitBoolean on_edge = CUBIT_FALSE;
-         EDGE_list.reset();
-         for( k=0; k<EDGE_list.size(); k++ )
-         {
-            EDGE_ptr = EDGE_list.get_and_step();
+	      // Check the EDGES
+	      CubitBoolean on_edge = CUBIT_FALSE;
+	      EDGE_list.reset();
+	      for( k=0; k<EDGE_list.size(); k++ )
+		{
+		  EDGE_ptr = EDGE_list.get_and_step();
 
-            if (EDGE_ptr->geometry() == NULL)
-               continue; // Check next edge
+		  if (EDGE_ptr->geometry() == NULL)
+		    continue; // Check next edge
 
-            //const curve* acis_curve = &EDGE_ptr->geometry()->equation();
+		  //const curve* acis_curve = &EDGE_ptr->geometry()->equation();
 
-            SPAtransf ftrans;
+		  SPAtransf ftrans;
 
-            point_edge_containment pe_rel;
+		  point_edge_containment pe_rel;
 
-            ENTITY *ENTITY_ptr = NULL;
-            SPAparameter param;
+		  ENTITY *ENTITY_ptr = NULL;
+		  SPAparameter param;
 
-            pe_rel = sg_point_in_edge( test_point, EDGE_ptr, ftrans, ENTITY_ptr, param );
+		  pe_rel = sg_point_in_edge( test_point, EDGE_ptr, ftrans, ENTITY_ptr, param );
 
-            if( pe_rel == point_off_edge )
-               continue; // Check next edge
-            else if( pe_rel == point_on_edge )
-            {
-              on_edge = CUBIT_TRUE;
-              VERTEX *new_vertex = ACIS_NEW VERTEX( ACIS_NEW APOINT( test_point) );
+		  if( pe_rel == point_off_edge )
+		    continue; // Check next edge
+		  else if( pe_rel == point_on_edge )
+		    {
+		      on_edge = CUBIT_TRUE;
+		      VERTEX *new_vertex = ACIS_NEW VERTEX( ACIS_NEW APOINT( test_point) );
 
-              API_BEGIN;
-              sg_split_edge_at_vertex( EDGE_ptr, new_vertex );  
-              API_END;
+		      API_BEGIN;
+		      sg_split_edge_at_vertex( EDGE_ptr, new_vertex );  
+		      API_END;
 
-              if( !result.ok() && result.error_number()!=200 )
-              {
-                AcisQueryEngine::instance()->ACIS_API_error(result);
-                PRINT_ERROR( "problem imprinting curve onto volume\n");
-              }
+		      if( !result.ok() && result.error_number()!=200 )
+			{
+			  AcisQueryEngine::instance()->ACIS_API_error(result);
+			  PRINT_ERROR( "problem imprinting curve onto volume\n");
+			}
 
-              break;
-            }
-         }
+		      break;
+		    }
+		}
 
-         if( on_edge )
-            continue; // Already imprinted onto the body - check next vertex
+	      if( on_edge )
+		continue; // Already imprinted onto the body - check next vertex
 
-         // Check the FACES
-         FACE_list.reset();
-         for( k=0; k<FACE_list.size(); k++ )
-         {
-            FACE_ptr = FACE_list.get_and_step();
+	      // Check the FACES
+	      FACE_list.reset();
+	      for( k=0; k<FACE_list.size(); k++ )
+		{
+		  FACE_ptr = FACE_list.get_and_step();
 
-            if (FACE_ptr->geometry() == NULL)
-               continue; // Check next face
+		  if (FACE_ptr->geometry() == NULL)
+		    continue; // Check next face
 
-            SPAtransf ftrans;
+		  SPAtransf ftrans;
 
-            point_face_containment pf_rel = point_in_face( test_point, FACE_ptr, ftrans );
-            if( pf_rel == point_outside_face )
-               continue; // Check next face
-            else if( pf_rel == point_inside_face )
-            {
-               // Create a short curve normal to the surface at the vertex and imprint it
-               SPAunit_vector norm;
-               norm = FACE_ptr->geometry()->equation().point_normal( test_point );
+		  point_face_containment pf_rel = point_in_face( test_point, FACE_ptr, ftrans );
+		  if( pf_rel == point_outside_face )
+		    continue; // Check next face
+		  else if( pf_rel == point_inside_face )
+		    {
+		      // Create a short curve normal to the surface at the vertex and imprint it
+		      SPAunit_vector norm;
+		      norm = FACE_ptr->geometry()->equation().point_normal( test_point );
 
-               if ( FACE_ptr->sense() == REVERSED )
-                  norm = -norm;
+		      if ( FACE_ptr->sense() == REVERSED )
+			norm = -norm;
 
-               // Find the end point
-               SPAposition end_point;
-               end_point.set_x( test_point.x() + (tol * norm.x()) );
-               end_point.set_y( test_point.y() + (tol * norm.y()) );
-               end_point.set_z( test_point.z() + (tol * norm.z()) );
+		      // Find the end point
+		      SPAposition end_point;
+		      end_point.set_x( test_point.x() + (tol * norm.x()) );
+		      end_point.set_y( test_point.y() + (tol * norm.y()) );
+		      end_point.set_z( test_point.z() + (tol * norm.z()) );
 
-               // Create the curve
-               EDGE* new_EDGE_ptr = NULL;
-               result = api_mk_ed_line ( test_point, end_point, new_EDGE_ptr );
-               if (!result.ok() || new_EDGE_ptr == NULL)
-               {
-                  AcisQueryEngine::instance()->ACIS_API_error (result);
-                  PRINT_WARNING("Unable to make short normal curve for imprint operation\n" );
-                  continue;
-               }
+		      // Create the curve
+		      EDGE* new_EDGE_ptr = NULL;
+		      result = api_mk_ed_line ( test_point, end_point, new_EDGE_ptr );
+		      if (!result.ok() || new_EDGE_ptr == NULL)
+			{
+			  AcisQueryEngine::instance()->ACIS_API_error (result);
+			  PRINT_WARNING("Unable to make short normal curve for imprint operation\n" );
+			  continue;
+			}
 
-               // Create a wire from the short curve
-               BODY *wire_BODY_ptr = NULL;
-               result = api_make_ewire( 1, &new_EDGE_ptr, wire_BODY_ptr );
-               if (!result.ok())
-               {
-                  AcisQueryEngine::instance()->ACIS_API_error (result);
-                  PRINT_WARNING( "Unable to make ACIS WIRE from short imprint curve\n" );
+		      // Create a wire from the short curve
+		      BODY *wire_BODY_ptr = NULL;
+		      result = api_make_ewire( 1, &new_EDGE_ptr, wire_BODY_ptr );
+		      if (!result.ok())
+			{
+			  AcisQueryEngine::instance()->ACIS_API_error (result);
+			  PRINT_WARNING( "Unable to make ACIS WIRE from short imprint curve\n" );
 
-                  if( wire_BODY_ptr )
-                     api_delent( wire_BODY_ptr );
-                  else
-                     api_delent( new_EDGE_ptr );
-                  continue;
-               }
+			  if( wire_BODY_ptr )
+			    api_delent( wire_BODY_ptr );
+			  else
+			    api_delent( new_EDGE_ptr );
+			  continue;
+			}
 
-               // Imprint the wire-body onto the BODY
-               result = api_imprint( wire_BODY_ptr, copied_BODY_ptr );
+		      // Imprint the wire-body onto the BODY
+		      result = api_imprint( wire_BODY_ptr, copied_BODY_ptr );
 
-               if( !result.ok() && result.error_number()!=200 )
-               {
-                  AcisQueryEngine::instance()->ACIS_API_error(result);
-                  PRINT_ERROR( "problem imprinting short curve onto volume\n");
-               }
+		      if( !result.ok() && result.error_number()!=200 )
+			{
+			  AcisQueryEngine::instance()->ACIS_API_error(result);
+			  PRINT_ERROR( "problem imprinting short curve onto volume\n");
+			}
 
-               api_delent( wire_BODY_ptr );
+		      api_delent( wire_BODY_ptr );
 
-               break; // Done imprinting with this vertex
+		      break; // Done imprinting with this vertex
 
-            }
-            else if( pf_rel == point_boundary_face )
-            {
-               PRINT_WARNING( "Algorithm error - point found on boundary of surface - please report this\n" );
-               continue;
-            }
-            else if( pf_rel == point_unknown_face )
-               continue; // Check next face
-         }
-      }
+		    }
+		  else if( pf_rel == point_boundary_face )
+		    {
+		      PRINT_WARNING( "Algorithm error - point found on boundary of surface - please report this\n" );
+		      continue;
+		    }
+		  else if( pf_rel == point_unknown_face )
+		    continue; // Check next face
+		}
+	    }
 
-      AcisModifyEngine::instance()->cleanup_slivers( copied_BODY_ptr );
+	  AcisModifyEngine::instance()->cleanup_slivers( copied_BODY_ptr );
 
-      // Get the new entities (just edges for now)
-      // created by the imprint operation.
-      DLIList<ENTITY*> cur_new_ENTITIES;
-      if(copied_BODY_ptr && new_tbs)
-        get_new_ENTITIES(copied_BODY_ptr, cur_new_ENTITIES);
+	  // Get the new entities (just edges for now)
+	  // created by the imprint operation.
+	  DLIList<ENTITY*> cur_new_ENTITIES;
+	  if(copied_BODY_ptr && new_tbs)
+	    get_new_ENTITIES(copied_BODY_ptr, cur_new_ENTITIES);
 
-      BodySM* new_body_ptr = get_new_Body( body_ptr, BODY_ptr,
-                               copied_BODY_ptr, keep_old_body, CUBIT_TRUE );
-      if (new_body_ptr)
-      {
-        new_body_list.append(new_body_ptr);
+	  BodySM* new_body_ptr = get_new_Body( body_ptr, BODY_ptr,
+					       copied_BODY_ptr, keep_old_body, CUBIT_TRUE );
+	  if (new_body_ptr)
+	    {
+	      new_body_list.append(new_body_ptr);
 
-        // Add the new entities to the list we are
-        // accumulating.
-        if(new_tbs)
-          new_ENTITIES += cur_new_ENTITIES;
+	      // Add the new entities to the list we are
+	      // accumulating.
+	      if(new_tbs)
+		new_ENTITIES += cur_new_ENTITIES;
 
-        // Get entities with composite attributes.
-        if(copied_BODY_ptr && att_tbs)
-          get_att_ENTITIES(copied_BODY_ptr, att_ENTITIES, "COMPOSITE_GEOM");
+	      // Get entities with composite attributes.
+	      if(copied_BODY_ptr && att_tbs)
+		get_att_ENTITIES(copied_BODY_ptr, att_ENTITIES, "COMPOSITE_GEOM");
 
-      }
-      else
-      {
-        // Get entities with composite attributes.
-        if(att_tbs)
-          get_att_ENTITIES(BODY_ptr, att_ENTITIES, "COMPOSITE_GEOM");
-      }
+	    }
+	  else
+	    {
+	      // Get entities with composite attributes.
+	      if(att_tbs)
+		get_att_ENTITIES(BODY_ptr, att_ENTITIES, "COMPOSITE_GEOM");
+	    }
 
-   }
+	}
 
-    // Convert the new_ENTITIES/att_ENTITIES lists into
-    // topology bridge lists.
-    if(new_tbs)
-    {
-      for(i=new_ENTITIES.size(); i--;)
-      {
-        ENTITY *cur_ENT = new_ENTITIES.get_and_step();
-        AcisBridge *acis_bridge = ATTRIB_CUBIT_OWNER::cubit_owner(cur_ENT);
-        if(dynamic_cast<TopologyBridge*>(acis_bridge))
-          new_tbs->append_unique(dynamic_cast<TopologyBridge*>(acis_bridge));
-      }
-    }
-    if(att_tbs)
-    {
-      for(i=att_ENTITIES.size(); i--;)
-      {
-        ENTITY *cur_ENT = att_ENTITIES.get_and_step();
-        AcisBridge *acis_bridge = ATTRIB_CUBIT_OWNER::cubit_owner(cur_ENT);
-        if(dynamic_cast<TopologyBridge*>(acis_bridge))
-          att_tbs->append_unique(dynamic_cast<TopologyBridge*>(acis_bridge));
-      }
-    }
+      // Convert the new_ENTITIES/att_ENTITIES lists into
+      // topology bridge lists.
+      if(new_tbs)
+	{
+	  for(i=new_ENTITIES.size(); i--;)
+	    {
+	      ENTITY *cur_ENT = new_ENTITIES.get_and_step();
+	      AcisBridge *acis_bridge = ATTRIB_CUBIT_OWNER::cubit_owner(cur_ENT);
+	      if(dynamic_cast<TopologyBridge*>(acis_bridge))
+		new_tbs->append_unique(dynamic_cast<TopologyBridge*>(acis_bridge));
+	    }
+	}
+      if(att_tbs)
+	{
+	  for(i=att_ENTITIES.size(); i--;)
+	    {
+	      ENTITY *cur_ENT = att_ENTITIES.get_and_step();
+	      AcisBridge *acis_bridge = ATTRIB_CUBIT_OWNER::cubit_owner(cur_ENT);
+	      if(dynamic_cast<TopologyBridge*>(acis_bridge))
+		att_tbs->append_unique(dynamic_cast<TopologyBridge*>(acis_bridge));
+	    }
+	}
 
-   api_set_int_option("all_free_edges", FALSE );
+      api_set_int_option("all_free_edges", FALSE );
 
-   return CUBIT_SUCCESS;
+      return CUBIT_SUCCESS;
 
-// When Spatial gets vertex body to body imprinting working, you should be
-// able to replace all of the above code with this code.
+      // When Spatial gets vertex body to body imprinting working, you should be
+      // able to replace all of the above code with this code.
 #if 0
-   int i, j;
-   outcome result;
-   CubitStatus status = CUBIT_SUCCESS;
+      int i, j;
+      outcome result;
+      CubitStatus status = CUBIT_SUCCESS;
 
-   RefVertex* ref_vertex_ptr;
-   Body *body_ptr;
+      RefVertex* ref_vertex_ptr;
+      Body *body_ptr;
 
-   BODY *BODY_ptr;
-   BODY *copied_BODY_ptr;
+      BODY *BODY_ptr;
+      BODY *copied_BODY_ptr;
 
-   CubitVector vertex_coords;
-   BODY* vertex_BODY_ptr;
-   DLIList<BODY*> vertex_BODY_list;
+      CubitVector vertex_coords;
+      BODY* vertex_BODY_ptr;
+      DLIList<BODY*> vertex_BODY_list;
 
-   bool delete_attribs =
-      (GeometryModifyTool::instance()->new_ids() || keep_old_body);
+      bool delete_attribs =
+	(GeometryModifyTool::instance()->new_ids() || keep_old_body);
 
-   // Create a list of BODYs that consist of single points.  These
-   // will be used for imprinting onto the BODYs.
-   vector_list.reset();
-   SPAposition acis_position[1];
-   for( i=0; i<vector_list.size(); i++ )
-   {
-      vector_ptr = vector_list.get_and_step();
+      // Create a list of BODYs that consist of single points.  These
+      // will be used for imprinting onto the BODYs.
+      vector_list.reset();
+      SPAposition acis_position[1];
+      for( i=0; i<vector_list.size(); i++ )
+	{
+	  vector_ptr = vector_list.get_and_step();
 
-      acis_position[0].set_x( vector_ptr->x() );
-      acis_position[0].set_y( vector_ptr->y() );
-      acis_position[0].set_z( vector_ptr->z() );
+	  acis_position[0].set_x( vector_ptr->x() );
+	  acis_position[0].set_y( vector_ptr->y() );
+	  acis_position[0].set_z( vector_ptr->z() );
 
-      result = api_make_wire( NULL, 1, acis_position, vertex_BODY_ptr );
-      if( !result.ok() )
-      {
-         AcisQueryEngine::instance()->ACIS_API_error (result);
-         PRINT_ERROR( "unable to make degenerate wire body from location %f, %f, %f; aborting\n",
-                      vector_ptr->x(), vector_ptr->y(), vector_ptr->z() );
-         for( j=0; j<vertex_BODY_list.size(); j++ )
-            api_delent( vertex_BODY_list.get_and_step() );
-         return CUBIT_FAILURE;
-      }
+	  result = api_make_wire( NULL, 1, acis_position, vertex_BODY_ptr );
+	  if( !result.ok() )
+	    {
+	      AcisQueryEngine::instance()->ACIS_API_error (result);
+	      PRINT_ERROR( "unable to make degenerate wire body from location %f, %f, %f; aborting\n",
+			   vector_ptr->x(), vector_ptr->y(), vector_ptr->z() );
+	      for( j=0; j<vertex_BODY_list.size(); j++ )
+		api_delent( vertex_BODY_list.get_and_step() );
+	      return CUBIT_FAILURE;
+	    }
 
-      vertex_BODY_list.append( vertex_BODY_ptr );
-   }
+	  vertex_BODY_list.append( vertex_BODY_ptr );
+	}
 
-   // Loop on bodies, imprinting each with all the vertex BODYs.
-   for( i=0; i<body_list.size(); i++ )
-   {
-      body_ptr = body_list.get_and_step();
+      // Loop on bodies, imprinting each with all the vertex BODYs.
+      for( i=0; i<body_list.size(); i++ )
+	{
+	  body_ptr = body_list.get_and_step();
 
-      BODY_ptr = AcisQueryEngine::get_BODY( body_ptr );
-      if( BODY_ptr == NULL )
-      {
-//NOTE TO JS
-         PRINT_ERROR( "Unable to get ACIS BODY from Body %d; aborting\n",
-            body_ptr->id() );
-         for( j=0; j<vertex_BODY_list.size(); j++ )
-            api_delent( vertex_BODY_list.get_and_step() );
-         return CUBIT_FAILURE;
-      }
+	  BODY_ptr = AcisQueryEngine::get_BODY( body_ptr );
+	  if( BODY_ptr == NULL )
+	    {
+	      //NOTE TO JS
+	      PRINT_ERROR( "Unable to get ACIS BODY from Body %d; aborting\n",
+			   body_ptr->id() );
+	      for( j=0; j<vertex_BODY_list.size(); j++ )
+		api_delent( vertex_BODY_list.get_and_step() );
+	      return CUBIT_FAILURE;
+	    }
 
-      // Copy the body before working with it
-      copied_BODY_ptr = copy_BODY( BODY_ptr, delete_attribs );
+	  // Copy the body before working with it
+	  copied_BODY_ptr = copy_BODY( BODY_ptr, delete_attribs );
 
-      // Imprint the wire-bodies onto the BODY
-      api_set_int_option("all_free_edges", TRUE );
-      vertex_BODY_list.reset();
-      vector_list.reset();
-      for( i=0; i<vertex_BODY_list.size(); i++ )
-      {
-         vertex_BODY_ptr = vertex_BODY_list.get_and_step();
-         vector_ptr = vector_list.get_and_step();
+	  // Imprint the wire-bodies onto the BODY
+	  api_set_int_option("all_free_edges", TRUE );
+	  vertex_BODY_list.reset();
+	  vector_list.reset();
+	  for( i=0; i<vertex_BODY_list.size(); i++ )
+	    {
+	      vertex_BODY_ptr = vertex_BODY_list.get_and_step();
+	      vector_ptr = vector_list.get_and_step();
 
-         result = api_imprint( vertex_BODY_ptr, copied_BODY_ptr );
+	      result = api_imprint( vertex_BODY_ptr, copied_BODY_ptr );
 
-         if( !result.ok() && result.error_number()!=200 )
-         {
-//NOTE to JS
-            PRINT_ERROR( "problem imprinting location %f, %f, %f to body %d\n",
-                         vector_ptr->x(), vector_ptr->y(), vector_ptr->z(),
-                         body_ptr->id() );
-            AcisQueryEngine::instance()->ACIS_API_error(result);
-            status = CUBIT_FAILURE;
-         }
-      }
-      api_set_int_option("all_free_edges", FALSE );
+	      if( !result.ok() && result.error_number()!=200 )
+		{
+		  //NOTE to JS
+		  PRINT_ERROR( "problem imprinting location %f, %f, %f to body %d\n",
+			       vector_ptr->x(), vector_ptr->y(), vector_ptr->z(),
+			       body_ptr->id() );
+		  AcisQueryEngine::instance()->ACIS_API_error(result);
+		  status = CUBIT_FAILURE;
+		}
+	    }
+	  api_set_int_option("all_free_edges", FALSE );
 
-      Body* new_body_ptr = get_new_Body( body_ptr, BODY_ptr, copied_BODY_ptr,
-                                         keep_old_body, CUBIT_TRUE );
+	  Body* new_body_ptr = get_new_Body( body_ptr, BODY_ptr, copied_BODY_ptr,
+					     keep_old_body, CUBIT_TRUE );
 
-      if( new_body_ptr!=NULL && new_body_ptr!=body_ptr )
-      {
-//NOTE TO JS
-         PRINT_INFO( "Created new body %d\n", new_body_ptr->id() );
-         new_body_list.append( new_body_ptr );
-      }
-      else if( new_body_ptr!=NULL && new_body_ptr==body_ptr )
-      {
-//NOTE TO JS
-         PRINT_INFO( "Modified body %d\n", body_ptr->id() );
-      }
-//NOTE TO JS
-      else
-         PRINT_WARNING( "Body %d was not modified\n", body_ptr->id() );
-   }
+	  if( new_body_ptr!=NULL && new_body_ptr!=body_ptr )
+	    {
+	      //NOTE TO JS
+	      PRINT_INFO( "Created new body %d\n", new_body_ptr->id() );
+	      new_body_list.append( new_body_ptr );
+	    }
+	  else if( new_body_ptr!=NULL && new_body_ptr==body_ptr )
+	    {
+	      //NOTE TO JS
+	      PRINT_INFO( "Modified body %d\n", body_ptr->id() );
+	    }
+	  //NOTE TO JS
+	  else
+	    PRINT_WARNING( "Body %d was not modified\n", body_ptr->id() );
+	}
 
-   // Free memory
-   for( i=0; i<vertex_BODY_list.size(); i++ )
-      api_delent( vertex_BODY_list.get_and_step() );
+      // Free memory
+      for( i=0; i<vertex_BODY_list.size(); i++ )
+	api_delent( vertex_BODY_list.get_and_step() );
 
-   return status;
+      return status;
 #endif
-}
+    }
 
-CubitStatus
-AcisModifyEngine::offset_curves( DLIList<Curve*>& ref_edge_list,
-                                 DLIList<Curve*>& new_curves,
-                                 double offset_distance,
-                                 const CubitVector& offset_direction,
-                                 int gap_type )
-{
-   int i;
+  CubitStatus
+    AcisModifyEngine::offset_curves( DLIList<Curve*>& ref_edge_list,
+				     DLIList<Curve*>& new_curves,
+				     double offset_distance,
+				     const CubitVector& offset_direction,
+				     int gap_type )
+    {
+      int i;
 
-   Curve* ref_edge_ptr;
-   EDGE* EDGE_ptr;
-   outcome result;
+      Curve* ref_edge_ptr;
+      EDGE* EDGE_ptr;
+      outcome result;
 
-   // If there's just one curve, and it's linear, all we can do is copy it and move it.
-   // SRS Note (1-12-01) - this code should be moved up into GeometryTool...but, we
-   // would need to be able to move a curve.  When that capability exists move the
-   // code.
+      // If there's just one curve, and it's linear, all we can do is copy it and move it.
+      // SRS Note (1-12-01) - this code should be moved up into GeometryTool...but, we
+      // would need to be able to move a curve.  When that capability exists move the
+      // code.
 
-   //CubitBoolean move_curve = CUBIT_FALSE;
+      //CubitBoolean move_curve = CUBIT_FALSE;
 
-   if( ref_edge_list.size() == 1 && (offset_direction.x() || offset_direction.y() ||
-      offset_direction.z()) )
-   {
-      ref_edge_ptr = ref_edge_list.get();
-      if( AcisQueryEngine::instance()->is_curve_app_straight( ref_edge_ptr ) == CUBIT_TRUE )
-      {
+      if( ref_edge_list.size() == 1 && (offset_direction.x() || offset_direction.y() ||
+					offset_direction.z()) )
+	{
+	  ref_edge_ptr = ref_edge_list.get();
+	  if( AcisQueryEngine::instance()->is_curve_app_straight( ref_edge_ptr ) == CUBIT_TRUE )
+	    {
 
-         EDGE_ptr = AcisQueryEngine::get_EDGE(ref_edge_ptr);
+	      EDGE_ptr = AcisQueryEngine::get_EDGE(ref_edge_ptr);
 
-         if( EDGE_ptr == NULL )
-            return CUBIT_FAILURE;
+	      if( EDGE_ptr == NULL )
+		return CUBIT_FAILURE;
 
-         // Copy and move the EDGE
-         EDGE* new_EDGE_ptr2 = copy_and_move_EDGE( EDGE_ptr, offset_direction,
-                                                   offset_distance );
+	      // Copy and move the EDGE
+	      EDGE* new_EDGE_ptr2 = copy_and_move_EDGE( EDGE_ptr, offset_direction,
+							offset_distance );
 
-         Curve *curve_ptr = AcisQueryEngine::instance()->populate_topology_bridges( new_EDGE_ptr2 );
-         new_curves.append(curve_ptr);
-         return CUBIT_SUCCESS;
-      }
-      else
-      {
-         PRINT_WARNING( "Direction qualifier ignored - only valid for one straight curve\n" );
-      }
-   }
-   else if( offset_direction.x() || offset_direction.y() || offset_direction.z() )
-   {
-      PRINT_WARNING( "Direction qualifier ignored - only valid for one straight curve\n" );
-   }
+	      Curve *curve_ptr = AcisQueryEngine::instance()->populate_topology_bridges( new_EDGE_ptr2 );
+	      new_curves.append(curve_ptr);
+	      return CUBIT_SUCCESS;
+	    }
+	  else
+	    {
+	      PRINT_WARNING( "Direction qualifier ignored - only valid for one straight curve\n" );
+	    }
+	}
+      else if( offset_direction.x() || offset_direction.y() || offset_direction.z() )
+	{
+	  PRINT_WARNING( "Direction qualifier ignored - only valid for one straight curve\n" );
+	}
 
-   // Create a wire from the given EDGEs
+      // Create a wire from the given EDGEs
 
-   // Offset the RefEdges
-   DLIList<EDGE*> old_EDGE_list;
-   if( AcisQueryEngine::instance()->get_EDGEs_of_Curves( ref_edge_list, old_EDGE_list )
-       == CUBIT_FAILURE )
-      return CUBIT_FAILURE;
+      // Offset the RefEdges
+      DLIList<EDGE*> old_EDGE_list;
+      if( AcisQueryEngine::instance()->get_EDGEs_of_Curves( ref_edge_list, old_EDGE_list )
+	  == CUBIT_FAILURE )
+	return CUBIT_FAILURE;
 
-   DLIList<EDGE*> new_EDGE_list;
-   if( offset_EDGES( old_EDGE_list, offset_distance, gap_type, new_EDGE_list ) == CUBIT_FAILURE )
-   {
-      PRINT_ERROR( "Unable to offset the curves\n" );
-      return CUBIT_FAILURE;
-   }
+      DLIList<EDGE*> new_EDGE_list;
+      if( offset_EDGES( old_EDGE_list, offset_distance, gap_type, new_EDGE_list ) == CUBIT_FAILURE )
+	{
+	  PRINT_ERROR( "Unable to offset the curves\n" );
+	  return CUBIT_FAILURE;
+	}
 
-   // Make free curves from the offset EDGEs
-   new_EDGE_list.reset();
-   for( i=0; i<new_EDGE_list.size(); i++ )
-   {
-      EDGE_ptr = new_EDGE_list.get_and_step();
+      // Make free curves from the offset EDGEs
+      new_EDGE_list.reset();
+      for( i=0; i<new_EDGE_list.size(); i++ )
+	{
+	  EDGE_ptr = new_EDGE_list.get_and_step();
 
-      Curve *curve_ptr = AcisQueryEngine::instance()->populate_topology_bridges( EDGE_ptr );
-      new_curves.append(curve_ptr);
-   }
+	  Curve *curve_ptr = AcisQueryEngine::instance()->populate_topology_bridges( EDGE_ptr );
+	  new_curves.append(curve_ptr);
+	}
 
-  return CUBIT_SUCCESS;
-}
+      return CUBIT_SUCCESS;
+    }
 
-Curve*
-AcisModifyEngine::trim_curve( Curve* trim_curve,
-                              const CubitVector& trim_vector,
-                              const CubitVector& keep_vector,
-                              bool keep_old )
-{
-  //api_trim_curve(entity_with_ray &eray1, SPAposition* trim_pt, entity_with_ray *peray2);
-   //The curve is trimmed to either a SPAposition or at its intersection with another curve. To trim
-   //to a SPAposition, specify a SPAposition in trim_pt and NULL for eray2. The curve is trimmed to
-   //the normal projection of the SPAposition onto the curve. To trim to the intersection with
-   //another curve, specify NULL for trim_pt and an entity_with_ray for eray2. The curve
-   //is trimmed to the intersection with the curve given in eray2 that is closest to the ray given
-   //in eray2.
+  Curve*
+    AcisModifyEngine::trim_curve( Curve* trim_curve,
+				  const CubitVector& trim_vector,
+				  const CubitVector& keep_vector,
+				  bool keep_old )
+    {
+      //api_trim_curve(entity_with_ray &eray1, SPAposition* trim_pt, entity_with_ray *peray2);
+      //The curve is trimmed to either a SPAposition or at its intersection with another curve. To trim
+      //to a SPAposition, specify a SPAposition in trim_pt and NULL for eray2. The curve is trimmed to
+      //the normal projection of the SPAposition onto the curve. To trim to the intersection with
+      //another curve, specify NULL for trim_pt and an entity_with_ray for eray2. The curve
+      //is trimmed to the intersection with the curve given in eray2 that is closest to the ray given
+      //in eray2.
 
 
-   EDGE* EDGE_ptr = AcisQueryEngine::get_EDGE( trim_curve );
-   if( EDGE_ptr == NULL )
-      return 0;
+      EDGE* EDGE_ptr = AcisQueryEngine::get_EDGE( trim_curve );
+      if( EDGE_ptr == NULL )
+	return 0;
 
-   ENTITY_LIST edge_VERTS;
-   api_get_vertices( EDGE_ptr, edge_VERTS );
-   VERTEX *start_vertex = static_cast<VERTEX*>(edge_VERTS[0]);
-   VERTEX *end_vertex = static_cast<VERTEX*>(edge_VERTS[1]);
-   SPAposition s_vec = start_vertex->geometry()->coords();
-   SPAposition e_vec = end_vertex->geometry()->coords();
-   CubitVector s_vector( s_vec.x(), s_vec.y(), s_vec.z() );
-   CubitVector e_vector( e_vec.x(), e_vec.y(), e_vec.z() );
+      ENTITY_LIST edge_VERTS;
+      api_get_vertices( EDGE_ptr, edge_VERTS );
+      VERTEX *start_vertex = static_cast<VERTEX*>(edge_VERTS[0]);
+      VERTEX *end_vertex = static_cast<VERTEX*>(edge_VERTS[1]);
+      SPAposition s_vec = start_vertex->geometry()->coords();
+      SPAposition e_vec = end_vertex->geometry()->coords();
+      CubitVector s_vector( s_vec.x(), s_vec.y(), s_vec.z() );
+      CubitVector e_vector( e_vec.x(), e_vec.y(), e_vec.z() );
 
-   int start = 0, end = 0;
-   if( keep_vector.distance_between( s_vector ) < 0.001 )
-     start = 1;
-   else if( keep_vector.distance_between( e_vector ) < 0.001 )
-     end = 1;
+      int start = 0, end = 0;
+      if( keep_vector.distance_between( s_vector ) < 0.001 )
+	start = 1;
+      else if( keep_vector.distance_between( e_vector ) < 0.001 )
+	end = 1;
 
-   if( start || end )
-   {
-     double trim_param = trim_curve->u_from_position( trim_vector );
-     double start_param = trim_curve->start_param();
-     double end_param = trim_curve->end_param();
+      if( start || end )
+	{
+	  double trim_param = trim_curve->u_from_position( trim_vector );
+	  double start_param = trim_curve->start_param();
+	  double end_param = trim_curve->end_param();
 
-     //if trim_param is not within start and end params, we are extending
-     //and we don't need keep_vector
-     bool within_u_param_range = true;
-     if( start_param < end_param )
-     {
-       if( trim_param > end_param || trim_param < start_param )
-         within_u_param_range = false;
-     }
-     else
-     {
-       if( trim_param > start_param || trim_param < end_param )
-         within_u_param_range = false;
-     }
+	  //if trim_param is not within start and end params, we are extending
+	  //and we don't need keep_vector
+	  bool within_u_param_range = true;
+	  if( start_param < end_param )
+	    {
+	      if( trim_param > end_param || trim_param < start_param )
+		within_u_param_range = false;
+	    }
+	  else
+	    {
+	      if( trim_param > start_param || trim_param < end_param )
+		within_u_param_range = false;
+	    }
 
-     if( within_u_param_range )
-     {
-       double keep_param;
-       if( start )
-         keep_param = start_param + .95*(trim_param-start_param);
-       else
-         keep_param = trim_param + .05*(end_param-trim_param);
+	  if( within_u_param_range )
+	    {
+	      double keep_param;
+	      if( start )
+		keep_param = start_param + .95*(trim_param-start_param);
+	      else
+		keep_param = trim_param + .05*(end_param-trim_param);
 
-       CubitVector tmp_keep_vec = keep_vector;
-       trim_curve->position_from_u( keep_param, tmp_keep_vec );
-     }
-   }
+	      CubitVector tmp_keep_vec = keep_vector;
+	      trim_curve->position_from_u( keep_param, tmp_keep_vec );
+	    }
+	}
 
-   // Copy the edge to trim first
-   EDGE* copied_EDGE_ptr;
-   outcome result = api_edge( EDGE_ptr, copied_EDGE_ptr );
+      // Copy the edge to trim first
+      EDGE* copied_EDGE_ptr;
+      outcome result = api_edge( EDGE_ptr, copied_EDGE_ptr );
 
-   SPAposition trim_pos( trim_vector.x(),trim_vector.y(),trim_vector.z() );
-   SPAposition* ptrim_pos = &trim_pos;
-   entity_with_ray *peray2 = NULL;
+      SPAposition trim_pos( trim_vector.x(),trim_vector.y(),trim_vector.z() );
+      SPAposition* ptrim_pos = &trim_pos;
+      entity_with_ray *peray2 = NULL;
 
-   SPAposition keep_pos( keep_vector.x(),keep_vector.y(),keep_vector.z() );
-   SPAunit_vector keep_vec( 0.0, 0.0, 0.0 );
-   entity_with_ray eray1( copied_EDGE_ptr, keep_pos, keep_vec );
+      SPAposition keep_pos( keep_vector.x(),keep_vector.y(),keep_vector.z() );
+      SPAunit_vector keep_vec( 0.0, 0.0, 0.0 );
+      entity_with_ray eray1( copied_EDGE_ptr, keep_pos, keep_vec );
 
-   // Finally, do the real work
-   result = api_trim_curve(eray1, ptrim_pos, peray2);
+      // Finally, do the real work
+      result = api_trim_curve(eray1, ptrim_pos, peray2);
 
-   if( !result.ok() )
-   {
-     AcisQueryEngine::instance()->ACIS_API_error (result);
-     PRINT_ERROR( "Unable to trim curve\n" );
-     api_delent( copied_EDGE_ptr );
-     return 0;
-   }
+      if( !result.ok() )
+	{
+	  AcisQueryEngine::instance()->ACIS_API_error (result);
+	  PRINT_ERROR( "Unable to trim curve\n" );
+	  api_delent( copied_EDGE_ptr );
+	  return 0;
+	}
 
-   // Make a free curve from the trimmed EDGE
-   Curve *curve_ptr = AcisQueryEngine::instance()->populate_topology_bridges( copied_EDGE_ptr );
-   if (keep_old)
-     return curve_ptr;
+      // Make a free curve from the trimmed EDGE
+      Curve *curve_ptr = AcisQueryEngine::instance()->populate_topology_bridges( copied_EDGE_ptr );
+      if (keep_old)
+	return curve_ptr;
 
-   // Delete the old curve (trim_curve), if it is a free curve
-   DLIList<Surface*> surfaces;
-   trim_curve->surfaces( surfaces );
-   if ( surfaces.size() == 0 )
-   {
-     CubitStatus status =
-      AcisQueryEngine::instance()->delete_solid_model_entities(trim_curve);
+      // Delete the old curve (trim_curve), if it is a free curve
+      DLIList<Surface*> surfaces;
+      trim_curve->surfaces( surfaces );
+      if ( surfaces.size() == 0 )
+	{
+	  CubitStatus status =
+	    AcisQueryEngine::instance()->delete_solid_model_entities(trim_curve);
 
-       if (status == CUBIT_FAILURE)
-       {
-         PRINT_ERROR("In AcisModifyEngine::trim_curve\n"
-           "       Could not delete Curve.\n"
-           " The Model database is likely corrupted "
-           "due to\nthis unsuccessful deletion.\n"  );
-       }
-   }
+	  if (status == CUBIT_FAILURE)
+	    {
+	      PRINT_ERROR("In AcisModifyEngine::trim_curve\n"
+			  "       Could not delete Curve.\n"
+			  " The Model database is likely corrupted "
+			  "due to\nthis unsuccessful deletion.\n"  );
+	    }
+	}
 
-   return curve_ptr;
-}
+      return curve_ptr;
+    }
 
 
-Curve*
-AcisModifyEngine::create_arc_three( Point* vertex1, Point* vertex2,
-                                      Point *vertex3, bool full )
-{
-  CubitVector vec1 = vertex1->coordinates();
-  CubitVector vec2 = vertex2->coordinates();
-  CubitVector vec3 = vertex3->coordinates();
+  Curve*
+    AcisModifyEngine::create_arc_three( Point* vertex1, Point* vertex2,
+					Point *vertex3, bool full )
+    {
+      CubitVector vec1 = vertex1->coordinates();
+      CubitVector vec2 = vertex2->coordinates();
+      CubitVector vec3 = vertex3->coordinates();
 
-  SPAposition pos1( vec1.x(), vec1.y(), vec1.z() );
-  SPAposition pos2( vec2.x(), vec2.y(), vec2.z() );
-  SPAposition pos3( vec3.x(), vec3.y(), vec3.z() );
+      SPAposition pos1( vec1.x(), vec1.y(), vec1.z() );
+      SPAposition pos2( vec2.x(), vec2.y(), vec2.z() );
+      SPAposition pos3( vec3.x(), vec3.y(), vec3.z() );
 
-  EDGE *EDGE_ptr;
+      EDGE *EDGE_ptr;
 
-  outcome result = api_curve_arc_3pt( pos1, pos2, pos3, full, EDGE_ptr );
-  if( !result.ok() )
-  {
-    AcisQueryEngine::instance()->ACIS_API_error(result);
-    PRINT_ERROR( "Unable to create arc from given vertices\n" );
-    return NULL;
-  }
+      outcome result = api_curve_arc_3pt( pos1, pos2, pos3, full, EDGE_ptr );
+      if( !result.ok() )
+	{
+	  AcisQueryEngine::instance()->ACIS_API_error(result);
+	  PRINT_ERROR( "Unable to create arc from given vertices\n" );
+	  return NULL;
+	}
  
-  //reuse vertices
-  if( full )
-  {
-    PointACIS *acis_point1 = CAST_TO( vertex1, PointACIS );
-    EDGE_ptr->set_start(acis_point1->get_VERTEX_ptr() );
-    EDGE_ptr->set_end(acis_point1->get_VERTEX_ptr() );
-    acis_point1->get_VERTEX_ptr()->add_edge(EDGE_ptr);
-  }
-  else
-  {
+      //reuse vertices
+      if( full )
+	{
+	  PointACIS *acis_point1 = CAST_TO( vertex1, PointACIS );
+	  EDGE_ptr->set_start(acis_point1->get_VERTEX_ptr() );
+	  EDGE_ptr->set_end(acis_point1->get_VERTEX_ptr() );
+	  acis_point1->get_VERTEX_ptr()->add_edge(EDGE_ptr);
+	}
+      else
+	{
 
-    PointACIS *acis_point1 = CAST_TO( vertex1, PointACIS );
-    PointACIS *acis_point3 = CAST_TO( vertex3, PointACIS );
+	  PointACIS *acis_point1 = CAST_TO( vertex1, PointACIS );
+	  PointACIS *acis_point3 = CAST_TO( vertex3, PointACIS );
 
-    EDGE_ptr->set_start(acis_point1->get_VERTEX_ptr() );
-    acis_point1->get_VERTEX_ptr()->add_edge(EDGE_ptr);
+	  EDGE_ptr->set_start(acis_point1->get_VERTEX_ptr() );
+	  acis_point1->get_VERTEX_ptr()->add_edge(EDGE_ptr);
 
-    EDGE_ptr->set_end(acis_point3->get_VERTEX_ptr() );
-    acis_point3->get_VERTEX_ptr()->add_edge(EDGE_ptr);
-  }
+	  EDGE_ptr->set_end(acis_point3->get_VERTEX_ptr() );
+	  acis_point3->get_VERTEX_ptr()->add_edge(EDGE_ptr);
+	}
 
-  return AcisQueryEngine::instance()->populate_topology_bridges(EDGE_ptr);
-}
+      return AcisQueryEngine::instance()->populate_topology_bridges(EDGE_ptr);
+    }
 
-Curve*
-AcisModifyEngine::create_arc_three( Curve* ref_edge1, Curve* ref_edge2,
-                                      Curve *ref_edge3, bool full )
-{
-  EDGE* EDGE_ptr1 = AcisQueryEngine::get_EDGE( ref_edge1 );
-  EDGE* EDGE_ptr2 = AcisQueryEngine::get_EDGE( ref_edge2 );
-  EDGE* EDGE_ptr3 = AcisQueryEngine::get_EDGE( ref_edge3 );
-  if( !EDGE_ptr1 || !EDGE_ptr2 || !EDGE_ptr3)
-    return NULL;
+  Curve*
+    AcisModifyEngine::create_arc_three( Curve* ref_edge1, Curve* ref_edge2,
+					Curve *ref_edge3, bool full )
+    {
+      EDGE* EDGE_ptr1 = AcisQueryEngine::get_EDGE( ref_edge1 );
+      EDGE* EDGE_ptr2 = AcisQueryEngine::get_EDGE( ref_edge2 );
+      EDGE* EDGE_ptr3 = AcisQueryEngine::get_EDGE( ref_edge3 );
+      if( !EDGE_ptr1 || !EDGE_ptr2 || !EDGE_ptr3)
+	return NULL;
 
-  SPAposition tang_pos( 0.0, 0.0, 0.0 );
-  SPAunit_vector tang_vec( 0.0, 0.0, 0.0 );
-  entity_with_ray eray1( EDGE_ptr1, tang_pos, tang_vec );
-  entity_with_ray eray2( EDGE_ptr2, tang_pos, tang_vec );
-  entity_with_ray eray3( EDGE_ptr3, tang_pos, tang_vec );
+      SPAposition tang_pos( 0.0, 0.0, 0.0 );
+      SPAunit_vector tang_vec( 0.0, 0.0, 0.0 );
+      entity_with_ray eray1( EDGE_ptr1, tang_pos, tang_vec );
+      entity_with_ray eray2( EDGE_ptr2, tang_pos, tang_vec );
+      entity_with_ray eray3( EDGE_ptr3, tang_pos, tang_vec );
 
-  EDGE *EDGE_ptr;
+      EDGE *EDGE_ptr;
 
-  outcome result = api_curve_arc_3curve( eray1, eray2, eray3, full, EDGE_ptr );
-  if( !result.ok() )
-  {
-    AcisQueryEngine::instance()->ACIS_API_error(result);
-    PRINT_ERROR( "Unable to create arc from given curves\n" );
-    return NULL;
-  }
+      outcome result = api_curve_arc_3curve( eray1, eray2, eray3, full, EDGE_ptr );
+      if( !result.ok() )
+	{
+	  AcisQueryEngine::instance()->ACIS_API_error(result);
+	  PRINT_ERROR( "Unable to create arc from given curves\n" );
+	  return NULL;
+	}
 
-  return AcisQueryEngine::instance()->populate_topology_bridges(EDGE_ptr);
-}
+      return AcisQueryEngine::instance()->populate_topology_bridges(EDGE_ptr);
+    }
 
-Curve*
-AcisModifyEngine::create_arc_center_edge( Point* vertex1, Point* vertex2,
-                                          Point *vertex3, const CubitVector &normal,
-                                          double radius, bool full )
-{
-  CubitVector vec1 = vertex1->coordinates(); // Center of arc
-  CubitVector vec2 = vertex2->coordinates(); // Position on arc
-  CubitVector vec3 = vertex3->coordinates(); // Position on arc
+  Curve*
+    AcisModifyEngine::create_arc_center_edge( Point* vertex1, Point* vertex2,
+					      Point *vertex3, const CubitVector &normal,
+					      double radius, bool full )
+    {
+      CubitVector vec1 = vertex1->coordinates(); // Center of arc
+      CubitVector vec2 = vertex2->coordinates(); // Position on arc
+      CubitVector vec3 = vertex3->coordinates(); // Position on arc
 
-  // Re-adjust vec2 if radius was given
-  if( radius != CUBIT_DBL_MAX )
-  {
-    CubitVector dir1( vec1, vec2 );
-    vec1.next_point( dir1, radius, vec2 );
-  }
+      // Re-adjust vec2 if radius was given
+      if( radius != CUBIT_DBL_MAX )
+	{
+	  CubitVector dir1( vec1, vec2 );
+	  vec1.next_point( dir1, radius, vec2 );
+	}
 
-  SPAposition pos1( vec1.x(), vec1.y(), vec1.z() );
-  SPAposition pos2( vec2.x(), vec2.y(), vec2.z() );
-  SPAposition pos3( vec3.x(), vec3.y(), vec3.z() );
+      SPAposition pos1( vec1.x(), vec1.y(), vec1.z() );
+      SPAposition pos2( vec2.x(), vec2.y(), vec2.z() );
+      SPAposition pos3( vec3.x(), vec3.y(), vec3.z() );
 
-  EDGE *EDGE_ptr;
-  SPAunit_vector arc_normal;
-  if( normal.length() != 0 )
-  {
-    arc_normal.set_x( normal.x() );
-    arc_normal.set_y( normal.y() );
-    arc_normal.set_z( normal.z() );
-  }
+      EDGE *EDGE_ptr;
+      SPAunit_vector arc_normal;
+      if( normal.length() != 0 )
+	{
+	  arc_normal.set_x( normal.x() );
+	  arc_normal.set_y( normal.y() );
+	  arc_normal.set_z( normal.z() );
+	}
 
-  outcome result;
-  if( full == CUBIT_FALSE )
-  {
-    if( normal.length() != 0.0 )
-      result = api_curve_arc_center_edge( pos1, pos2, pos3, &arc_normal, EDGE_ptr );
-    else
-      result = api_curve_arc_center_edge( pos1, pos2, pos3, NULL, EDGE_ptr );
-  }
-  else
-  {
-    if( normal.length() == 0.0 )
-    {
-      CubitVector dir1( vec1, vec2 );
-      CubitVector dir2( vec1, vec3 );
-      CubitVector tmp_normal = dir1 * dir2; // Cross-product
-      tmp_normal.normalize();
-      arc_normal.set_x( tmp_normal.x() );
-      arc_normal.set_y( tmp_normal.y() );
-      arc_normal.set_z( tmp_normal.z() );
-    }
-    result = api_curve_arc_center_edge( pos1, pos2, pos2, &arc_normal, EDGE_ptr );
-  }
+      outcome result;
+      if( full == CUBIT_FALSE )
+	{
+	  if( normal.length() != 0.0 )
+	    result = api_curve_arc_center_edge( pos1, pos2, pos3, &arc_normal, EDGE_ptr );
+	  else
+	    result = api_curve_arc_center_edge( pos1, pos2, pos3, NULL, EDGE_ptr );
+	}
+      else
+	{
+	  if( normal.length() == 0.0 )
+	    {
+	      CubitVector dir1( vec1, vec2 );
+	      CubitVector dir2( vec1, vec3 );
+	      CubitVector tmp_normal = dir1 * dir2; // Cross-product
+	      tmp_normal.normalize();
+	      arc_normal.set_x( tmp_normal.x() );
+	      arc_normal.set_y( tmp_normal.y() );
+	      arc_normal.set_z( tmp_normal.z() );
+	    }
+	  result = api_curve_arc_center_edge( pos1, pos2, pos2, &arc_normal, EDGE_ptr );
+	}
 
-  if( !result.ok() )
-  {
-    AcisQueryEngine::instance()->ACIS_API_error(result);
-    PRINT_ERROR( "Unable to create arc from given vertices\n" );
-    return NULL;
-  }
+      if( !result.ok() )
+	{
+	  AcisQueryEngine::instance()->ACIS_API_error(result);
+	  PRINT_ERROR( "Unable to create arc from given vertices\n" );
+	  return NULL;
+	}
 
-  //reuse vertices...if possible
-  if( full )
-  {
-    PointACIS *acis_point2 = CAST_TO( vertex2, PointACIS );
-    EDGE_ptr->set_start(acis_point2->get_VERTEX_ptr() );
-    EDGE_ptr->set_end(acis_point2->get_VERTEX_ptr() );
-    acis_point2->get_VERTEX_ptr()->add_edge(EDGE_ptr);
-  }
-  else
-  {
-    //reuse vertices only if it is coincident with 
-    //new vertex on new curve
+      //reuse vertices...if possible
+      if( full )
+	{
+	  PointACIS *acis_point2 = CAST_TO( vertex2, PointACIS );
+	  EDGE_ptr->set_start(acis_point2->get_VERTEX_ptr() );
+	  EDGE_ptr->set_end(acis_point2->get_VERTEX_ptr() );
+	  acis_point2->get_VERTEX_ptr()->add_edge(EDGE_ptr);
+	}
+      else
+	{
+	  //reuse vertices only if it is coincident with 
+	  //new vertex on new curve
 
-    //compare original start vs. new start vertex on EDGE 
-    VERTEX *start_vert = EDGE_ptr->start();
-    SPAposition temp_pos = start_vert->geometry()->coords();
-    CubitVector tmp_pos1( temp_pos.x(), temp_pos.y(), temp_pos.z() ); 
-    vec2 = vertex2->coordinates(); 
+	  //compare original start vs. new start vertex on EDGE 
+	  VERTEX *start_vert = EDGE_ptr->start();
+	  SPAposition temp_pos = start_vert->geometry()->coords();
+	  CubitVector tmp_pos1( temp_pos.x(), temp_pos.y(), temp_pos.z() ); 
+	  vec2 = vertex2->coordinates(); 
  
-    if(tmp_pos1.distance_between( vec2 ) < GEOMETRY_RESABS )
-    {
-      PointACIS *acis_point2 = CAST_TO( vertex2, PointACIS );
-      EDGE_ptr->set_start(acis_point2->get_VERTEX_ptr() );
-      acis_point2->get_VERTEX_ptr()->add_edge(EDGE_ptr);
-    }
+	  if(tmp_pos1.distance_between( vec2 ) < GEOMETRY_RESABS )
+	    {
+	      PointACIS *acis_point2 = CAST_TO( vertex2, PointACIS );
+	      EDGE_ptr->set_start(acis_point2->get_VERTEX_ptr() );
+	      acis_point2->get_VERTEX_ptr()->add_edge(EDGE_ptr);
+	    }
 
-    //compare original end vs. new end vertex on EDGE 
-    VERTEX *end_vert = EDGE_ptr->end();
-    temp_pos = end_vert->geometry()->coords();
-    tmp_pos1.set( temp_pos.x(), temp_pos.y(), temp_pos.z() ); 
-    vec3 = vertex3->coordinates(); 
+	  //compare original end vs. new end vertex on EDGE 
+	  VERTEX *end_vert = EDGE_ptr->end();
+	  temp_pos = end_vert->geometry()->coords();
+	  tmp_pos1.set( temp_pos.x(), temp_pos.y(), temp_pos.z() ); 
+	  vec3 = vertex3->coordinates(); 
 
-    if(tmp_pos1.distance_between( vec3 ) < GEOMETRY_RESABS )
-    {
-      PointACIS *acis_point3 = CAST_TO( vertex3, PointACIS );
-      EDGE_ptr->set_end(acis_point3->get_VERTEX_ptr() );
-      acis_point3->get_VERTEX_ptr()->add_edge(EDGE_ptr);
+	  if(tmp_pos1.distance_between( vec3 ) < GEOMETRY_RESABS )
+	    {
+	      PointACIS *acis_point3 = CAST_TO( vertex3, PointACIS );
+	      EDGE_ptr->set_end(acis_point3->get_VERTEX_ptr() );
+	      acis_point3->get_VERTEX_ptr()->add_edge(EDGE_ptr);
+	    }
+	  else
+	    {
+	      //make sure this point isn't a free vertex
+	      if( !vertex3->topology_entity() )
+		AcisQueryEngine::instance()->delete_solid_model_entities( vertex3 );
+	    }
+	}
+
+
+      return AcisQueryEngine::instance()->populate_topology_bridges(EDGE_ptr);
     }
-    else
+
+  CubitStatus
+    AcisModifyEngine::create_curve_combine( DLIList<Curve*>& curve_list,
+					    Curve *&new_curve_ptr )
     {
-      //make sure this point isn't a free vertex
-      if( !vertex3->topology_entity() )
-        AcisQueryEngine::instance()->delete_solid_model_entities( vertex3 );
-    }
-  }
+      CubitStatus result;
 
+      result = AcisEdgeTool::instance()->create_curve_combine(curve_list,
+							      new_curve_ptr);
 
-  return AcisQueryEngine::instance()->populate_topology_bridges(EDGE_ptr);
-}
+      if (result)
+	{
+	  RefEdge* new_ref_edge_ptr = GeometryQueryTool::instance()->make_free_RefEdge( new_curve_ptr );
 
-CubitStatus
-AcisModifyEngine::create_curve_combine( DLIList<Curve*>& curve_list,
-                                    Curve *&new_curve_ptr )
-{
-  CubitStatus result;
+	  if (new_ref_edge_ptr)
+	    PRINT_INFO( "Created new \"combined\" curve %d\n", new_ref_edge_ptr->id() );
+	  else
+	    result = CUBIT_FAILURE;
+	}
 
-  result = AcisEdgeTool::instance()->create_curve_combine(curve_list,
-                                                          new_curve_ptr);
+      return result;
 
-  if (result)
-  {
-    RefEdge* new_ref_edge_ptr = GeometryQueryTool::instance()->make_free_RefEdge( new_curve_ptr );
+    }
 
-    if (new_ref_edge_ptr)
-      PRINT_INFO( "Created new \"combined\" curve %d\n", new_ref_edge_ptr->id() );
-    else
-      result = CUBIT_FAILURE;
-  }
+  CubitStatus
+    AcisModifyEngine::get_copied_FACES_of_body( DLIList<SurfaceACIS*>& ref_face_list,
+						DLIList<FACE*>& FACE_list,
+						DLIList<SurfaceACIS*>& removed_ref_faces,
+						BODY*& copied_BODY_ptr ) const
+    {
+      int i, num_faces;
 
-  return result;
+      // Note: we will be pulling surfaces out of incoming ref_face_list.
+      SurfaceACIS* ref_face_ptr;
+      BodySM *body_ptr;
 
-}
+      BODY *BODY_ptr;
+      BODY *BODY_ptr2;
 
-CubitStatus
-AcisModifyEngine::get_copied_FACES_of_body( DLIList<SurfaceACIS*>& ref_face_list,
-                                            DLIList<FACE*>& FACE_list,
-                                            DLIList<SurfaceACIS*>& removed_ref_faces,
-                                            BODY*& copied_BODY_ptr ) const
-{
-  int i, num_faces;
+      FACE *FACE_ptr;
 
-  // Note: we will be pulling surfaces out of incoming ref_face_list.
-  SurfaceACIS* ref_face_ptr;
-  BodySM *body_ptr;
+      copied_BODY_ptr = NULL;
 
-  BODY *BODY_ptr;
-  BODY *BODY_ptr2;
+      outcome result;
 
-  FACE *FACE_ptr;
+      DLIList<SurfaceACIS*> body_face_list;
 
-  copied_BODY_ptr = NULL;
+      ref_face_list.reset();
+      ref_face_ptr = ref_face_list.remove();
+      removed_ref_faces.append( ref_face_ptr );
 
-  outcome result;
+      FACE_ptr = ref_face_ptr->get_FACE_ptr();
+      if (!FACE_ptr)
+	{
+	  PRINT_ERROR( "Unable to get Acis FACE from Surface\n"  );
+	  return CUBIT_FAILURE;
+	}
 
-  DLIList<SurfaceACIS*> body_face_list;
+      body_face_list.append_unique( ref_face_ptr );
 
-  ref_face_list.reset();
-  ref_face_ptr = ref_face_list.remove();
-  removed_ref_faces.append( ref_face_ptr );
+      body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY( FACE_ptr );
+      if( body_ptr == NULL )
+	{
+	  PRINT_ERROR( "Unable to get volume from FACE\n"  );
+	  return CUBIT_FAILURE;
+	}
 
-  FACE_ptr = ref_face_ptr->get_FACE_ptr();
-  if (!FACE_ptr)
-  {
-    PRINT_ERROR( "Unable to get Acis FACE from Surface\n"  );
-     return CUBIT_FAILURE;
-  }
+      BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACE_ptr );
+      if( BODY_ptr == NULL )
+	{
+	  PRINT_ERROR( "Unable to get volume from FACE\n" );
+	  return CUBIT_FAILURE;
+	}
 
-  body_face_list.append_unique( ref_face_ptr );
+      // Add all remaining faces from this same body to face list
+      num_faces = ref_face_list.size();
+      for( i=0; i<num_faces; i++ )
+	{
+	  ref_face_ptr = ref_face_list.get();
 
-  body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY( FACE_ptr );
-  if( body_ptr == NULL )
-  {
-    PRINT_ERROR( "Unable to get volume from FACE\n"  );
-    return CUBIT_FAILURE;
-  }
+	  BODY_ptr2 = AcisQueryEngine::instance()->get_BODY_of_entity( ref_face_ptr );
 
-  BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACE_ptr );
-  if( BODY_ptr == NULL )
-  {
-    PRINT_ERROR( "Unable to get volume from FACE\n" );
-    return CUBIT_FAILURE;
-  }
+	  if( BODY_ptr == BODY_ptr2 )
+	    {
+	      body_face_list.append_unique( ref_face_ptr );
+	      ref_face_list.remove();
+	      removed_ref_faces.append( ref_face_ptr );
+	    }
+	  else
+	    ref_face_list.step();
+	}
 
-  // Add all remaining faces from this same body to face list
-  num_faces = ref_face_list.size();
-  for( i=0; i<num_faces; i++ )
-  {
-    ref_face_ptr = ref_face_list.get();
+      // Now we have all the faces from this particular BODY.
 
-    BODY_ptr2 = AcisQueryEngine::instance()->get_BODY_of_entity( ref_face_ptr );
+      // Copy the body before working with it.  Here we keep the
+      // attributes on the BODY so we can get back to the TE's
+      // in CUBIT from the copy (to find which FACE's to correlate
+      // to the RefFace's).
+      copied_BODY_ptr = copy_BODY(BODY_ptr, CUBIT_FALSE);
 
-    if( BODY_ptr == BODY_ptr2 )
-    {
-      body_face_list.append_unique( ref_face_ptr );
-      ref_face_list.remove();
-      removed_ref_faces.append( ref_face_ptr );
-    }
-    else
-      ref_face_list.step();
-  }
+      // Loop through the copied BODY's FACES to find which one's
+      // match to the original BODY's RefFaces.
+      ENTITY_LIST ENTITIES;
+      result = api_get_faces( copied_BODY_ptr, ENTITIES );
+      if( !result.ok() )
+	{
+	  PRINT_ERROR( "Unable to get ACIS FACES from volume\n" );
+	  api_delent( copied_BODY_ptr );
+	  copied_BODY_ptr = NULL;
+	  return CUBIT_FAILURE;
+	}
 
-  // Now we have all the faces from this particular BODY.
+      ENTITIES.init();
+      ENTITY* ENTITY_ptr;
+      int index = -1;
+      DLIList<int> index_list;
+      DLIList<FACE*> temp_FACE_list;
+      while( (ENTITY_ptr = ENTITIES.next() ) != NULL )
+	{
+	  AcisBridge* ab_ptr = ATTRIB_CUBIT_OWNER::cubit_owner(ENTITY_ptr);
+	  ref_face_ptr = CAST_TO( ab_ptr, SurfaceACIS );
+	  if( ref_face_ptr == NULL )
+	    {
+	      PRINT_ERROR( "Unable to find RefFace from ACIS FACE!\n" );
+	      api_delent( copied_BODY_ptr );
+	      copied_BODY_ptr = NULL;
+	      return CUBIT_FAILURE;
+	    }
 
-  // Copy the body before working with it.  Here we keep the
-  // attributes on the BODY so we can get back to the TE's
-  // in CUBIT from the copy (to find which FACE's to correlate
-  // to the RefFace's).
-  copied_BODY_ptr = copy_BODY(BODY_ptr, CUBIT_FALSE);
+	  index = body_face_list.where_is_item( ref_face_ptr );
+	  if( index != -1 )
+	    {
+	      index_list.append( index );
+	      temp_FACE_list.append( (FACE *)ENTITY_ptr );
+	    }
+	  if( temp_FACE_list.size() == body_face_list.size() )
+	    break;
+	}
+      ENTITIES.clear();
 
-  // Loop through the copied BODY's FACES to find which one's
-  // match to the original BODY's RefFaces.
-  ENTITY_LIST ENTITIES;
-  result = api_get_faces( copied_BODY_ptr, ENTITIES );
-  if( !result.ok() )
-  {
-    PRINT_ERROR( "Unable to get ACIS FACES from volume\n" );
-    api_delent( copied_BODY_ptr );
-    copied_BODY_ptr = NULL;
-    return CUBIT_FAILURE;
-  }
+      if( temp_FACE_list.size() != body_face_list.size() )
+	{
+	  PRINT_ERROR( "Internal error correlating FACE lists\n" );
+	  api_delent( copied_BODY_ptr );
+	  copied_BODY_ptr = NULL;
+	  return CUBIT_FAILURE;
+	}
 
-  ENTITIES.init();
-  ENTITY* ENTITY_ptr;
-  int index = -1;
-  DLIList<int> index_list;
-  DLIList<FACE*> temp_FACE_list;
-  while( (ENTITY_ptr = ENTITIES.next() ) != NULL )
-  {
-    AcisBridge* ab_ptr = ATTRIB_CUBIT_OWNER::cubit_owner(ENTITY_ptr);
-    ref_face_ptr = CAST_TO( ab_ptr, SurfaceACIS );
-    if( ref_face_ptr == NULL )
-    {
-      PRINT_ERROR( "Unable to find RefFace from ACIS FACE!\n" );
-      api_delent( copied_BODY_ptr );
-      copied_BODY_ptr = NULL;
-      return CUBIT_FAILURE;
+      // Re-sort the list into the proper order
+      temp_FACE_list.reset();
+      index_list.reset();
+      for( i=0; i<index_list.size(); i++ )
+	{
+	  // Find the FACE with the corresponding index
+	  index = index_list.where_is_item( i );
+	  temp_FACE_list.reset();
+	  temp_FACE_list.step( index );
+
+	  FACE_list.append( temp_FACE_list.get() );
+	}
+
+      return CUBIT_SUCCESS;
     }
 
-    index = body_face_list.where_is_item( ref_face_ptr );
-    if( index != -1 )
+  CubitStatus
+    AcisModifyEngine::get_copied_FACES_of_body( DLIList<SurfaceACIS*>& ref_face_list,
+						DLIList<FACE*>& FACE_list,
+						BODY*& copied_BODY_ptr ) const
     {
-      index_list.append( index );
-      temp_FACE_list.append( (FACE *)ENTITY_ptr );
+      DLIList<SurfaceACIS*> removed_faces;
+
+      return get_copied_FACES_of_body( ref_face_list, FACE_list, removed_faces,
+				       copied_BODY_ptr );
     }
-    if( temp_FACE_list.size() == body_face_list.size() )
-      break;
-  }
-  ENTITIES.clear();
 
-  if( temp_FACE_list.size() != body_face_list.size() )
-  {
-    PRINT_ERROR( "Internal error correlating FACE lists\n" );
-    api_delent( copied_BODY_ptr );
-    copied_BODY_ptr = NULL;
-    return CUBIT_FAILURE;
-  }
+  CubitStatus
+    AcisModifyEngine::get_copied_EDGES_of_body( DLIList<CurveACIS*>& ref_edge_list,
+						DLIList<EDGE*>& EDGE_list,
+						DLIList<CurveACIS*>& removed_ref_edges,
+						BODY*& copied_BODY_ptr ) const
+    {
+      int i, num_edges;
 
-  // Re-sort the list into the proper order
-  temp_FACE_list.reset();
-  index_list.reset();
-  for( i=0; i<index_list.size(); i++ )
-  {
-    // Find the FACE with the corresponding index
-    index = index_list.where_is_item( i );
-    temp_FACE_list.reset();
-    temp_FACE_list.step( index );
+      // Note: we will be pulling surfaces out of incoming ref_edge_list.
+      CurveACIS* ref_edge_ptr;
+      BodySM *body_ptr;
 
-    FACE_list.append( temp_FACE_list.get() );
-  }
+      BODY *BODY_ptr;
+      BODY *BODY_ptr2;
 
-  return CUBIT_SUCCESS;
-}
+      EDGE *EDGE_ptr;
 
-CubitStatus
-AcisModifyEngine::get_copied_FACES_of_body( DLIList<SurfaceACIS*>& ref_face_list,
-                                              DLIList<FACE*>& FACE_list,
-                                              BODY*& copied_BODY_ptr ) const
-{
-  DLIList<SurfaceACIS*> removed_faces;
+      copied_BODY_ptr = NULL;
 
-  return get_copied_FACES_of_body( ref_face_list, FACE_list, removed_faces,
-                                   copied_BODY_ptr );
-}
+      outcome result;
 
-CubitStatus
-AcisModifyEngine::get_copied_EDGES_of_body( DLIList<CurveACIS*>& ref_edge_list,
-                                            DLIList<EDGE*>& EDGE_list,
-                                            DLIList<CurveACIS*>& removed_ref_edges,
-                                            BODY*& copied_BODY_ptr ) const
-{
-  int i, num_edges;
+      DLIList<CurveACIS*> body_edge_list;
 
-  // Note: we will be pulling surfaces out of incoming ref_edge_list.
-  CurveACIS* ref_edge_ptr;
-  BodySM *body_ptr;
+      ref_edge_ptr = ref_edge_list.remove();
+      removed_ref_edges.append( ref_edge_ptr );
 
-  BODY *BODY_ptr;
-  BODY *BODY_ptr2;
+      EDGE_ptr = ref_edge_ptr->get_EDGE_ptr();
 
-  EDGE *EDGE_ptr;
+      body_edge_list.append_unique( ref_edge_ptr );
 
-  copied_BODY_ptr = NULL;
+      body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY( EDGE_ptr );
+      if( body_ptr == NULL )
+	{
+	  PRINT_ERROR( "Unable to get volume from EDGE\n" );
+	  return CUBIT_FAILURE;
+	}
 
-  outcome result;
+      BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY( EDGE_ptr );
+      if( BODY_ptr == NULL )
+	{
+	  PRINT_ERROR( "Unable to get volume from EDGE\n" );
+	  return CUBIT_FAILURE;
+	}
 
-  DLIList<CurveACIS*> body_edge_list;
+      // Add all remaining edges from this same body to edge list
+      num_edges = ref_edge_list.size();
+      for( i=0; i<num_edges; i++ )
+	{
+	  ref_edge_ptr = ref_edge_list.get();
 
-  ref_edge_ptr = ref_edge_list.remove();
-  removed_ref_edges.append( ref_edge_ptr );
+	  BODY_ptr2 = AcisQueryEngine::instance()->get_BODY_of_entity( ref_edge_ptr );
 
-  EDGE_ptr = ref_edge_ptr->get_EDGE_ptr();
+	  if( BODY_ptr == BODY_ptr2 )
+	    {
+	      body_edge_list.append_unique( ref_edge_ptr );
+	      ref_edge_list.remove();
+	      removed_ref_edges.append( ref_edge_ptr );
+	    }
+	  else
+	    ref_edge_list.step();
+	}
 
-  body_edge_list.append_unique( ref_edge_ptr );
+      // Now we have all the edges from this particular BODY.
 
-  body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY( EDGE_ptr );
-  if( body_ptr == NULL )
-  {
-    PRINT_ERROR( "Unable to get volume from EDGE\n" );
-    return CUBIT_FAILURE;
-  }
+      // Copy the body before working with it.  Here we keep the
+      // attributes on the BODY so we can get back to the TE's
+      // in CUBIT from the copy (to find which EDGE's to correlate
+      // to the RefEdge's).
+      copied_BODY_ptr = copy_BODY(BODY_ptr, CUBIT_FALSE);
 
-  BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY( EDGE_ptr );
-  if( BODY_ptr == NULL )
-  {
-    PRINT_ERROR( "Unable to get volume from EDGE\n" );
-    return CUBIT_FAILURE;
-  }
+      // Loop through the copied BODY's EDGES to find which one's
+      // match to the original BODY's RefEdges.
+      ENTITY_LIST ENTITIES;
+      result = api_get_edges(copied_BODY_ptr, ENTITIES);
+      if( !result.ok() )
+	{
+	  PRINT_ERROR( "Unable to get ACIS EDGES from volume\n" );
+	  api_delent( copied_BODY_ptr );
+	  copied_BODY_ptr = NULL;
+	  return CUBIT_FAILURE;
+	}
 
-  // Add all remaining edges from this same body to edge list
-  num_edges = ref_edge_list.size();
-  for( i=0; i<num_edges; i++ )
-  {
-    ref_edge_ptr = ref_edge_list.get();
+      ENTITIES.init();
+      ENTITY* ENTITY_ptr;
+      int index = -1;
+      DLIList<int> index_list;
+      DLIList<EDGE*> temp_EDGE_list;
+      while( (ENTITY_ptr = ENTITIES.next() ) != NULL )
+	{
+	  AcisBridge* ab_ptr = ATTRIB_CUBIT_OWNER::cubit_owner(ENTITY_ptr);
+	  ref_edge_ptr = CAST_TO( ab_ptr, CurveACIS );
+	  if( ref_edge_ptr == NULL )
+	    {
+	      PRINT_ERROR( "Unable to find Cubit curve from ACIS EDGE!\n" );
+	      api_delent( copied_BODY_ptr );
+	      copied_BODY_ptr = NULL;
+	      return CUBIT_FAILURE;
+	    }
+	  index = body_edge_list.where_is_item( ref_edge_ptr );
+	  if( index != -1 )
+	    {
+	      index_list.append( index );
+	      temp_EDGE_list.append( (EDGE *)ENTITY_ptr );
+	    }
+	  if( temp_EDGE_list.size() == body_edge_list.size() )
+	    break;
+	}
+      ENTITIES.clear();
 
-    BODY_ptr2 = AcisQueryEngine::instance()->get_BODY_of_entity( ref_edge_ptr );
+      if( temp_EDGE_list.size() != body_edge_list.size() )
+	{
+	  PRINT_ERROR( "Internal error correlating EDGE lists\n" );
+	  api_delent( copied_BODY_ptr );
+	  copied_BODY_ptr = NULL;
+	  return CUBIT_FAILURE;
+	}
 
-    if( BODY_ptr == BODY_ptr2 )
-    {
-      body_edge_list.append_unique( ref_edge_ptr );
-      ref_edge_list.remove();
-      removed_ref_edges.append( ref_edge_ptr );
+      // Re-sort the list into the proper order
+      temp_EDGE_list.reset();
+      index_list.reset();
+      for( i=0; i<index_list.size(); i++ )
+	{
+	  // Find the EDGE with the corresponding index
+	  index = index_list.where_is_item( i );
+	  temp_EDGE_list.reset();
+	  temp_EDGE_list.step( index );
+
+	  EDGE_list.append( temp_EDGE_list.get() );
+	}
+
+      return CUBIT_SUCCESS;
     }
-    else
-      ref_edge_list.step();
-  }
 
-  // Now we have all the edges from this particular BODY.
+  CubitStatus
+    AcisModifyEngine::get_copied_EDGES_of_body( DLIList<CurveACIS*>& ref_edge_list,
+						DLIList<EDGE*>& EDGE_list,
+						BODY*& copied_BODY_ptr ) const
+    {
+      DLIList<CurveACIS*> removed_edges;
 
-  // Copy the body before working with it.  Here we keep the
-  // attributes on the BODY so we can get back to the TE's
-  // in CUBIT from the copy (to find which EDGE's to correlate
-  // to the RefEdge's).
-  copied_BODY_ptr = copy_BODY(BODY_ptr, CUBIT_FALSE);
+      return get_copied_EDGES_of_body( ref_edge_list, EDGE_list, removed_edges,
+				       copied_BODY_ptr );
+    }
 
-  // Loop through the copied BODY's EDGES to find which one's
-  // match to the original BODY's RefEdges.
-  ENTITY_LIST ENTITIES;
-  result = api_get_edges(copied_BODY_ptr, ENTITIES);
-  if( !result.ok() )
-  {
-    PRINT_ERROR( "Unable to get ACIS EDGES from volume\n" );
-    api_delent( copied_BODY_ptr );
-    copied_BODY_ptr = NULL;
-    return CUBIT_FAILURE;
-  }
+  //-------------------------------------------------------------------------
+  // Purpose       :  To get a pointer to a copy of the body along with a list of VERTEXs
+  //
+  // Special Notes :
+  //
+  // Creator       : Lingyun Pan (CAT)
+  //
+  // Creation Date : 07/19/01
+  //-------------------------------------------------------------------------
 
-  ENTITIES.init();
-  ENTITY* ENTITY_ptr;
-  int index = -1;
-  DLIList<int> index_list;
-  DLIList<EDGE*> temp_EDGE_list;
-  while( (ENTITY_ptr = ENTITIES.next() ) != NULL )
-  {
-    AcisBridge* ab_ptr = ATTRIB_CUBIT_OWNER::cubit_owner(ENTITY_ptr);
-    ref_edge_ptr = CAST_TO( ab_ptr, CurveACIS );
-    if( ref_edge_ptr == NULL )
+  CubitStatus
+    AcisModifyEngine::get_copied_VERTICES_of_body(
+						  DLIList<PointACIS*>& ref_vertex_list,
+						  DLIList<VERTEX*>& VERTEX_list,
+						  DLIList<PointACIS*>& removed_ref_vertices,
+						  BODY*& copied_BODY_ptr ) const
     {
-      PRINT_ERROR( "Unable to find Cubit curve from ACIS EDGE!\n" );
-      api_delent( copied_BODY_ptr );
-      copied_BODY_ptr = NULL;
-      return CUBIT_FAILURE;
-    }
-    index = body_edge_list.where_is_item( ref_edge_ptr );
-    if( index != -1 )
-    {
-      index_list.append( index );
-      temp_EDGE_list.append( (EDGE *)ENTITY_ptr );
-    }
-    if( temp_EDGE_list.size() == body_edge_list.size() )
-      break;
-  }
-  ENTITIES.clear();
+      int i, num_vertices;
 
-  if( temp_EDGE_list.size() != body_edge_list.size() )
-  {
-    PRINT_ERROR( "Internal error correlating EDGE lists\n" );
-    api_delent( copied_BODY_ptr );
-    copied_BODY_ptr = NULL;
-    return CUBIT_FAILURE;
-  }
+      // Note: we will be pulling vertices out of incoming ref_vertex_list.
+      PointACIS* ref_vertex_ptr;
+      BodySM *body_ptr;
 
-  // Re-sort the list into the proper order
-  temp_EDGE_list.reset();
-  index_list.reset();
-  for( i=0; i<index_list.size(); i++ )
-  {
-    // Find the EDGE with the corresponding index
-    index = index_list.where_is_item( i );
-    temp_EDGE_list.reset();
-    temp_EDGE_list.step( index );
+      BODY *BODY_ptr;
+      BODY *BODY_ptr2;
 
-    EDGE_list.append( temp_EDGE_list.get() );
-  }
+      VERTEX *VERTEX_ptr;
 
-  return CUBIT_SUCCESS;
-}
+      copied_BODY_ptr = NULL;
 
-CubitStatus
-AcisModifyEngine::get_copied_EDGES_of_body( DLIList<CurveACIS*>& ref_edge_list,
-                                            DLIList<EDGE*>& EDGE_list,
-                                            BODY*& copied_BODY_ptr ) const
-{
-  DLIList<CurveACIS*> removed_edges;
+      outcome result;
 
-  return get_copied_EDGES_of_body( ref_edge_list, EDGE_list, removed_edges,
-                                   copied_BODY_ptr );
-}
+      DLIList<PointACIS*> body_vertex_list;
 
-//-------------------------------------------------------------------------
-// Purpose       :  To get a pointer to a copy of the body along with a list of VERTEXs
-//
-// Special Notes :
-//
-// Creator       : Lingyun Pan (CAT)
-//
-// Creation Date : 07/19/01
-//-------------------------------------------------------------------------
+      ref_vertex_ptr =ref_vertex_list .remove();
+      removed_ref_vertices.append( ref_vertex_ptr);
 
-CubitStatus
-AcisModifyEngine::get_copied_VERTICES_of_body(
-                                     DLIList<PointACIS*>& ref_vertex_list,
-                                     DLIList<VERTEX*>& VERTEX_list,
-                                     DLIList<PointACIS*>& removed_ref_vertices,
-                                     BODY*& copied_BODY_ptr ) const
-{
-  int i, num_vertices;
+      VERTEX_ptr = ref_vertex_ptr->get_VERTEX_ptr();
 
-  // Note: we will be pulling vertices out of incoming ref_vertex_list.
-  PointACIS* ref_vertex_ptr;
-  BodySM *body_ptr;
+      body_vertex_list.append_unique( ref_vertex_ptr );
 
-  BODY *BODY_ptr;
-  BODY *BODY_ptr2;
+      body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY(VERTEX_ptr );
+      if( body_ptr == NULL )
+	{
+	  PRINT_ERROR( "Unable to get volume from VERTEX\n" );
+	  return CUBIT_FAILURE;
+	}
 
-  VERTEX *VERTEX_ptr;
+      BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY( VERTEX_ptr );
+      if( BODY_ptr == NULL )
+	{
+	  PRINT_ERROR( "Unable to get volume from VERTEX\n" );
+	  return CUBIT_FAILURE;
+	}
 
-  copied_BODY_ptr = NULL;
+      // Add all remaining vertex from this same body to vertex list
+      num_vertices = ref_vertex_list.size();
+      for( i=0; i<num_vertices; i++ )
+	{
+	  ref_vertex_ptr = ref_vertex_list.get();
 
-  outcome result;
+	  BODY_ptr2 = AcisQueryEngine::instance()->get_BODY_of_entity( ref_vertex_ptr );
 
-  DLIList<PointACIS*> body_vertex_list;
+	  if( BODY_ptr == BODY_ptr2 )
+	    {
+	      body_vertex_list.append_unique( ref_vertex_ptr );
+	      ref_vertex_list.remove();
+	      removed_ref_vertices.append( ref_vertex_ptr );
+	    }
+	  else
+	    ref_vertex_list.step();
+	}
 
-  ref_vertex_ptr =ref_vertex_list .remove();
-  removed_ref_vertices.append( ref_vertex_ptr);
+      // Now we have all the vertices from this particular BODY.
 
-  VERTEX_ptr = ref_vertex_ptr->get_VERTEX_ptr();
+      // Copy the body before working with it.  Here we keep the
+      // attributes on the BODY so we can get back to the TE's
+      // in CUBIT from the copy (to find which VERTICE's to correlate
+      // to the RefVertice's).
+      copied_BODY_ptr = copy_BODY(BODY_ptr, CUBIT_FALSE);
 
-  body_vertex_list.append_unique( ref_vertex_ptr );
+      // Loop through the copied BODY's VERTICEs to find which one's
+      // match to the original BODY's RefVertices.
+      ENTITY_LIST ENTITIES;
+      result = api_get_vertices( copied_BODY_ptr, ENTITIES);
+      if( !result.ok() )
+	{
+	  PRINT_ERROR( "Unable to get ACIS VERTICES from a volume\n" );
+	  api_delent( copied_BODY_ptr );
+	  copied_BODY_ptr = NULL;
+	  return CUBIT_FAILURE;
+	}
 
-  body_ptr = AcisQueryEngine::instance()->get_body_sm_of_ENTITY(VERTEX_ptr );
-  if( body_ptr == NULL )
-  {
-    PRINT_ERROR( "Unable to get volume from VERTEX\n" );
-    return CUBIT_FAILURE;
-  }
+      ENTITIES.init();
+      ENTITY* ENTITY_ptr;
+      int index = -1;
+      DLIList<int> index_list;
+      DLIList<VERTEX*> temp_VERTEX_list;
+      while( (ENTITY_ptr = ENTITIES.next() ) != NULL )
+	{
+	  AcisBridge* ab_ptr = ATTRIB_CUBIT_OWNER::cubit_owner(ENTITY_ptr);
+	  ref_vertex_ptr = CAST_TO(ab_ptr, PointACIS);
+	  if( ref_vertex_ptr == NULL )
+	    {
+	      PRINT_ERROR( "Unable to find RefVertex from ACIS VERTEX!\n" );
+	      VERTEX_list.clean_out();
+	      api_delent( copied_BODY_ptr );
+	      copied_BODY_ptr = NULL;
+	      VERTEX_list.clean_out();
+	      return CUBIT_FAILURE;
+	    }
 
-  BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY( VERTEX_ptr );
-  if( BODY_ptr == NULL )
-  {
-    PRINT_ERROR( "Unable to get volume from VERTEX\n" );
-    return CUBIT_FAILURE;
-  }
+	  index = body_vertex_list.where_is_item( ref_vertex_ptr );
+	  if( index != -1 )
+	    {
+	      index_list.append( index );
+	      temp_VERTEX_list.append( (VERTEX *)ENTITY_ptr );
+	    }
+	  if( temp_VERTEX_list.size() == body_vertex_list.size() )
+	    break;
+	}
+      ENTITIES.clear();
 
-  // Add all remaining vertex from this same body to vertex list
-  num_vertices = ref_vertex_list.size();
-  for( i=0; i<num_vertices; i++ )
-  {
-    ref_vertex_ptr = ref_vertex_list.get();
+      if( temp_VERTEX_list.size() != body_vertex_list.size() )
+	{
+	  PRINT_ERROR( "Internal error correlating VERTEX lists\n" );
+	  api_delent( copied_BODY_ptr );
+	  copied_BODY_ptr = NULL;
+	  return CUBIT_FAILURE;
+	}
 
-    BODY_ptr2 = AcisQueryEngine::instance()->get_BODY_of_entity( ref_vertex_ptr );
+      // Re-sort the list into the proper order
+      temp_VERTEX_list.reset();
+      index_list.reset();
+      for( i=0; i<index_list.size(); i++ )
+	{
+	  // Find the VERTEX with the corresponding index
+	  index = index_list.where_is_item( i );
+	  temp_VERTEX_list.reset();
+	  temp_VERTEX_list.step( index );
 
-    if( BODY_ptr == BODY_ptr2 )
-    {
-      body_vertex_list.append_unique( ref_vertex_ptr );
-      ref_vertex_list.remove();
-      removed_ref_vertices.append( ref_vertex_ptr );
+	  VERTEX_list.append( temp_VERTEX_list.get() );
+	}
+
+      return CUBIT_SUCCESS;
     }
-    else
-      ref_vertex_list.step();
-  }
 
-  // Now we have all the vertices from this particular BODY.
+  CubitStatus
+    AcisModifyEngine::get_copied_VERTICES_of_body(
+						  DLIList<PointACIS*>& ref_vertex_list,
+						  DLIList<VERTEX*>& VERTEX_list,
+						  BODY*& copied_BODY_ptr ) const
+    {
+      DLIList<PointACIS*> removed_vertices;
 
-  // Copy the body before working with it.  Here we keep the
-  // attributes on the BODY so we can get back to the TE's
-  // in CUBIT from the copy (to find which VERTICE's to correlate
-  // to the RefVertice's).
-  copied_BODY_ptr = copy_BODY(BODY_ptr, CUBIT_FALSE);
+      return get_copied_VERTICES_of_body( ref_vertex_list, VERTEX_list,
+					  removed_vertices, copied_BODY_ptr );
+    }
 
-  // Loop through the copied BODY's VERTICEs to find which one's
-  // match to the original BODY's RefVertices.
-  ENTITY_LIST ENTITIES;
-  result = api_get_vertices( copied_BODY_ptr, ENTITIES);
-  if( !result.ok() )
-  {
-    PRINT_ERROR( "Unable to get ACIS VERTICES from a volume\n" );
-    api_delent( copied_BODY_ptr );
-    copied_BODY_ptr = NULL;
-    return CUBIT_FAILURE;
-  }
 
-  ENTITIES.init();
-  ENTITY* ENTITY_ptr;
-  int index = -1;
-  DLIList<int> index_list;
-  DLIList<VERTEX*> temp_VERTEX_list;
-  while( (ENTITY_ptr = ENTITIES.next() ) != NULL )
-  {
-    AcisBridge* ab_ptr = ATTRIB_CUBIT_OWNER::cubit_owner(ENTITY_ptr);
-    ref_vertex_ptr = CAST_TO(ab_ptr, PointACIS);
-    if( ref_vertex_ptr == NULL )
+  GeometryQueryEngine *AcisModifyEngine::get_gqe()
     {
-      PRINT_ERROR( "Unable to find RefVertex from ACIS VERTEX!\n" );
-      VERTEX_list.clean_out();
-      api_delent( copied_BODY_ptr );
-      copied_BODY_ptr = NULL;
-      VERTEX_list.clean_out();
-      return CUBIT_FAILURE;
+      return AcisQueryEngine::instance();
     }
 
-    index = body_vertex_list.where_is_item( ref_vertex_ptr );
-    if( index != -1 )
+  CubitBoolean AcisModifyEngine::is_modify_engine(const TopologyBridge *tb_ptr) const
     {
-      index_list.append( index );
-      temp_VERTEX_list.append( (VERTEX *)ENTITY_ptr );
+
+      if (CAST_TO(const_cast<TopologyBridge*>(tb_ptr), AcisBridge)) return CUBIT_TRUE;
+      else return CUBIT_FALSE;
     }
-    if( temp_VERTEX_list.size() == body_vertex_list.size() )
-      break;
-  }
-  ENTITIES.clear();
 
-  if( temp_VERTEX_list.size() != body_vertex_list.size() )
-  {
-    PRINT_ERROR( "Internal error correlating VERTEX lists\n" );
-    api_delent( copied_BODY_ptr );
-    copied_BODY_ptr = NULL;
-    return CUBIT_FAILURE;
-  }
+  CubitStatus
+    AcisModifyEngine::get_offset_intersections( Curve* ref_edge1,
+						Curve* ref_edge2,
+						DLIList<CubitVector*>& intersection_list,
+						double offset_distance,
+						bool ext_first )
+    {
+      int i;
+      //int done = 0;
+      bool bounded = !ext_first;
 
-  // Re-sort the list into the proper order
-  temp_VERTEX_list.reset();
-  index_list.reset();
-  for( i=0; i<index_list.size(); i++ )
-  {
-    // Find the VERTEX with the corresponding index
-    index = index_list.where_is_item( i );
-    temp_VERTEX_list.reset();
-    temp_VERTEX_list.step( index );
+      // Get the ACIS EDGES
+      EDGE* EDGE_ptr1 = AcisQueryEngine::get_EDGE(ref_edge1);
+      EDGE* EDGE_ptr2 = AcisQueryEngine::get_EDGE(ref_edge2);
+      if (!EDGE_ptr1 || !EDGE_ptr2)
+	return CUBIT_FAILURE;
 
-    VERTEX_list.append( temp_VERTEX_list.get() );
-  }
+      // Determine which curves are straight.  Use this because some curves,
+      // esp. from IGES, can be "straight" splines.
+      bool straight1, straight2;
+      straight1 = AcisQueryEngine::instance()->is_curve_app_straight( ref_edge1 );
+      straight2 = AcisQueryEngine::instance()->is_curve_app_straight( ref_edge2 );
 
-  return CUBIT_SUCCESS;
-}
+      // If first is straight we need to find the plane to offset it in.
+      CubitVector pln_norm;
+      EDGE* offset_EDGE_ptr = NULL;
+      if( straight1 )
+	{
+	  // Need to find the plane normal to do offsets in
 
-CubitStatus
-AcisModifyEngine::get_copied_VERTICES_of_body(
-                                        DLIList<PointACIS*>& ref_vertex_list,
-                                        DLIList<VERTEX*>& VERTEX_list,
-                                        BODY*& copied_BODY_ptr ) const
-{
-  DLIList<PointACIS*> removed_vertices;
+	  // Get point normal form
+	  CubitVector orig1, dir1;
+	  if( ref_edge1->get_point_direction( orig1, dir1 ) == CUBIT_FAILURE )
+	    {
+	      // This must be a straight spline.  Get it from endpoints.
+	      ref_edge1->position_from_fraction( 0.0, orig1 );
+	      CubitVector end_coords;
+	      ref_edge1->position_from_fraction( 1.0, end_coords );
+	      dir1 = end_coords - orig1;
+	      dir1.normalize();
+	    }
+	  if( straight2 )
+	    {
+	      // Get point normal form
+	      CubitVector orig2, dir2;
+	      if( ref_edge2->get_point_direction( orig2, dir2 ) == CUBIT_FAILURE )
+		{
+		  // This must be a straight spline.  Get it from endpoints.
+		  ref_edge2->position_from_fraction( 0.0, orig2 );
+		  CubitVector end_coords;
+		  ref_edge2->position_from_fraction( 1.0, end_coords );
+		  dir2 = end_coords - orig2;
+		  dir2.normalize();
+		}
 
-  return get_copied_VERTICES_of_body( ref_vertex_list, VERTEX_list,
-                                      removed_vertices, copied_BODY_ptr );
-}
+	      // Find SPAvector from orig1 to orig2
+	      CubitVector vec1 = orig2 - orig1;
+	      vec1.normalize();
 
+	      // Cross dir1 with vec1 to get plane normal.
+	      pln_norm = dir1 * vec1;
 
-GeometryQueryEngine *AcisModifyEngine::get_gqe()
-{
-  return AcisQueryEngine::instance();
-}
+	      // Make sure this isn't a zero SPAvector.
+	      if( pln_norm.length() == 0.0 )
+		{
+		  // Cross dir1 with dir2 to get plane normal
+		  pln_norm = dir1 * dir2;
+		}
 
-CubitBoolean AcisModifyEngine::is_modify_engine(const TopologyBridge *tb_ptr) const
-{
+	      if( pln_norm.length() == 0.0 )
+		{
+		  PRINT_ERROR( "Unable to calculate plane that the curves lie in\n" );
+		  return CUBIT_FAILURE;
+		}
+	    }
+	  else // EDGE2 is not straight
+	    {
+	      // Proper normal should be normal to curve, but check to see if EDGE 1 is on
+	      // this plane.
+	      CubitVector orig2;
+	      AcisQueryEngine::instance()->get_EDGE_normal( EDGE_ptr2, pln_norm );
 
-  if (CAST_TO(const_cast<TopologyBridge*>(tb_ptr), AcisBridge)) return CUBIT_TRUE;
-  else return CUBIT_FALSE;
-}
+	      double aln_orig[3], aln_vec[3], apln_orig[3], apln_norm[3];
 
-CubitStatus
-AcisModifyEngine::get_offset_intersections( Curve* ref_edge1,
-                                            Curve* ref_edge2,
-                                            DLIList<CubitVector*>& intersection_list,
-                                            double offset_distance,
-                                            bool ext_first )
-{
-   int i;
-   //int done = 0;
-   bool bounded = !ext_first;
+	      AnalyticGeometryTool *agt = AnalyticGeometryTool::instance();
 
-   // Get the ACIS EDGES
-   EDGE* EDGE_ptr1 = AcisQueryEngine::get_EDGE(ref_edge1);
-   EDGE* EDGE_ptr2 = AcisQueryEngine::get_EDGE(ref_edge2);
-   if (!EDGE_ptr1 || !EDGE_ptr2)
-    return CUBIT_FAILURE;
+	      agt->copy_pnt( orig1, aln_orig ); agt->copy_pnt( dir1, aln_vec );
+	      ref_edge2->position_from_fraction( 0.0, orig2 ); //
+	      ref_edge2->position_from_u(ref_edge2->start_param(),orig2);
+	      agt->copy_pnt( orig2, apln_orig );
+	      agt->copy_pnt( pln_norm, apln_norm );
 
-   // Determine which curves are straight.  Use this because some curves,
-   // esp. from IGES, can be "straight" splines.
-   bool straight1, straight2;
-   straight1 = AcisQueryEngine::instance()->is_curve_app_straight( ref_edge1 );
-   straight2 = AcisQueryEngine::instance()->is_curve_app_straight( ref_edge2 );
+	      if( !agt->is_ln_on_pln( aln_orig,aln_vec, apln_orig, apln_norm ) )
+		{
+		  PRINT_ERROR( "Curve does not lie in the plane defined by Curve\n" );
+		  return CUBIT_FAILURE;
+		}
+	    }
 
-   // If first is straight we need to find the plane to offset it in.
-   CubitVector pln_norm;
-   EDGE* offset_EDGE_ptr = NULL;
-   if( straight1 )
-   {
-      // Need to find the plane normal to do offsets in
+	  // Get offset direction cross of plane normal and edge 1 direction
+	  CubitVector offset_dir = pln_norm*dir1;
 
-      // Get point normal form
-      CubitVector orig1, dir1;
-      if( ref_edge1->get_point_direction( orig1, dir1 ) == CUBIT_FAILURE )
-      {
-        // This must be a straight spline.  Get it from endpoints.
-        ref_edge1->position_from_fraction( 0.0, orig1 );
-        CubitVector end_coords;
-        ref_edge1->position_from_fraction( 1.0, end_coords );
-        dir1 = end_coords - orig1;
-        dir1.normalize();
-      }
-      if( straight2 )
-      {
-         // Get point normal form
-         CubitVector orig2, dir2;
-         if( ref_edge2->get_point_direction( orig2, dir2 ) == CUBIT_FAILURE )
-         {
-           // This must be a straight spline.  Get it from endpoints.
-           ref_edge2->position_from_fraction( 0.0, orig2 );
-           CubitVector end_coords;
-           ref_edge2->position_from_fraction( 1.0, end_coords );
-           dir2 = end_coords - orig2;
-           dir2.normalize();
-         }
+	  // Do first side
+	  offset_EDGE_ptr = copy_and_move_EDGE( EDGE_ptr1, offset_dir, offset_distance );
+	  if( offset_EDGE_ptr == NULL )
+	    {
+	      PRINT_ERROR( "unable to offset Curve for intersection calculation\n" );
+	      return CUBIT_FAILURE;
+	    }
 
-         // Find SPAvector from orig1 to orig2
-         CubitVector vec1 = orig2 - orig1;
-         vec1.normalize();
+	  if( AcisQueryEngine::instance()->get_intersections( offset_EDGE_ptr, EDGE_ptr2,
+							      intersection_list, bounded ) ==
+	      CUBIT_FAILURE )
+	    {
+	      PRINT_ERROR( "unable to calculate intersections of offset Curves\n" );
+	      api_delent( offset_EDGE_ptr );
+	      return CUBIT_FAILURE;
+	    }
 
-         // Cross dir1 with vec1 to get plane normal.
-         pln_norm = dir1 * vec1;
+	  api_delent( offset_EDGE_ptr );
 
-         // Make sure this isn't a zero SPAvector.
-         if( pln_norm.length() == 0.0 )
-         {
-           // Cross dir1 with dir2 to get plane normal
-           pln_norm = dir1 * dir2;
-         }
+	  // Do second side
+	  if( offset_distance != 0.0 )
+	    {
+	      offset_dir = -offset_dir;
+	      offset_EDGE_ptr = copy_and_move_EDGE( EDGE_ptr1, offset_dir, offset_distance );
+	      if( offset_EDGE_ptr == NULL )
+		{
+		  PRINT_ERROR( "unable to offset Curve for intersection calculation\n" );
+		  return CUBIT_FAILURE;
+		}
 
-         if( pln_norm.length() == 0.0 )
-         {
-            PRINT_ERROR( "Unable to calculate plane that the curves lie in\n" );
-            return CUBIT_FAILURE;
-         }
-      }
-      else // EDGE2 is not straight
-      {
-         // Proper normal should be normal to curve, but check to see if EDGE 1 is on
-         // this plane.
-         CubitVector orig2;
-         AcisQueryEngine::instance()->get_EDGE_normal( EDGE_ptr2, pln_norm );
+	      if( AcisQueryEngine::instance()->get_intersections( offset_EDGE_ptr, EDGE_ptr2, intersection_list, bounded ) == CUBIT_FAILURE )
+		{
+		  api_delent( offset_EDGE_ptr );
+		  PRINT_ERROR( "unable to calculate intersections of offset Curves\n" );
+		  return CUBIT_FAILURE;
+		}
 
-         double aln_orig[3], aln_vec[3], apln_orig[3], apln_norm[3];
+	      api_delent( offset_EDGE_ptr );
+	    }
 
-         AnalyticGeometryTool *agt = AnalyticGeometryTool::instance();
+	}
+      else if( offset_distance != 0.0 )
+	{
+	  // If there is an offset, offset the first curve to each "side" of the original
+	  // and do the intersections - i.e., try each side.  Note we already handled the
+	  // special case if the first curve is straight.
 
-         agt->copy_pnt( orig1, aln_orig ); agt->copy_pnt( dir1, aln_vec );
-         ref_edge2->position_from_fraction( 0.0, orig2 ); //
-         ref_edge2->position_from_u(ref_edge2->start_param(),orig2);
-         agt->copy_pnt( orig2, apln_orig );
-         agt->copy_pnt( pln_norm, apln_norm );
+	  // Do first side
+	  DLIList<EDGE*> EDGE_list;
+	  DLIList<EDGE*> new_EDGE_list;
 
-         if( !agt->is_ln_on_pln( aln_orig,aln_vec, apln_orig, apln_norm ) )
-         {
-            PRINT_ERROR( "Curve does not lie in the plane defined by Curve\n" );
-            return CUBIT_FAILURE;
-         }
-      }
+	  EDGE_list.append( EDGE_ptr1 );
+	  if( offset_EDGES( EDGE_list, offset_distance, 1, new_EDGE_list ) == CUBIT_FAILURE )
+	    {
+	      PRINT_ERROR( "Unable to offset the curves\n" );
+	      return CUBIT_FAILURE;
+	    }
 
-      // Get offset direction cross of plane normal and edge 1 direction
-      CubitVector offset_dir = pln_norm*dir1;
+	  // Note: the new_EDGE_list can have more curves in it than EDGE_list
+	  for( i=0; i<new_EDGE_list.size(); i++ )
+	    {
+	      offset_EDGE_ptr = new_EDGE_list.get_and_step();
+	      if( AcisQueryEngine::instance()->get_intersections( offset_EDGE_ptr,
+								  EDGE_ptr2, intersection_list, bounded ) == CUBIT_FAILURE )
+		{
+		  api_delent( offset_EDGE_ptr );
+		  PRINT_ERROR( "unable to calculate intersections of offset Curves\n" );
+		  return CUBIT_FAILURE;
+		}
+	      api_delent( offset_EDGE_ptr );
+	    }
 
-      // Do first side
-      offset_EDGE_ptr = copy_and_move_EDGE( EDGE_ptr1, offset_dir, offset_distance );
-      if( offset_EDGE_ptr == NULL )
-      {
-         PRINT_ERROR( "unable to offset Curve for intersection calculation\n" );
-         return CUBIT_FAILURE;
-      }
+	  new_EDGE_list.clean_out();
 
-      if( AcisQueryEngine::instance()->get_intersections( offset_EDGE_ptr, EDGE_ptr2,
-                                              intersection_list, bounded ) ==
-          CUBIT_FAILURE )
-      {
-         PRINT_ERROR( "unable to calculate intersections of offset Curves\n" );
-         api_delent( offset_EDGE_ptr );
-         return CUBIT_FAILURE;
-      }
+	  // Do other side
+	  if( offset_EDGES( EDGE_list, -offset_distance, 1, new_EDGE_list ) == CUBIT_FAILURE )
+	    {
+	      PRINT_ERROR( "Unable to offset the curves\n" );
+	      return CUBIT_FAILURE;
+	    }
 
-      api_delent( offset_EDGE_ptr );
+	  for( i=0; i<new_EDGE_list.size(); i++ )
+	    {
+	      offset_EDGE_ptr = new_EDGE_list.get_and_step();
+	      if( AcisQueryEngine::instance()->get_intersections( offset_EDGE_ptr, EDGE_ptr2, intersection_list, bounded ) == CUBIT_FAILURE )
+		{
+		  api_delent( offset_EDGE_ptr );
+		  PRINT_ERROR( "unable to calculate intersections of offset Curves\n" );
+		  return CUBIT_FAILURE;
+		}
+	      api_delent( offset_EDGE_ptr );
+	    }
 
-      // Do second side
-      if( offset_distance != 0.0 )
-      {
-         offset_dir = -offset_dir;
-         offset_EDGE_ptr = copy_and_move_EDGE( EDGE_ptr1, offset_dir, offset_distance );
-         if( offset_EDGE_ptr == NULL )
-         {
-            PRINT_ERROR( "unable to offset Curve for intersection calculation\n" );
-            return CUBIT_FAILURE;
-         }
+	  new_EDGE_list.clean_out();
 
-         if( AcisQueryEngine::instance()->get_intersections( offset_EDGE_ptr, EDGE_ptr2, intersection_list, bounded ) == CUBIT_FAILURE )
-         {
-            api_delent( offset_EDGE_ptr );
-            PRINT_ERROR( "unable to calculate intersections of offset Curves\n" );
-            return CUBIT_FAILURE;
-         }
+	}
+      else
+	{
+	  // Just get the intersections
+	  if( AcisQueryEngine::instance()->get_intersections( EDGE_ptr1, EDGE_ptr2, intersection_list, bounded ) == CUBIT_FAILURE )
+	    {
+	      PRINT_ERROR( "unable to calculate intersections of Curves\n" );
+	      return CUBIT_FAILURE;
+	    }
+	}
 
-         api_delent( offset_EDGE_ptr );
-      }
+      // Cull out any points that are not on bounds of RefEdge 2
+      if( bounded == CUBIT_FALSE )
+	{
+	  CubitVector *vec_ptr;
+	  for( i=0; i<intersection_list.size(); i++ )
+	    {
+	      vec_ptr = intersection_list.get();
 
-  }
-  else if( offset_distance != 0.0 )
-  {
-     // If there is an offset, offset the first curve to each "side" of the original
-     // and do the intersections - i.e., try each side.  Note we already handled the
-     // special case if the first curve is straight.
+	      if( ref_edge2->point_containment( *vec_ptr ) == CUBIT_PNT_OFF )
+		{
+		  delete vec_ptr;
+		  intersection_list.remove();
+		}
+	      else
+		intersection_list.step();
+	    }
+	}
 
-     // Do first side
-     DLIList<EDGE*> EDGE_list;
-     DLIList<EDGE*> new_EDGE_list;
+      return CUBIT_SUCCESS;
+    }
 
-     EDGE_list.append( EDGE_ptr1 );
-     if( offset_EDGES( EDGE_list, offset_distance, 1, new_EDGE_list ) == CUBIT_FAILURE )
-     {
-        PRINT_ERROR( "Unable to offset the curves\n" );
-        return CUBIT_FAILURE;
-     }
+  CubitStatus
+    AcisModifyEngine::get_offset_intersections( Curve* ref_edge_ptr,
+						Surface* ref_face_ptr,
+						DLIList<CubitVector*> &intersection_list,
+						double offset_distance,
+						bool ext_surf )
+    {
+      outcome result;
 
-     // Note: the new_EDGE_list can have more curves in it than EDGE_list
-     for( i=0; i<new_EDGE_list.size(); i++ )
-     {
-        offset_EDGE_ptr = new_EDGE_list.get_and_step();
-        if( AcisQueryEngine::instance()->get_intersections( offset_EDGE_ptr,
-                  EDGE_ptr2, intersection_list, bounded ) == CUBIT_FAILURE )
-        {
-           api_delent( offset_EDGE_ptr );
-           PRINT_ERROR( "unable to calculate intersections of offset Curves\n" );
-           return CUBIT_FAILURE;
-        }
-        api_delent( offset_EDGE_ptr );
-     }
+      EDGE* EDGE_ptr = AcisQueryEngine::get_EDGE(ref_edge_ptr);
+      FACE* FACE_ptr = AcisQueryEngine::get_FACE(ref_face_ptr);
+      if (!EDGE_ptr || !FACE_ptr)
+	return CUBIT_FAILURE;
 
-     new_EDGE_list.clean_out();
+      // If there is an offset, offset the surface to each "side" of the original
+      // and do the intersections - i.e., try each side.
+      if( offset_distance != 0.0 )
+	{
+	  FACE* offset_FACE_ptr = NULL;
 
-     // Do other side
-     if( offset_EDGES( EDGE_list, -offset_distance, 1, new_EDGE_list ) == CUBIT_FAILURE )
-     {
-        PRINT_ERROR( "Unable to offset the curves\n" );
-        return CUBIT_FAILURE;
-     }
+	  result = api_offset_face ( FACE_ptr, offset_distance, offset_FACE_ptr );
 
-     for( i=0; i<new_EDGE_list.size(); i++ )
-     {
-        offset_EDGE_ptr = new_EDGE_list.get_and_step();
-        if( AcisQueryEngine::instance()->get_intersections( offset_EDGE_ptr, EDGE_ptr2, intersection_list, bounded ) == CUBIT_FAILURE )
-        {
-           api_delent( offset_EDGE_ptr );
-           PRINT_ERROR( "unable to calculate intersections of offset Curves\n" );
-           return CUBIT_FAILURE;
-        }
-        api_delent( offset_EDGE_ptr );
-     }
+	  if( offset_FACE_ptr == NULL )
+	    {
+	      AcisQueryEngine::instance()->ACIS_API_error(result);
+	      PRINT_ERROR( "Unable to offset surface\n" );
+	      return CUBIT_FAILURE;
+	    }
 
-     new_EDGE_list.clean_out();
+	  // This creates a FACE from the given FACE, only it can be extended out.
+	  FACE* ext_offset_FACE_ptr = make_FACE( offset_FACE_ptr, ext_surf );
+	  BODY *ext_offset_BODY_ptr =
+	    AcisQueryEngine::instance()->get_BODY_of_ENTITY( ext_offset_FACE_ptr );
 
-  }
-  else
-  {
-     // Just get the intersections
-     if( AcisQueryEngine::instance()->get_intersections( EDGE_ptr1, EDGE_ptr2, intersection_list, bounded ) == CUBIT_FAILURE )
-     {
-        PRINT_ERROR( "unable to calculate intersections of Curves\n" );
-        return CUBIT_FAILURE;
-     }
-  }
+	  if( AcisQueryEngine::instance()->get_intersections( EDGE_ptr, ext_offset_FACE_ptr, intersection_list ) == CUBIT_FAILURE )
+	    {
+	      PRINT_ERROR("Problems finding intersections of curve and surface.\n");
+	      api_delent( offset_FACE_ptr );
+	      api_delent( ext_offset_BODY_ptr );
+	      return CUBIT_FAILURE;
+	    }
 
-  // Cull out any points that are not on bounds of RefEdge 2
-  if( bounded == CUBIT_FALSE )
-  {
-     CubitVector *vec_ptr;
-     for( i=0; i<intersection_list.size(); i++ )
-     {
-        vec_ptr = intersection_list.get();
+	  api_delent( offset_FACE_ptr ); offset_FACE_ptr = NULL;
+	  api_delent( ext_offset_BODY_ptr ); ext_offset_BODY_ptr = NULL;
+	  ext_offset_FACE_ptr = NULL;
 
-        if( ref_edge2->point_containment( *vec_ptr ) == CUBIT_PNT_OFF )
-        {
-           delete vec_ptr;
-           intersection_list.remove();
-        }
-        else
-           intersection_list.step();
-     }
-  }
+	  // Try other side
+	  result = api_offset_face ( FACE_ptr, -offset_distance, offset_FACE_ptr );
 
-  return CUBIT_SUCCESS;
-}
+	  if( offset_FACE_ptr == NULL )
+	    {
+	      AcisQueryEngine::instance()->ACIS_API_error(result);
+	      PRINT_ERROR( "Unable to offset surface\n" );
+	      return CUBIT_FAILURE;
+	    }
 
-CubitStatus
-AcisModifyEngine::get_offset_intersections( Curve* ref_edge_ptr,
-                                            Surface* ref_face_ptr,
-                                            DLIList<CubitVector*> &intersection_list,
-                                            double offset_distance,
-                                            bool ext_surf )
-{
-   outcome result;
+	  // This creates a FACE from the given FACE, only it is extended out.
+	  ext_offset_FACE_ptr = make_FACE( offset_FACE_ptr, CUBIT_TRUE );
+	  ext_offset_BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY( ext_offset_FACE_ptr );
 
-   EDGE* EDGE_ptr = AcisQueryEngine::get_EDGE(ref_edge_ptr);
-   FACE* FACE_ptr = AcisQueryEngine::get_FACE(ref_face_ptr);
-   if (!EDGE_ptr || !FACE_ptr)
-    return CUBIT_FAILURE;
+	  if( AcisQueryEngine::instance()->get_intersections( EDGE_ptr, ext_offset_FACE_ptr, intersection_list ) == CUBIT_FAILURE )
+	    {
+	      PRINT_ERROR("Problems finding intersections of curve and surface.\n" );
+	      api_delent( offset_FACE_ptr );
+	      api_delent( ext_offset_BODY_ptr );
+	      return CUBIT_FAILURE;
+	    }
 
-   // If there is an offset, offset the surface to each "side" of the original
-   // and do the intersections - i.e., try each side.
-   if( offset_distance != 0.0 )
-   {
-      FACE* offset_FACE_ptr = NULL;
+	  api_delent( offset_FACE_ptr );
+	  api_delent( ext_offset_BODY_ptr );
+	}
+      else
+	{
+	  FACE* ext_FACE_ptr = make_FACE( FACE_ptr, ext_surf );
+	  BODY *ext_BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY( ext_FACE_ptr );
+	  if( AcisQueryEngine::instance()->get_intersections( EDGE_ptr, ext_FACE_ptr, intersection_list ) == CUBIT_FAILURE )
+	    {
+	      PRINT_ERROR("Problems finding intersections of curve and surface.\n" );
+	      api_delent( ext_BODY_ptr );
+	      return CUBIT_FAILURE;
+	    }
+	  api_delent( ext_BODY_ptr );
+	}
 
-      result = api_offset_face ( FACE_ptr, offset_distance, offset_FACE_ptr );
+      return CUBIT_SUCCESS;
+    }
 
-      if( offset_FACE_ptr == NULL )
-      {
-         AcisQueryEngine::instance()->ACIS_API_error(result);
-         PRINT_ERROR( "Unable to offset surface\n" );
-         return CUBIT_FAILURE;
-      }
+  EDGE *
+    AcisModifyEngine::copy_and_move_EDGE( EDGE *EDGE_ptr,
+					  const CubitVector &input_dir,
+					  double dist )
+    {
+      // Setup translation transform
+      SPAtransf tr;
+      CubitVector dir(input_dir);
+      dir.normalize(); // For now, allow this SPAvector to be modified
+      CubitVector delta = dist*dir;
+      SPAvector vec(delta.x(), delta.y(), delta.z() );
+      tr = translate_transf( vec );
 
-      // This creates a FACE from the given FACE, only it can be extended out.
-      FACE* ext_offset_FACE_ptr = make_FACE( offset_FACE_ptr, ext_surf );
-      BODY *ext_offset_BODY_ptr =
-        AcisQueryEngine::instance()->get_BODY_of_ENTITY( ext_offset_FACE_ptr );
+      EDGE* new_EDGE_ptr;
+      outcome result = api_trans_edge( EDGE_ptr, tr, new_EDGE_ptr );
+      if (!result.ok())
+	{
+	  AcisQueryEngine::instance()->ACIS_API_error( result );
+	  return NULL;
+	}
 
-      if( AcisQueryEngine::instance()->get_intersections( EDGE_ptr, ext_offset_FACE_ptr, intersection_list ) == CUBIT_FAILURE )
-      {
-         PRINT_ERROR("Problems finding intersections of curve and surface.\n");
-         api_delent( offset_FACE_ptr );
-         api_delent( ext_offset_BODY_ptr );
-         return CUBIT_FAILURE;
-      }
+      // Remove the CUBIT owner attributes from the new edge
+      ATTRIB_CUBIT_OWNER::remove_cubit_owner((ENTITY*)new_EDGE_ptr, CUBIT_TRUE);
 
-      api_delent( offset_FACE_ptr ); offset_FACE_ptr = NULL;
-      api_delent( ext_offset_BODY_ptr ); ext_offset_BODY_ptr = NULL;
-      ext_offset_FACE_ptr = NULL;
+      return new_EDGE_ptr;
+    }
 
-      // Try other side
-      result = api_offset_face ( FACE_ptr, -offset_distance, offset_FACE_ptr );
+  CubitStatus
+    AcisModifyEngine::offset_EDGES( DLIList<EDGE*> &EDGE_list,
+				    double offset_distance,
+				    int gap_type,
+				    DLIList<EDGE*> &new_EDGE_list )
+    {
+      int i;
+      EDGE *EDGE_ptr = NULL;
+      //ENTITY *ENTITY_ptr = NULL;
+      EDGE *tmp_EDGE_ptr = NULL;
 
-      if( offset_FACE_ptr == NULL )
-      {
-         AcisQueryEngine::instance()->ACIS_API_error(result);
-         PRINT_ERROR( "Unable to offset surface\n" );
-         return CUBIT_FAILURE;
-      }
+      // Need to create a wire from the EDGEs
 
-      // This creates a FACE from the given FACE, only it is extended out.
-      ext_offset_FACE_ptr = make_FACE( offset_FACE_ptr, CUBIT_TRUE );
-      ext_offset_BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY( ext_offset_FACE_ptr );
+      // Copy them first
+      int edge_count = EDGE_list.size();
+      EDGE** EDGEs = new EDGE*[edge_count];
 
-      if( AcisQueryEngine::instance()->get_intersections( EDGE_ptr, ext_offset_FACE_ptr, intersection_list ) == CUBIT_FAILURE )
-      {
-         PRINT_ERROR("Problems finding intersections of curve and surface.\n" );
-         api_delent( offset_FACE_ptr );
-         api_delent( ext_offset_BODY_ptr );
-         return CUBIT_FAILURE;
-      }
+      EDGE_list.reset();
+      for( i=0; i<EDGE_list.size(); i++ )
+	{
+	  EDGE_ptr = EDGE_list.get_and_step();
 
-      api_delent( offset_FACE_ptr );
-      api_delent( ext_offset_BODY_ptr );
-   }
-   else
-   {
-      FACE* ext_FACE_ptr = make_FACE( FACE_ptr, ext_surf );
-      BODY *ext_BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY( ext_FACE_ptr );
-      if( AcisQueryEngine::instance()->get_intersections( EDGE_ptr, ext_FACE_ptr, intersection_list ) == CUBIT_FAILURE )
-      {
-         PRINT_ERROR("Problems finding intersections of curve and surface.\n" );
-         api_delent( ext_BODY_ptr );
-         return CUBIT_FAILURE;
-      }
-      api_delent( ext_BODY_ptr );
-   }
+	  api_edge( EDGE_ptr, tmp_EDGE_ptr );
 
-   return CUBIT_SUCCESS;
-}
+	  EDGEs[i] = tmp_EDGE_ptr;
 
-EDGE *
-AcisModifyEngine::copy_and_move_EDGE( EDGE *EDGE_ptr,
-                                      const CubitVector &input_dir,
-                                      double dist )
-{
-   // Setup translation transform
-   SPAtransf tr;
-   CubitVector dir(input_dir);
-   dir.normalize(); // For now, allow this SPAvector to be modified
-   CubitVector delta = dist*dir;
-   SPAvector vec(delta.x(), delta.y(), delta.z() );
-   tr = translate_transf( vec );
+	  // Remove the owner attribute from the copied edge & children
+	  ATTRIB_CUBIT_OWNER::remove_cubit_owner(EDGEs[i], CUBIT_TRUE);
+	}
 
-   EDGE* new_EDGE_ptr;
-   outcome result = api_trans_edge( EDGE_ptr, tr, new_EDGE_ptr );
-   if (!result.ok())
-   {
-     AcisQueryEngine::instance()->ACIS_API_error( result );
-     return NULL;
-   }
+      // The EDGEs are put into the wire so don't delete them.
+      BODY* wire_BODY = NULL;
+      outcome result = api_make_ewire( edge_count, EDGEs, wire_BODY );
 
-   // Remove the CUBIT owner attributes from the new edge
-   ATTRIB_CUBIT_OWNER::remove_cubit_owner((ENTITY*)new_EDGE_ptr, CUBIT_TRUE);
+      if( !result.ok() || wire_BODY==NULL )
+	{
+	  AcisQueryEngine::instance()->ACIS_API_error(result);
+	  PRINT_ERROR( "unable to make ACIS wire body from curves\n" );
+	  if( wire_BODY )
+	    api_delent( (ENTITY*)wire_BODY );
+	  else
+	    {
+	      for( i=0; i<edge_count; i++)
+		api_delent( (ENTITY*)EDGEs[i] );
+	    }
+	  return CUBIT_FAILURE;
+	}
 
-   return new_EDGE_ptr;
-}
+      //The gap type is as follows; 0 = rounded like arcs, 1 = extended like lines, and 2 =
+      //natural like curve extensions. Lines are extend with lines and circles are extended with
+      //circles.
 
-CubitStatus
-AcisModifyEngine::offset_EDGES( DLIList<EDGE*> &EDGE_list,
-                                double offset_distance,
-                                int gap_type,
-                                DLIList<EDGE*> &new_EDGE_list )
-{
-   int i;
-   EDGE *EDGE_ptr = NULL;
-   //ENTITY *ENTITY_ptr = NULL;
-   EDGE *tmp_EDGE_ptr = NULL;
+      law* offset_law = new constant_law( offset_distance );
+      law *twist_law=NULL;
+      BODY* offset_WIRE;
+      logical trim_flg = TRUE;
 
-   // Need to create a wire from the EDGEs
+      // need to check if wire is planar and calculate the
+      // normal to the plane
+      WIRE* this_wire = wire_BODY->wire() ?
+	wire_BODY->wire() : wire_BODY->lump()->shell()->wire();
 
-   // Copy them first
-   int edge_count = EDGE_list.size();
-   EDGE** EDGEs = new EDGE*[edge_count];
+      SPAposition centroid;
+      SPAunit_vector normal;
+      if(!is_planar_wire(this_wire, centroid, normal))
+	{
+	  PRINT_ERROR("selected curves do not form a planar chain\n");
+	  api_delent( (ENTITY*)wire_BODY );
+	  return CUBIT_FAILURE;
+	}
 
-   EDGE_list.reset();
-   for( i=0; i<EDGE_list.size(); i++ )
-   {
-      EDGE_ptr = EDGE_list.get_and_step();
+      // Offset the wire to get the new curves
+      result = api_offset_planar_wire( wire_BODY, offset_law, twist_law,
+				       normal, offset_WIRE, gap_type, trim_flg );
 
-      api_edge( EDGE_ptr, tmp_EDGE_ptr );
+      if( !result.ok() )
+	{
+	  AcisQueryEngine::instance()->ACIS_API_error(result);
+	  PRINT_ERROR( "unable to offset wire volume\n" );
+	  api_delent( (ENTITY*)wire_BODY );
+	  return CUBIT_FAILURE;
+	}
 
-      EDGEs[i] = tmp_EDGE_ptr;
+      // Copy out the EDGES from the WIRE, then delete the WIRE
+      DLIList<EDGE*> wire_edge_list;
+      AcisQueryEngine::instance()->get_EDGEs( (ENTITY *)offset_WIRE, wire_edge_list );
 
-      // Remove the owner attribute from the copied edge & children
-      ATTRIB_CUBIT_OWNER::remove_cubit_owner(EDGEs[i], CUBIT_TRUE);
-   }
+      // Sometimes the function works but we don't get any edges
+      if( !wire_edge_list.size() )
+	{
+	  api_delent( (ENTITY*)wire_BODY );
+	  return CUBIT_FAILURE;
+	}
 
-   // The EDGEs are put into the wire so don't delete them.
-   BODY* wire_BODY = NULL;
-   outcome result = api_make_ewire( edge_count, EDGEs, wire_BODY );
+      wire_edge_list.reset();
+      EDGE *new_EDGE_ptr;
+      for( i=0; i<wire_edge_list.size(); i++ )
+	{
+	  EDGE_ptr = wire_edge_list.get_and_step();
 
-   if( !result.ok() || wire_BODY==NULL )
-   {
-     AcisQueryEngine::instance()->ACIS_API_error(result);
-     PRINT_ERROR( "unable to make ACIS wire body from curves\n" );
-     if( wire_BODY )
-       api_delent( (ENTITY*)wire_BODY );
-     else
-     {
-       for( i=0; i<edge_count; i++)
-         api_delent( (ENTITY*)EDGEs[i] );
-     }
-     return CUBIT_FAILURE;
-   }
+	  result = api_edge( EDGE_ptr, new_EDGE_ptr );
+	  if( !result.ok() )
+	    {
+	      AcisQueryEngine::instance()->ACIS_API_error(result);
+	      PRINT_INFO( "Unable to copy curve from new WIRE\n" );
+	      api_delent( (ENTITY*)wire_BODY );
+	      return CUBIT_FAILURE;
+	    }
 
-   //The gap type is as follows; 0 = rounded like arcs, 1 = extended like lines, and 2 =
-   //natural like curve extensions. Lines are extend with lines and circles are extended with
-   //circles.
+	  new_EDGE_list.append( new_EDGE_ptr );
+	}
 
-   law* offset_law = new constant_law( offset_distance );
-   law *twist_law=NULL;
-   BODY* offset_WIRE;
-   logical trim_flg = TRUE;
-
-   // need to check if wire is planar and calculate the
-   // normal to the plane
-   WIRE* this_wire = wire_BODY->wire() ?
-      wire_BODY->wire() : wire_BODY->lump()->shell()->wire();
-
-   SPAposition centroid;
-   SPAunit_vector normal;
-   if(!is_planar_wire(this_wire, centroid, normal))
-   {
-      PRINT_ERROR("selected curves do not form a planar chain\n");
+      // Delete the WIRE
       api_delent( (ENTITY*)wire_BODY );
-      return CUBIT_FAILURE;
-   }
 
-   // Offset the wire to get the new curves
-   result = api_offset_planar_wire( wire_BODY, offset_law, twist_law,
-                                    normal, offset_WIRE, gap_type, trim_flg );
+      return CUBIT_SUCCESS;
+    }
 
-   if( !result.ok() )
-   {
-      AcisQueryEngine::instance()->ACIS_API_error(result);
-      PRINT_ERROR( "unable to offset wire volume\n" );
-      api_delent( (ENTITY*)wire_BODY );
-      return CUBIT_FAILURE;
-   }
+  Curve* AcisModifyEngine::find_curve_by_end_coord( const CubitVector& coords,
+						    DLIList<Curve*>& curves,
+						    bool& start_flag ) const
+    {
+      Curve* curve = 0;
+      CubitVector curve_pt;
+      const double tol = AcisQueryEngine::instance()->get_sme_resabs_tolerance();
+      const double tolsqr = tol*tol;
 
-   // Copy out the EDGES from the WIRE, then delete the WIRE
-   DLIList<EDGE*> wire_edge_list;
-   AcisQueryEngine::instance()->get_EDGEs( (ENTITY *)offset_WIRE, wire_edge_list );
+      DLIList<Curve*> tmp_list(curves);
+      tmp_list.reset();
+      for ( int i = curves.size(); i--; )
+	{
+	  curve = tmp_list.get_and_step();
 
-   // Sometimes the function works but we don't get any edges
-   if( !wire_edge_list.size() )
-   {
-     api_delent( (ENTITY*)wire_BODY );
-     return CUBIT_FAILURE;
-   }
+	  curve->position_from_fraction( 0.0, curve_pt );
+	  if ( (curve_pt - coords).length_squared() < tolsqr )
+	    {
+	      start_flag = true;
+	      return curve;
+	    }
 
-   wire_edge_list.reset();
-   EDGE *new_EDGE_ptr;
-   for( i=0; i<wire_edge_list.size(); i++ )
-   {
-      EDGE_ptr = wire_edge_list.get_and_step();
+	  curve->position_from_fraction( 1.0, curve_pt );
+	  if ( (curve_pt - coords).length_squared() < tolsqr )
+	    {
+	      start_flag = false;
+	      return curve;
+	    }
+	}
 
-      result = api_edge( EDGE_ptr, new_EDGE_ptr );
-      if( !result.ok() )
-      {
-         AcisQueryEngine::instance()->ACIS_API_error(result);
-         PRINT_INFO( "Unable to copy curve from new WIRE\n" );
-         api_delent( (ENTITY*)wire_BODY );
-         return CUBIT_FAILURE;
-      }
+      return 0;
+    }
 
-      new_EDGE_list.append( new_EDGE_ptr );
-   }
+  bool AcisModifyEngine::bridge_deactivated(AcisBridge* bridge) const
+    {
+      return deactivatedSet.count(bridge) > 0;
+    }
 
-   // Delete the WIRE
-   api_delent( (ENTITY*)wire_BODY );
-
-   return CUBIT_SUCCESS;
-}
-
-Curve* AcisModifyEngine::find_curve_by_end_coord( const CubitVector& coords,
-                                                  DLIList<Curve*>& curves,
-                                                  bool& start_flag ) const
-{
-  Curve* curve = 0;
-  CubitVector curve_pt;
-  const double tol = AcisQueryEngine::instance()->get_sme_resabs_tolerance();
-  const double tolsqr = tol*tol;
-
-  DLIList<Curve*> tmp_list(curves);
-  tmp_list.reset();
-  for ( int i = curves.size(); i--; )
-  {
-    curve = tmp_list.get_and_step();
-
-    curve->position_from_fraction( 0.0, curve_pt );
-    if ( (curve_pt - coords).length_squared() < tolsqr )
+  CubitStatus AcisModifyEngine::deactivate_bridge( AcisBridge* bridge ) const
     {
-      start_flag = true;
-      return curve;
+      AcisModifyEngine* nonconst = AcisModifyEngine::instance();
+      bool unique = nonconst->deactivatedSet.insert(bridge).second;
+      return (CubitStatus)unique;
     }
 
-    curve->position_from_fraction( 1.0, curve_pt );
-    if ( (curve_pt - coords).length_squared() < tolsqr )
+  CubitStatus AcisModifyEngine::reactivate_bridge( AcisBridge* bridge ) const
     {
-      start_flag = false;
-      return curve;
+      AcisModifyEngine* nonconst = AcisModifyEngine::instance();
+      int count = nonconst->deactivatedSet.erase(bridge);
+      return count > 0 ? CUBIT_SUCCESS : CUBIT_FAILURE;
     }
-  }
 
-  return 0;
-}
+  void AcisModifyEngine::cleanout_deactivated_geometry() const
+    {
+      AcisModifyEngine* nonconst = AcisModifyEngine::instance();
+      //  std::set<AcisBridge*>::iterator itor = nonconst->deactivatedSet.begin(),
+      //                                  end  = nonconst->deactivatedSet.end();
+      //  for ( ; itor != end; ++itor )
+      //    delete *itor;
 
-bool AcisModifyEngine::bridge_deactivated(AcisBridge* bridge) const
-{
-  return deactivatedSet.count(bridge) > 0;
-}
+      nonconst->deactivatedSet.clear();
+    }
 
-CubitStatus AcisModifyEngine::deactivate_bridge( AcisBridge* bridge ) const
-{
-  AcisModifyEngine* nonconst = AcisModifyEngine::instance();
-  bool unique = nonconst->deactivatedSet.insert(bridge).second;
-  return (CubitStatus)unique;
-}
-
-CubitStatus AcisModifyEngine::reactivate_bridge( AcisBridge* bridge ) const
-{
-  AcisModifyEngine* nonconst = AcisModifyEngine::instance();
-  int count = nonconst->deactivatedSet.erase(bridge);
-  return count > 0 ? CUBIT_SUCCESS : CUBIT_FAILURE;
-}
-
-void AcisModifyEngine::cleanout_deactivated_geometry() const
-{
-  AcisModifyEngine* nonconst = AcisModifyEngine::instance();
-//  std::set<AcisBridge*>::iterator itor = nonconst->deactivatedSet.begin(),
-//                                  end  = nonconst->deactivatedSet.end();
-//  for ( ; itor != end; ++itor )
-//    delete *itor;
-
-  nonconst->deactivatedSet.clear();
-}
-
-CubitStatus AcisModifyEngine::scale( BodySM *&body, const CubitVector& f )
-{
+  CubitStatus AcisModifyEngine::scale( BodySM *&body, const CubitVector& f )
+    {
 #if CUBIT_ACIS_VERSION < 1100
-  api_initialize_operators();
+      api_initialize_operators();
 #elif defined(WIN32) || defined(MACOSX)
-  api_initialize_warp();
+      api_initialize_warp();
 #endif
-   BODY *new_BODY = NULL;
+      BODY *new_BODY = NULL;
 
-  if( f.x() != f.y() ||
-      f.x() != f.z() ||
-      f.y() != f.z() )
-  {
-    BODY *tmp_BODY = AcisQueryEngine::get_BODY( body );
-    new_BODY = AcisModifyEngine::instance()->copy_BODY(tmp_BODY,
-                               GeometryModifyTool::instance()->get_new_ids());
-  }
+      if( f.x() != f.y() ||
+	  f.x() != f.z() ||
+	  f.y() != f.z() )
+	{
+	  BODY *tmp_BODY = AcisQueryEngine::get_BODY( body );
+	  new_BODY = AcisModifyEngine::instance()->copy_BODY(tmp_BODY,
+							     GeometryModifyTool::instance()->get_new_ids());
+	}
 
-  CubitStatus result = AcisQueryEngine::instance()->transform( new_BODY, scale_transf( f.x(), f.y(), f.z() ) );
+      CubitStatus result = AcisQueryEngine::instance()->transform( new_BODY, scale_transf( f.x(), f.y(), f.z() ) );
 
 #if CUBIT_ACIS_VERSION < 1100
-  api_terminate_operators();
+      api_terminate_operators();
 #elif defined(WIN32) || defined(MACOSX)
-  api_terminate_warp();
+      api_terminate_warp();
 #endif
 
-  if( new_BODY )
-  {
-    BODY *old_BODY = AcisQueryEngine::get_BODY( body );
-    BodySM *new_body = get_new_Body( body, old_BODY, new_BODY, false);
-    body = new_body;
-  }
+      if( new_BODY )
+	{
+	  BODY *old_BODY = AcisQueryEngine::get_BODY( body );
+	  BodySM *new_body = get_new_Body( body, old_BODY, new_BODY, false);
+	  body = new_body;
+	}
 
-  return result;
-}
+      return result;
+    }
 
-CubitStatus AcisModifyEngine::tolerant_imprint( DLIList<BodySM*> &bodies_in,
-                                                 DLIList<BodySM*> &new_bodies,
+  CubitStatus AcisModifyEngine::tolerant_imprint( DLIList<BodySM*> &bodies_in,
+						  DLIList<BodySM*> &new_bodies,
                                                   DLIList<TopologyBridge*> *new_tbs,
                                                   DLIList<TopologyBridge*> *att_tbs ) const
-{
-  //make sure all bodies are from the same modify engine
-  DLIList<BodySM*> new_body_list;
+    {
+      //make sure all bodies are from the same modify engine
+      DLIList<BodySM*> new_body_list;
 
-  ProgressTool *progress_tool = NULL;
-  if( bodies_in.size() > 2 )
-  {
-     progress_tool = AppUtil::instance()->progress_tool();
-     progress_tool->start(0, 100, "Tolerant Imprinting" );
-  }
+      ProgressTool *progress_tool = NULL;
+      if( bodies_in.size() > 2 )
+	{
+	  progress_tool = AppUtil::instance()->progress_tool();
+	  progress_tool->start(0, 100, "Tolerant Imprinting" );
+	}
 
-  CubitStatus status = imprint_overlapping_curves( bodies_in, new_body_list, progress_tool );
+      CubitStatus status = imprint_overlapping_curves( bodies_in, new_body_list, progress_tool );
 
-  status = imprint_overlapping_surfaces( bodies_in, new_body_list, progress_tool );
+      status = imprint_overlapping_surfaces( bodies_in, new_body_list, progress_tool );
 
-  status = imprint_overlapping_curves( bodies_in, new_body_list, progress_tool, new_tbs, att_tbs );
+      status = imprint_overlapping_curves( bodies_in, new_body_list, progress_tool, new_tbs, att_tbs );
 
-  if( progress_tool )
-    progress_tool->end();
+      if( progress_tool )
+	progress_tool->end();
 
-  return CUBIT_SUCCESS;
-}
+      return CUBIT_SUCCESS;
+    }
 
-CubitStatus AcisModifyEngine::imprint_overlapping_curves( DLIList<BodySM*> &body_sms,
-                                                          DLIList<BodySM*> &new_body_sms,
-                                                          ProgressTool *progress_tool,
-                                                          DLIList<TopologyBridge*> *new_tbs,
-                                                          DLIList<TopologyBridge*> *att_tbs ) const
-{
-  //find all mergeable curves between the bodies
-  CubitStatus status;
+  CubitStatus AcisModifyEngine::imprint_overlapping_curves( DLIList<BodySM*> &body_sms,
+							    DLIList<BodySM*> &new_body_sms,
+							    ProgressTool *progress_tool,
+							    DLIList<TopologyBridge*> *new_tbs,
+							    DLIList<TopologyBridge*> *att_tbs ) const
+    {
+      //find all mergeable curves between the bodies
+      CubitStatus status;
 #ifdef BOYD16
-  DLIList<RefEntity*> entities;
+      DLIList<RefEntity*> entities;
 #endif
-  DLIList< DLIList<Curve*>* > lists_of_mergeable_curves;
+      DLIList< DLIList<Curve*>* > lists_of_mergeable_curves;
 
-  status = MergeTool::instance()->find_only_mergeable_curves( body_sms, lists_of_mergeable_curves );
+      status = MergeTool::instance()->find_only_mergeable_curves( body_sms, lists_of_mergeable_curves );
   
-  int i,j;
-  //increment 4%
-  if( progress_tool )
-  {
-    for( i=4; i--; )
-      progress_tool->step();
-  }
+      int i,j;
+      //increment 4%
+      if( progress_tool )
+	{
+	  for( i=4; i--; )
+	    progress_tool->step();
+	}
 
-  //find all overlapping curves between the bodies
-  std::map<Curve*, DLIList<Curve*>* > curve_to_list_map;
-  DLIList< DLIList<Curve*>* > lists_of_overlapping_curves;
-  //for each list, curves 2-n overlap the first curve
+      //find all overlapping curves between the bodies
+      std::map<Curve*, DLIList<Curve*>* > curve_to_list_map;
+      DLIList< DLIList<Curve*>* > lists_of_overlapping_curves;
+      //for each list, curves 2-n overlap the first curve
   
-  SurfaceOverlapTool::instance()->find_overlapping_curves( body_sms, lists_of_overlapping_curves,
-                                                           curve_to_list_map );
+      SurfaceOverlapTool::instance()->find_overlapping_curves( body_sms, lists_of_overlapping_curves,
+							       curve_to_list_map );
 
-  //increment 8%
-  if( progress_tool )
-  {
-    for( i=9; i--; )
-      progress_tool->step();
-  }
+      //increment 8%
+      if( progress_tool )
+	{
+	  for( i=9; i--; )
+	    progress_tool->step();
+	}
 
-  //remove idential groups and sub-groups of mergeable curves from
-  //overlapping groups.  For example:  If curves A,B,C,D are in a mergeable group
-  //the following groups will have no need for imprinting, becasue the curves are
-  //mergeable all
-  //A,B,C,D
-  //B,C,D  is a sub-group
-  //C,D  is a sub-group
-  //These groups need not be considered for imprinting
+      //remove idential groups and sub-groups of mergeable curves from
+      //overlapping groups.  For example:  If curves A,B,C,D are in a mergeable group
+      //the following groups will have no need for imprinting, becasue the curves are
+      //mergeable all
+      //A,B,C,D
+      //B,C,D  is a sub-group
+      //C,D  is a sub-group
+      //These groups need not be considered for imprinting
 
-  std::map<Curve*, DLIList<Curve*>*>::iterator curve_iter;
-  lists_of_mergeable_curves.reset();
+      std::map<Curve*, DLIList<Curve*>*>::iterator curve_iter;
+      lists_of_mergeable_curves.reset();
 
-  DLIList< DLIList<Curve*>* > lists_to_delete;
+      DLIList< DLIList<Curve*>* > lists_to_delete;
 
-  for( i=lists_of_mergeable_curves.size(); i--; )
-  {
-    DLIList<Curve*> *mergeable_curve_list = lists_of_mergeable_curves.get_and_step();
+      for( i=lists_of_mergeable_curves.size(); i--; )
+	{
+	  DLIList<Curve*> *mergeable_curve_list = lists_of_mergeable_curves.get_and_step();
 
-    for( j=mergeable_curve_list->size(); j--; )
-    {
-      Curve *tmp_curve = mergeable_curve_list->get_and_step();
-      curve_iter = curve_to_list_map.find( tmp_curve );
+	  for( j=mergeable_curve_list->size(); j--; )
+	    {
+	      Curve *tmp_curve = mergeable_curve_list->get_and_step();
+	      curve_iter = curve_to_list_map.find( tmp_curve );
 
-      if( curve_iter == curve_to_list_map.end() )
-        continue;
+	      if( curve_iter == curve_to_list_map.end() )
+		continue;
 
-      DLIList<Curve*>* overlapping_curves = curve_iter->second;
+	      DLIList<Curve*>* overlapping_curves = curve_iter->second;
 
-      //make sure that list hasn't already been removed
-      if( lists_to_delete.move_to( overlapping_curves ) )
-        continue;
+	      //make sure that list hasn't already been removed
+	      if( lists_to_delete.move_to( overlapping_curves ) )
+		continue;
 
-      //don't want to perturb the list...make a copy
-      DLIList<Curve*> copy_list = *mergeable_curve_list;
+	      //don't want to perturb the list...make a copy
+	      DLIList<Curve*> copy_list = *mergeable_curve_list;
 
-      //if the list of overlapping curve is the same as the mergeable curve list,
-      //remove the list list of overlapping curves
+	      //if the list of overlapping curve is the same as the mergeable curve list,
+	      //remove the list list of overlapping curves
 
-      if( copy_list == *overlapping_curves )
-      {
-        //remove overlapping_curve_list from the list
-        lists_of_overlapping_curves.move_to( overlapping_curves );
-        lists_of_overlapping_curves.change_to( NULL );
+	      if( copy_list == *overlapping_curves )
+		{
+		  //remove overlapping_curve_list from the list
+		  lists_of_overlapping_curves.move_to( overlapping_curves );
+		  lists_of_overlapping_curves.change_to( NULL );
 
-        //put in list for deletion
-        lists_to_delete.append( overlapping_curves );
+		  //put in list for deletion
+		  lists_to_delete.append( overlapping_curves );
 
-        //remove overlapping_curve_list from the map
-        curve_to_list_map.erase( curve_iter );
-        continue;
-      }
-      else if (overlapping_curves->size() < copy_list.size() )
-      {
-        //If every curve in overlapping list is in the merge list,
-        //remove that overlapping list.
-        int list_size_before = copy_list.size();
-        copy_list.merge_unique( *overlapping_curves );
-        if( list_size_before == copy_list.size() )
-        {
-          //remove overlapping_curve_list from the list
-          lists_of_overlapping_curves.move_to( overlapping_curves );
-          lists_of_overlapping_curves.change_to( NULL );
+		  //remove overlapping_curve_list from the map
+		  curve_to_list_map.erase( curve_iter );
+		  continue;
+		}
+	      else if (overlapping_curves->size() < copy_list.size() )
+		{
+		  //If every curve in overlapping list is in the merge list,
+		  //remove that overlapping list.
+		  int list_size_before = copy_list.size();
+		  copy_list.merge_unique( *overlapping_curves );
+		  if( list_size_before == copy_list.size() )
+		    {
+		      //remove overlapping_curve_list from the list
+		      lists_of_overlapping_curves.move_to( overlapping_curves );
+		      lists_of_overlapping_curves.change_to( NULL );
 
-          //put in list for deletion
-          lists_to_delete.append( overlapping_curves );
-        }
-      }
-    }
-  }
+		      //put in list for deletion
+		      lists_to_delete.append( overlapping_curves );
+		    }
+		}
+	    }
+	}
 
-  //clean up lists
-  for( i=lists_of_mergeable_curves.size(); i--; )
-    delete lists_of_mergeable_curves.get_and_step();
-  lists_of_overlapping_curves.remove_all_with_value( NULL );
+      //clean up lists
+      for( i=lists_of_mergeable_curves.size(); i--; )
+	delete lists_of_mergeable_curves.get_and_step();
+      lists_of_overlapping_curves.remove_all_with_value( NULL );
 
-  for( i=lists_to_delete.size(); i--; )
-    delete lists_to_delete.get_and_step();
+      for( i=lists_to_delete.size(); i--; )
+	delete lists_to_delete.get_and_step();
 
-  double tolerance = GeometryQueryTool::get_geometry_factor()*GEOMETRY_RESABS;
+      double tolerance = GeometryQueryTool::get_geometry_factor()*GEOMETRY_RESABS;
 
-  DLIList<BodySM*> imprint_body_order;
-  lists_of_overlapping_curves.reset();
-  //Now setup multi-map for imprinting vertices onto bodies
-  //This is how the curve - vertex imprinting should be done:
-  // -imprint vertices of curve 1 in list onto curves 2 - n
-  // -imprint vertcies of curve 2 - n onto curve 1
-  std::multimap<BodySM*, CubitVector* > body_point_imprint_map;
-  std::multimap<BodySM*, CubitVector* >::iterator tmp_iter, upper_iter;
+      DLIList<BodySM*> imprint_body_order;
+      lists_of_overlapping_curves.reset();
+      //Now setup multi-map for imprinting vertices onto bodies
+      //This is how the curve - vertex imprinting should be done:
+      // -imprint vertices of curve 1 in list onto curves 2 - n
+      // -imprint vertcies of curve 2 - n onto curve 1
+      std::multimap<BodySM*, CubitVector* > body_point_imprint_map;
+      std::multimap<BodySM*, CubitVector* >::iterator tmp_iter, upper_iter;
 
-  for( i=lists_of_overlapping_curves.size(); i--; )
-  {
-    DLIList<Curve*> *curve_list = lists_of_overlapping_curves.get_and_step();
-    curve_list->reset();
-    Curve *first_curve = curve_list->get_and_step();
+      for( i=lists_of_overlapping_curves.size(); i--; )
+	{
+	  DLIList<Curve*> *curve_list = lists_of_overlapping_curves.get_and_step();
+	  curve_list->reset();
+	  Curve *first_curve = curve_list->get_and_step();
 
-    DLIList<Point*> curve_1_points;
-    first_curve->points( curve_1_points );
-    Point *s_point1 = curve_1_points.get_and_step();
-    Point *e_point1 = curve_1_points.get_and_step();
+	  DLIList<Point*> curve_1_points;
+	  first_curve->points( curve_1_points );
+	  Point *s_point1 = curve_1_points.get_and_step();
+	  Point *e_point1 = curve_1_points.get_and_step();
 
-    BodySM *first_curve_body = first_curve->bodysm();
+	  BodySM *first_curve_body = first_curve->bodysm();
 
-    while( curve_list->size() > 1 )
-    {
-      Curve *other_curve = curve_list->pop();
-      DLIList<Point*> curve_2_points;
-      other_curve->points( curve_2_points );
-      Point *s_point2 = curve_2_points.get_and_step();
-      Point *e_point2 = curve_2_points.get_and_step();
+	  while( curve_list->size() > 1 )
+	    {
+	      Curve *other_curve = curve_list->pop();
+	      DLIList<Point*> curve_2_points;
+	      other_curve->points( curve_2_points );
+	      Point *s_point2 = curve_2_points.get_and_step();
+	      Point *e_point2 = curve_2_points.get_and_step();
 
-      BodySM *other_curve_body = other_curve->bodysm();
+	      BodySM *other_curve_body = other_curve->bodysm();
 
-      CubitVector close_pt;
-      first_curve->closest_point_trimmed( s_point2->coordinates(), close_pt );
+	      CubitVector close_pt;
+	      first_curve->closest_point_trimmed( s_point2->coordinates(), close_pt );
 
-      if( close_pt.distance_between( s_point1->coordinates() ) > tolerance &&
-          close_pt.distance_between( e_point1->coordinates() ) > tolerance )
-      {
-        //are there any other points within tolerance to this point
-        //to be imprinted onto this body?
-        tmp_iter = body_point_imprint_map.find( first_curve_body );
-        bool consider_point = true;
-        if( tmp_iter != body_point_imprint_map.end() )
-        {
-          CubitVector *tmp_vec = tmp_iter->second;
-          upper_iter = body_point_imprint_map.upper_bound( tmp_iter->first );
+	      if( close_pt.distance_between( s_point1->coordinates() ) > tolerance &&
+		  close_pt.distance_between( e_point1->coordinates() ) > tolerance )
+		{
+		  //are there any other points within tolerance to this point
+		  //to be imprinted onto this body?
+		  tmp_iter = body_point_imprint_map.find( first_curve_body );
+		  bool consider_point = true;
+		  if( tmp_iter != body_point_imprint_map.end() )
+		    {
+		      CubitVector *tmp_vec = tmp_iter->second;
+		      upper_iter = body_point_imprint_map.upper_bound( tmp_iter->first );
           
-          for(; tmp_iter!=upper_iter; ++tmp_iter)
-          {
-            tmp_vec = tmp_iter->second;
-            if( close_pt.distance_between( *tmp_vec ) < tolerance )
-            {
-              consider_point = false;
-              break;
-            }
-          }
-        }
+		      for(; tmp_iter!=upper_iter; ++tmp_iter)
+			{
+			  tmp_vec = tmp_iter->second;
+			  if( close_pt.distance_between( *tmp_vec ) < tolerance )
+			    {
+			      consider_point = false;
+			      break;
+			    }
+			}
+		    }
 
-        if( consider_point ) 
-        {
-          //imprint body of curve1 with vertex at this location
-          CubitVector *tmp_vec = new CubitVector( close_pt );
-          body_point_imprint_map.insert( std::multimap<BodySM*,
-              CubitVector*>::value_type( first_curve_body, tmp_vec ));
-          imprint_body_order.append_unique( first_curve_body );
-        }
-      }
+		  if( consider_point ) 
+		    {
+		      //imprint body of curve1 with vertex at this location
+		      CubitVector *tmp_vec = new CubitVector( close_pt );
+		      body_point_imprint_map.insert( std::multimap<BodySM*,
+						     CubitVector*>::value_type( first_curve_body, tmp_vec ));
+		      imprint_body_order.append_unique( first_curve_body );
+		    }
+		}
 
-      first_curve->closest_point_trimmed( e_point2->coordinates(), close_pt );
+	      first_curve->closest_point_trimmed( e_point2->coordinates(), close_pt );
 
-      if( close_pt.distance_between( s_point1->coordinates() ) > tolerance &&
-          close_pt.distance_between( e_point1->coordinates() ) > tolerance )
-      {
-        //are there any other points within tolerance to this point
-        //to be imprinted onto this body?
-        tmp_iter = body_point_imprint_map.find( first_curve_body );
-        bool consider_point = true;
-        if( tmp_iter != body_point_imprint_map.end() )
-        {
-          CubitVector *tmp_vec = tmp_iter->second;
-          upper_iter = body_point_imprint_map.upper_bound( tmp_iter->first );
+	      if( close_pt.distance_between( s_point1->coordinates() ) > tolerance &&
+		  close_pt.distance_between( e_point1->coordinates() ) > tolerance )
+		{
+		  //are there any other points within tolerance to this point
+		  //to be imprinted onto this body?
+		  tmp_iter = body_point_imprint_map.find( first_curve_body );
+		  bool consider_point = true;
+		  if( tmp_iter != body_point_imprint_map.end() )
+		    {
+		      CubitVector *tmp_vec = tmp_iter->second;
+		      upper_iter = body_point_imprint_map.upper_bound( tmp_iter->first );
           
-          for(; tmp_iter!=upper_iter; ++tmp_iter)
-          {
-            tmp_vec = tmp_iter->second;
-            if( close_pt.distance_between( *tmp_vec ) < tolerance )
-            {
-              consider_point = false;
-              break;
-            }
-          }
-        }
+		      for(; tmp_iter!=upper_iter; ++tmp_iter)
+			{
+			  tmp_vec = tmp_iter->second;
+			  if( close_pt.distance_between( *tmp_vec ) < tolerance )
+			    {
+			      consider_point = false;
+			      break;
+			    }
+			}
+		    }
 
-        if( consider_point ) 
-        {
-          //imprint body of curve1 with vertex at this location
-          CubitVector *tmp_vec = new CubitVector( close_pt );
-          body_point_imprint_map.insert( std::multimap<BodySM*,
-              CubitVector*>::value_type( first_curve_body, tmp_vec ));
-          imprint_body_order.append_unique( first_curve_body );
-        }
-      }
+		  if( consider_point ) 
+		    {
+		      //imprint body of curve1 with vertex at this location
+		      CubitVector *tmp_vec = new CubitVector( close_pt );
+		      body_point_imprint_map.insert( std::multimap<BodySM*,
+						     CubitVector*>::value_type( first_curve_body, tmp_vec ));
+		      imprint_body_order.append_unique( first_curve_body );
+		    }
+		}
 
-      other_curve->closest_point_trimmed( s_point1->coordinates(), close_pt );
+	      other_curve->closest_point_trimmed( s_point1->coordinates(), close_pt );
 
-      if( close_pt.distance_between( s_point2->coordinates() ) > tolerance &&
-          close_pt.distance_between( e_point2->coordinates() ) > tolerance )
-      {
-        //are there any other points within tolerance to this point
-        //to be imprinted onto this body?
-        tmp_iter = body_point_imprint_map.find( other_curve_body );
-        bool consider_point = true;
-        if( tmp_iter != body_point_imprint_map.end() )
-        {
-          CubitVector *tmp_vec = tmp_iter->second;
-          upper_iter = body_point_imprint_map.upper_bound( tmp_iter->first );
+	      if( close_pt.distance_between( s_point2->coordinates() ) > tolerance &&
+		  close_pt.distance_between( e_point2->coordinates() ) > tolerance )
+		{
+		  //are there any other points within tolerance to this point
+		  //to be imprinted onto this body?
+		  tmp_iter = body_point_imprint_map.find( other_curve_body );
+		  bool consider_point = true;
+		  if( tmp_iter != body_point_imprint_map.end() )
+		    {
+		      CubitVector *tmp_vec = tmp_iter->second;
+		      upper_iter = body_point_imprint_map.upper_bound( tmp_iter->first );
           
-          for(; tmp_iter!=upper_iter; ++tmp_iter)
-          {
-            tmp_vec = tmp_iter->second;
-            if( close_pt.distance_between( *tmp_vec ) < tolerance )
-            {
-              consider_point = false;
-              break;
-            }
-          }
-        }
+		      for(; tmp_iter!=upper_iter; ++tmp_iter)
+			{
+			  tmp_vec = tmp_iter->second;
+			  if( close_pt.distance_between( *tmp_vec ) < tolerance )
+			    {
+			      consider_point = false;
+			      break;
+			    }
+			}
+		    }
 
-        if( consider_point ) 
-        {
-          //imprint body of curve1 with vertex at this location
-          CubitVector *tmp_vec = new CubitVector( close_pt );
-          body_point_imprint_map.insert( std::multimap<BodySM*,
-              CubitVector*>::value_type( other_curve_body, tmp_vec ));
-          imprint_body_order.append_unique( other_curve_body );
-        }
-      }
+		  if( consider_point ) 
+		    {
+		      //imprint body of curve1 with vertex at this location
+		      CubitVector *tmp_vec = new CubitVector( close_pt );
+		      body_point_imprint_map.insert( std::multimap<BodySM*,
+						     CubitVector*>::value_type( other_curve_body, tmp_vec ));
+		      imprint_body_order.append_unique( other_curve_body );
+		    }
+		}
 
-      other_curve->closest_point_trimmed( e_point1->coordinates(), close_pt );
+	      other_curve->closest_point_trimmed( e_point1->coordinates(), close_pt );
 
-      if( close_pt.distance_between( s_point2->coordinates() ) > tolerance &&
-          close_pt.distance_between( e_point2->coordinates() ) > tolerance )
-      {
-        //Are there already any other points within tolerance to this point
-        //to be imprinted onto this body?
-        //If so, don't imprint this point.
-        tmp_iter = body_point_imprint_map.find( other_curve_body );
-        bool consider_point = true;
-        if( tmp_iter != body_point_imprint_map.end() )
-        {
-          CubitVector *tmp_vec = tmp_iter->second;
-          upper_iter = body_point_imprint_map.upper_bound( tmp_iter->first );
+	      if( close_pt.distance_between( s_point2->coordinates() ) > tolerance &&
+		  close_pt.distance_between( e_point2->coordinates() ) > tolerance )
+		{
+		  //Are there already any other points within tolerance to this point
+		  //to be imprinted onto this body?
+		  //If so, don't imprint this point.
+		  tmp_iter = body_point_imprint_map.find( other_curve_body );
+		  bool consider_point = true;
+		  if( tmp_iter != body_point_imprint_map.end() )
+		    {
+		      CubitVector *tmp_vec = tmp_iter->second;
+		      upper_iter = body_point_imprint_map.upper_bound( tmp_iter->first );
           
-          for(; tmp_iter!=upper_iter; ++tmp_iter )
-          {
-            tmp_vec = tmp_iter->second;
-            if( close_pt.distance_between( *tmp_vec ) < tolerance )
-            {
-              consider_point = false;
-              break;
-            }
-          }
-        }
+		      for(; tmp_iter!=upper_iter; ++tmp_iter )
+			{
+			  tmp_vec = tmp_iter->second;
+			  if( close_pt.distance_between( *tmp_vec ) < tolerance )
+			    {
+			      consider_point = false;
+			      break;
+			    }
+			}
+		    }
 
-        if( consider_point ) 
-        {
-          //imprint body of curve1 with vertex at this location
-          CubitVector *tmp_vec = new CubitVector( close_pt );
-          body_point_imprint_map.insert( std::multimap<BodySM*,
-              CubitVector*>::value_type( other_curve_body, tmp_vec ));
-          imprint_body_order.append_unique( other_curve_body );
-        }
-      }
-    }
-  }
+		  if( consider_point ) 
+		    {
+		      //imprint body of curve1 with vertex at this location
+		      CubitVector *tmp_vec = new CubitVector( close_pt );
+		      body_point_imprint_map.insert( std::multimap<BodySM*,
+						     CubitVector*>::value_type( other_curve_body, tmp_vec ));
+		      imprint_body_order.append_unique( other_curve_body );
+		    }
+		}
+	    }
+	}
 
-  //Imprint Vertices-onto-Body
-  imprint_body_order.reset();
-  std::multimap<BodySM*, CubitVector*>::iterator point_iter, last_point_iter;
-  for( i=imprint_body_order.size(); i--; )
-  {
-    BodySM *tmp_body_sm = imprint_body_order.get_and_step();
-    DLIList<BodySM*> body_to_imprint;
-    body_to_imprint.append( tmp_body_sm );
+      //Imprint Vertices-onto-Body
+      imprint_body_order.reset();
+      std::multimap<BodySM*, CubitVector*>::iterator point_iter, last_point_iter;
+      for( i=imprint_body_order.size(); i--; )
+	{
+	  BodySM *tmp_body_sm = imprint_body_order.get_and_step();
+	  DLIList<BodySM*> body_to_imprint;
+	  body_to_imprint.append( tmp_body_sm );
 
-    DLIList<CubitVector*> points_to_imprint;
+	  DLIList<CubitVector*> points_to_imprint;
 
-    point_iter = body_point_imprint_map.find( tmp_body_sm );
-    last_point_iter = body_point_imprint_map.upper_bound( point_iter->first );
+	  point_iter = body_point_imprint_map.find( tmp_body_sm );
+	  last_point_iter = body_point_imprint_map.upper_bound( point_iter->first );
 
-    for(; point_iter!=last_point_iter; ++point_iter )
-      points_to_imprint.append( point_iter->second );
+	  for(; point_iter!=last_point_iter; ++point_iter )
+	    points_to_imprint.append( point_iter->second );
 
-    DLIList<BodySM*> new_bodies;
-    CubitStatus status = imprint( body_to_imprint, points_to_imprint, new_bodies, false, new_tbs, att_tbs );
-    if( new_bodies.size() )
-      new_body_sms.append( new_bodies.get() );
+	  DLIList<BodySM*> new_bodies;
+	  CubitStatus status = imprint( body_to_imprint, points_to_imprint, new_bodies, false, new_tbs, att_tbs );
+	  if( new_bodies.size() )
+	    new_body_sms.append( new_bodies.get() );
 
-    for( j=points_to_imprint.size(); j--; )
-      delete points_to_imprint.get_and_step();
-  }
+	  for( j=points_to_imprint.size(); j--; )
+	    delete points_to_imprint.get_and_step();
+	}
 
-  //increment 4%
-  if( progress_tool )
-  {
-    for( i=4; i--; )
-      progress_tool->step();
-  }
+      //increment 4%
+      if( progress_tool )
+	{
+	  for( i=4; i--; )
+	    progress_tool->step();
+	}
 
-  return CUBIT_SUCCESS;
-}
+      return CUBIT_SUCCESS;
+    }
 
-CubitStatus AcisModifyEngine::imprint_overlapping_surfaces( DLIList<BodySM*> &body_sms,
-                                                            DLIList<BodySM*> &new_body_sms,
-                                                            ProgressTool *progress_tool) const
-{
-  //Find all mergeable surfaces between the bodies
-  DLIList< DLIList<Surface*>* > lists_of_mergeable_surfaces;
-  CubitStatus status = MergeTool::instance()->
-      find_only_mergeable_surfaces( body_sms, lists_of_mergeable_surfaces );
+  CubitStatus AcisModifyEngine::imprint_overlapping_surfaces( DLIList<BodySM*> &body_sms,
+							      DLIList<BodySM*> &new_body_sms,
+							      ProgressTool *progress_tool) const
+    {
+      //Find all mergeable surfaces between the bodies
+      DLIList< DLIList<Surface*>* > lists_of_mergeable_surfaces;
+      CubitStatus status = MergeTool::instance()->
+	find_only_mergeable_surfaces( body_sms, lists_of_mergeable_surfaces );
 
-  if( progress_tool )
-    progress_tool->percent( 0.24 );
+      if( progress_tool )
+	progress_tool->percent( 0.24 );
 
-  //Find all overlapping surfaces between the bodies
-  DLIList<Surface*> overlapping_surfaces1;
-  DLIList<Surface*> overlapping_surfaces2;
-  SurfaceOverlapTool::instance()->
-    find_overlapping_surfaces( body_sms, overlapping_surfaces1, overlapping_surfaces2 );
+      //Find all overlapping surfaces between the bodies
+      DLIList<Surface*> overlapping_surfaces1;
+      DLIList<Surface*> overlapping_surfaces2;
+      SurfaceOverlapTool::instance()->
+	find_overlapping_surfaces( body_sms, overlapping_surfaces1, overlapping_surfaces2 );
 
-  if( progress_tool )
-    progress_tool->percent( 0.57 );
+      if( progress_tool )
+	progress_tool->percent( 0.57 );
 
-  //We only want the non-mergeable overlapping surfaces.
-  //Remove mergable surfaces from overlapping pairs.
-  int i, j, k;
-  for( i=lists_of_mergeable_surfaces.size(); i--; )
-  {
-    DLIList<Surface*> *tmp_surface_list = lists_of_mergeable_surfaces.get_and_step();
-    for( j=tmp_surface_list->size(); j--; )
-    {
-      Surface *tmp_surface = tmp_surface_list->get_and_step();
-      while( overlapping_surfaces1.move_to( tmp_surface ) )
-        overlapping_surfaces1.change_to(NULL);
-      while( overlapping_surfaces2.move_to( tmp_surface ) )
-        overlapping_surfaces2.change_to(NULL);
-    }
-    delete tmp_surface_list;
-  }
+      //We only want the non-mergeable overlapping surfaces.
+      //Remove mergable surfaces from overlapping pairs.
+      int i, j, k;
+      for( i=lists_of_mergeable_surfaces.size(); i--; )
+	{
+	  DLIList<Surface*> *tmp_surface_list = lists_of_mergeable_surfaces.get_and_step();
+	  for( j=tmp_surface_list->size(); j--; )
+	    {
+	      Surface *tmp_surface = tmp_surface_list->get_and_step();
+	      while( overlapping_surfaces1.move_to( tmp_surface ) )
+		overlapping_surfaces1.change_to(NULL);
+	      while( overlapping_surfaces2.move_to( tmp_surface ) )
+		overlapping_surfaces2.change_to(NULL);
+	    }
+	  delete tmp_surface_list;
+	}
 
-  if( progress_tool )
-    progress_tool->percent( 0.59 );
+      if( progress_tool )
+	progress_tool->percent( 0.59 );
 
-  //Surface A might be mergeable/overlapping with B and just ever-so-slightly
-  //overlapping with C. Get rid of C or other overlapping surfaces
-  //that might be in the list.
-  overlapping_surfaces1.reset();
-  overlapping_surfaces2.reset();
-  for( i=overlapping_surfaces1.size(); i--; )
-  {
-    Surface *tmp_surface1 = overlapping_surfaces1.get();
-    Surface *tmp_surface2 = overlapping_surfaces2.get();
+      //Surface A might be mergeable/overlapping with B and just ever-so-slightly
+      //overlapping with C. Get rid of C or other overlapping surfaces
+      //that might be in the list.
+      overlapping_surfaces1.reset();
+      overlapping_surfaces2.reset();
+      for( i=overlapping_surfaces1.size(); i--; )
+	{
+	  Surface *tmp_surface1 = overlapping_surfaces1.get();
+	  Surface *tmp_surface2 = overlapping_surfaces2.get();
     
-    if( tmp_surface1 != NULL )
-    {
-      if( tmp_surface2 == NULL )
-        overlapping_surfaces1.change_to(NULL);
-    }
-    else
-    {
-      if( tmp_surface2 != NULL )
-        overlapping_surfaces2.change_to(NULL);
-    }
+	  if( tmp_surface1 != NULL )
+	    {
+	      if( tmp_surface2 == NULL )
+		overlapping_surfaces1.change_to(NULL);
+	    }
+	  else
+	    {
+	      if( tmp_surface2 != NULL )
+		overlapping_surfaces2.change_to(NULL);
+	    }
 
-    overlapping_surfaces1.step();
-    overlapping_surfaces2.step();
-  }
+	  overlapping_surfaces1.step();
+	  overlapping_surfaces2.step();
+	}
 
-  overlapping_surfaces1.remove_all_with_value(NULL);
-  overlapping_surfaces2.remove_all_with_value(NULL);
+      overlapping_surfaces1.remove_all_with_value(NULL);
+      overlapping_surfaces2.remove_all_with_value(NULL);
 
-  if ( overlapping_surfaces1.size() != overlapping_surfaces2.size() )
-  {
-    PRINT_ERROR("Number of overlapping pairs of surfaces is wrong.\n");
-    return CUBIT_FAILURE;
-  }
+      if ( overlapping_surfaces1.size() != overlapping_surfaces2.size() )
+	{
+	  PRINT_ERROR("Number of overlapping pairs of surfaces is wrong.\n");
+	  return CUBIT_FAILURE;
+	}
 
-  if( progress_tool )
-    progress_tool->percent( 0.62 );
+      if( progress_tool )
+	progress_tool->percent( 0.62 );
 
-  // Make sure we are working with ACIS surfaces and not
-  // something at some higher level.
-  DLIList<Surface*> surfs_to_append1;
-  DLIList<Surface*> surfs_to_append2;
-  for(j=overlapping_surfaces1.size(); j--;)
-  {
-    Surface *s1 = overlapping_surfaces1.get();
-    Surface *s2 = overlapping_surfaces2.get();
+      // Make sure we are working with ACIS surfaces and not
+      // something at some higher level.
+      DLIList<Surface*> surfs_to_append1;
+      DLIList<Surface*> surfs_to_append2;
+      for(j=overlapping_surfaces1.size(); j--;)
+	{
+	  Surface *s1 = overlapping_surfaces1.get();
+	  Surface *s2 = overlapping_surfaces2.get();
 
-    GeometryQueryEngine *gqe1 = s1->get_geometry_query_engine();
-    GeometryQueryEngine *gqe2 = s2->get_geometry_query_engine();
+	  GeometryQueryEngine *gqe1 = s1->get_geometry_query_engine();
+	  GeometryQueryEngine *gqe2 = s2->get_geometry_query_engine();
 
-    DLIList<TopologyBridge*> tbs1, tbs2;
-    gqe1->get_underlying_surfaces(s1, tbs1);
-    gqe2->get_underlying_surfaces(s2, tbs2);
-    int num_surfs1 = tbs1.size();
-    int num_surfs2 = tbs2.size();
-    if(num_surfs1 > 0 || num_surfs2 > 0)
-    {
-      if(num_surfs1 == 0)
-      {
-        for(k=tbs2.size(); k--;)
-        {
-          surfs_to_append1.append(s1);
-          surfs_to_append2.append(dynamic_cast<Surface*>(tbs2.get_and_step()));
-        }
-      }
-      else if(num_surfs2 == 0)
-      {
-        for(k=tbs1.size(); k--;)
-        {
-          surfs_to_append2.append(s2);
-          surfs_to_append1.append(dynamic_cast<Surface*>(tbs1.get_and_step()));
-        }
-      }
-      else
-      {
-        for(k=tbs1.size(); k--;)
-        {
-          int u;
-          Surface *tmp1 = dynamic_cast<Surface*>(tbs1.get_and_step());
-          for(u=num_surfs2; u--;)
-          {
-            surfs_to_append1.append(tmp1);
-            surfs_to_append2.append(dynamic_cast<Surface*>(tbs2.get_and_step()));
-          }
-        }
-      }
-      overlapping_surfaces1.change_to(NULL);
-      overlapping_surfaces2.change_to(NULL);
-    }
+	  DLIList<TopologyBridge*> tbs1, tbs2;
+	  gqe1->get_underlying_surfaces(s1, tbs1);
+	  gqe2->get_underlying_surfaces(s2, tbs2);
+	  int num_surfs1 = tbs1.size();
+	  int num_surfs2 = tbs2.size();
+	  if(num_surfs1 > 0 || num_surfs2 > 0)
+	    {
+	      if(num_surfs1 == 0)
+		{
+		  for(k=tbs2.size(); k--;)
+		    {
+		      surfs_to_append1.append(s1);
+		      surfs_to_append2.append(dynamic_cast<Surface*>(tbs2.get_and_step()));
+		    }
+		}
+	      else if(num_surfs2 == 0)
+		{
+		  for(k=tbs1.size(); k--;)
+		    {
+		      surfs_to_append2.append(s2);
+		      surfs_to_append1.append(dynamic_cast<Surface*>(tbs1.get_and_step()));
+		    }
+		}
+	      else
+		{
+		  for(k=tbs1.size(); k--;)
+		    {
+		      int u;
+		      Surface *tmp1 = dynamic_cast<Surface*>(tbs1.get_and_step());
+		      for(u=num_surfs2; u--;)
+			{
+			  surfs_to_append1.append(tmp1);
+			  surfs_to_append2.append(dynamic_cast<Surface*>(tbs2.get_and_step()));
+			}
+		    }
+		}
+	      overlapping_surfaces1.change_to(NULL);
+	      overlapping_surfaces2.change_to(NULL);
+	    }
 
-    overlapping_surfaces1.step();
-    overlapping_surfaces2.step();
-  }
-  overlapping_surfaces1.remove_all_with_value(NULL);
-  overlapping_surfaces2.remove_all_with_value(NULL);
-  for(k=surfs_to_append1.size(); k--;)
-  {
-    overlapping_surfaces1.append(surfs_to_append1.get_and_step());
-    overlapping_surfaces2.append(surfs_to_append2.get_and_step());
-  }
+	  overlapping_surfaces1.step();
+	  overlapping_surfaces2.step();
+	}
+      overlapping_surfaces1.remove_all_with_value(NULL);
+      overlapping_surfaces2.remove_all_with_value(NULL);
+      for(k=surfs_to_append1.size(); k--;)
+	{
+	  overlapping_surfaces1.append(surfs_to_append1.get_and_step());
+	  overlapping_surfaces2.append(surfs_to_append2.get_and_step());
+	}
 
 
-  //Now that we have non-mergeable overlapping surface pairs, determine which
-  //curves of surface1 to imprint onto surface2 and vice versa.
-  //We eliminate curves between the 2 surfaces that overlap.
-  DLIList<Surface*> surface_ordering_list;
-  std::multimap<Surface*, Curve*> surface_curve_imprint_map;
-  overlapping_surfaces1.reset();
-  overlapping_surfaces2.reset();
+      //Now that we have non-mergeable overlapping surface pairs, determine which
+      //curves of surface1 to imprint onto surface2 and vice versa.
+      //We eliminate curves between the 2 surfaces that overlap.
+      DLIList<Surface*> surface_ordering_list;
+      std::multimap<Surface*, Curve*> surface_curve_imprint_map;
+      overlapping_surfaces1.reset();
+      overlapping_surfaces2.reset();
 
-  double tolerance = GeometryQueryTool::get_geometry_factor()*GEOMETRY_RESABS;
+      double tolerance = GeometryQueryTool::get_geometry_factor()*GEOMETRY_RESABS;
 
-  for( i=overlapping_surfaces1.size(); i--; )
-  {
-    Surface *overlapping_surface1 = overlapping_surfaces1.get_and_step();
-    Surface *overlapping_surface2 = overlapping_surfaces2.get_and_step();
+      for( i=overlapping_surfaces1.size(); i--; )
+	{
+	  Surface *overlapping_surface1 = overlapping_surfaces1.get_and_step();
+	  Surface *overlapping_surface2 = overlapping_surfaces2.get_and_step();
 
-    //get all the curves of the surfaces
-    DLIList<Curve*> curves2, curves1;
-    overlapping_surface2->curves( curves2 );
-    overlapping_surface1->curves( curves1 );
+	  //get all the curves of the surfaces
+	  DLIList<Curve*> curves2, curves1;
+	  overlapping_surface2->curves( curves2 );
+	  overlapping_surface1->curves( curves1 );
 
-    // Make sure we are working with ACIS curves 
-    // and not something at some higher level.
-    DLIList<Curve*> curves_to_remove;
-    DLIList<Curve*> curves_to_append;
-    curves2.reset();
-    for(j=curves2.size(); j--;)
-    {
-      Curve *c = curves2.get_and_step();
-      GeometryQueryEngine *gqe = c->get_geometry_query_engine();
-      DLIList<TopologyBridge*> tbs;
-      gqe->get_underlying_curves(c, tbs);
-      if(tbs.size() > 0)
-      {
-        curves_to_remove.append(c);
-        for(k=tbs.size(); k--;)
-          curves_to_append.append(dynamic_cast<Curve*>(tbs.get_and_step()));
-      }
-    }
-    curves2 -= curves_to_remove;
-    curves2 += curves_to_append;
-    curves_to_remove.clean_out();
-    curves_to_append.clean_out();
-    curves1.reset();
-    for(j=curves1.size(); j--;)
-    {
-      Curve *c = curves1.get_and_step();
-      GeometryQueryEngine *gqe = c->get_geometry_query_engine();
-      DLIList<TopologyBridge*> tbs;
-      gqe->get_underlying_curves(c, tbs);
-      if(tbs.size() > 0)
-      {
-        curves_to_remove.append(c);
-        for(k=tbs.size(); k--;)
-          curves_to_append.append(dynamic_cast<Curve*>(tbs.get_and_step()));
-      }
-    }
-    curves1 -= curves_to_remove;
-    curves1 += curves_to_append;
+	  // Make sure we are working with ACIS curves 
+	  // and not something at some higher level.
+	  DLIList<Curve*> curves_to_remove;
+	  DLIList<Curve*> curves_to_append;
+	  curves2.reset();
+	  for(j=curves2.size(); j--;)
+	    {
+	      Curve *c = curves2.get_and_step();
+	      GeometryQueryEngine *gqe = c->get_geometry_query_engine();
+	      DLIList<TopologyBridge*> tbs;
+	      gqe->get_underlying_curves(c, tbs);
+	      if(tbs.size() > 0)
+		{
+		  curves_to_remove.append(c);
+		  for(k=tbs.size(); k--;)
+		    curves_to_append.append(dynamic_cast<Curve*>(tbs.get_and_step()));
+		}
+	    }
+	  curves2 -= curves_to_remove;
+	  curves2 += curves_to_append;
+	  curves_to_remove.clean_out();
+	  curves_to_append.clean_out();
+	  curves1.reset();
+	  for(j=curves1.size(); j--;)
+	    {
+	      Curve *c = curves1.get_and_step();
+	      GeometryQueryEngine *gqe = c->get_geometry_query_engine();
+	      DLIList<TopologyBridge*> tbs;
+	      gqe->get_underlying_curves(c, tbs);
+	      if(tbs.size() > 0)
+		{
+		  curves_to_remove.append(c);
+		  for(k=tbs.size(); k--;)
+		    curves_to_append.append(dynamic_cast<Curve*>(tbs.get_and_step()));
+		}
+	    }
+	  curves1 -= curves_to_remove;
+	  curves1 += curves_to_append;
 
-    //Get bounding box for later
-    CubitBox bb_surf = overlapping_surface1->bounding_box();
+	  //Get bounding box for later
+	  CubitBox bb_surf = overlapping_surface1->bounding_box();
 
-    //remove overlapping curves between the 2 surfaces
-    for( j=curves2.size(); j--; )
-    {
-      Curve *tmp_curve = curves2.get();
+	  //remove overlapping curves between the 2 surfaces
+	  for( j=curves2.size(); j--; )
+	    {
+	      Curve *tmp_curve = curves2.get();
 
-      int k;
-      bool overlap = false;
-      for( k=curves1.size(); k--; )
-      {
-        if( curves1.get() )
-        {
-          Curve *tmp_curve_2 = curves1.get();
+	      int k;
+	      bool overlap = false;
+	      for( k=curves1.size(); k--; )
+		{
+		  if( curves1.get() )
+		    {
+		      Curve *tmp_curve_2 = curves1.get();
 
-          if( SurfaceOverlapTool::instance()->
-            check_overlap( tmp_curve, tmp_curve_2, NULL))
-          {
-            //They should be about spatially equal too!
-//            CubitSense dummy_sense;
-//            if( MergeTool::instance()->about_spatially_equal( curves1.get(), curves2.get(),
-//                      dummy_sense, GeometryQueryTool::get_geometry_factor() ) )
-//            {
-              curves1.change_to(NULL);
-              curves2.change_to(NULL);
-              overlap = true;
-              break;
-//            }
-          }
-        }
-        curves1.step();
-      }
-      if( overlap )
-      {
-        curves2.step();
-        continue;
-      }
+		      if( SurfaceOverlapTool::instance()->
+			  check_overlap( tmp_curve, tmp_curve_2, NULL))
+			{
+			  //They should be about spatially equal too!
+			  //            CubitSense dummy_sense;
+			  //            if( MergeTool::instance()->about_spatially_equal( curves1.get(), curves2.get(),
+			  //                      dummy_sense, GeometryQueryTool::get_geometry_factor() ) )
+			  //            {
+			  curves1.change_to(NULL);
+			  curves2.change_to(NULL);
+			  overlap = true;
+			  break;
+			  //            }
+			}
+		    }
+		  curves1.step();
+		}
+	      if( overlap )
+		{
+		  curves2.step();
+		  continue;
+		}
 
-      double distance;
-      CubitVector v1, v2;
+	      double distance;
+	      CubitVector v1, v2;
 
-      //bounding box check between curve and surface
-      CubitBox bb_curve = tmp_curve->bounding_box();
-      if( bb_surf.overlap( tolerance, bb_curve ) )
-      {
-        //measure distance between curve and surface
-        overlapping_surface1->get_geometry_query_engine()->entity_entity_distance(
-            overlapping_surface1, tmp_curve, v1, v2, distance );
+	      //bounding box check between curve and surface
+	      CubitBox bb_curve = tmp_curve->bounding_box();
+	      if( bb_surf.overlap( tolerance, bb_curve ) )
+		{
+		  //measure distance between curve and surface
+		  overlapping_surface1->get_geometry_query_engine()->entity_entity_distance(
+											    overlapping_surface1, tmp_curve, v1, v2, distance );
 
-        if( distance < tolerance )
-        {
-          //check multimap to make sure that this curve has not already
-          //been added (from another surface that shares it)
-          //or that is overlaps another curve in the multimap
-          std::pair< std::multimap<Surface*, Curve* >::iterator,
-                     std::multimap<Surface*, Curve* >::iterator > surface_curve_pair;
-          surface_curve_pair = surface_curve_imprint_map.equal_range( overlapping_surface1 );
+		  if( distance < tolerance )
+		    {
+		      //check multimap to make sure that this curve has not already
+		      //been added (from another surface that shares it)
+		      //or that is overlaps another curve in the multimap
+		      std::pair< std::multimap<Surface*, Curve* >::iterator,
+			std::multimap<Surface*, Curve* >::iterator > surface_curve_pair;
+		      surface_curve_pair = surface_curve_imprint_map.equal_range( overlapping_surface1 );
 
-          std::multimap<Surface*, Curve*>::iterator iter = surface_curve_pair.first;
-          std::multimap<Surface*, Curve*>::iterator end = surface_curve_pair.second;
-          bool match_found = false;
-          while( iter != end )
-          {
-            if( iter->second == tmp_curve )
-            {
-              match_found = true;
-              break;
-            }
+		      std::multimap<Surface*, Curve*>::iterator iter = surface_curve_pair.first;
+		      std::multimap<Surface*, Curve*>::iterator end = surface_curve_pair.second;
+		      bool match_found = false;
+		      while( iter != end )
+			{
+			  if( iter->second == tmp_curve )
+			    {
+			      match_found = true;
+			      break;
+			    }
 
-            if( SurfaceOverlapTool::instance()->check_overlap( iter->second, tmp_curve, NULL ) )
-            {
-              match_found = true;
-              break;
-            }
+			  if( SurfaceOverlapTool::instance()->check_overlap( iter->second, tmp_curve, NULL ) )
+			    {
+			      match_found = true;
+			      break;
+			    }
 
-            iter++;
-          }
+			  iter++;
+			}
 
-          if( match_found == false )
-          {
-            surface_curve_imprint_map.insert( std::multimap<Surface*, Curve*>::value_type(
-                        overlapping_surface1, tmp_curve ));
-            surface_ordering_list.append_unique( overlapping_surface1 );
-          }
-        }
-      }
-      curves2.step();
-    }
+		      if( match_found == false )
+			{
+			  surface_curve_imprint_map.insert( std::multimap<Surface*, Curve*>::value_type(
+													overlapping_surface1, tmp_curve ));
+			  surface_ordering_list.append_unique( overlapping_surface1 );
+			}
+		    }
+		}
+	      curves2.step();
+	    }
 
-    bb_surf = overlapping_surface2->bounding_box();
-    curves1.remove_all_with_value( NULL );
-    curves2.remove_all_with_value( NULL );
-    //insert body and copied curves into list
-    for( j=curves1.size(); j--; )
-    {
-      Curve *tmp_curve = curves1.get();
+	  bb_surf = overlapping_surface2->bounding_box();
+	  curves1.remove_all_with_value( NULL );
+	  curves2.remove_all_with_value( NULL );
+	  //insert body and copied curves into list
+	  for( j=curves1.size(); j--; )
+	    {
+	      Curve *tmp_curve = curves1.get();
 
-      double distance;
-      CubitVector v1, v2;
-      CubitBox bb_curve = tmp_curve->bounding_box();
-      //bounding box check between curve and surface
-      if( bb_surf.overlap( tolerance, bb_curve ) )
-      {
-        //measure distance between curve and surface
-        overlapping_surface2->get_geometry_query_engine()->entity_entity_distance(
-          overlapping_surface2, tmp_curve, v1, v2, distance );
+	      double distance;
+	      CubitVector v1, v2;
+	      CubitBox bb_curve = tmp_curve->bounding_box();
+	      //bounding box check between curve and surface
+	      if( bb_surf.overlap( tolerance, bb_curve ) )
+		{
+		  //measure distance between curve and surface
+		  overlapping_surface2->get_geometry_query_engine()->entity_entity_distance(
+											    overlapping_surface2, tmp_curve, v1, v2, distance );
 
-        if( distance < tolerance )
-        {
-          //check multimap to make sure that this curve has not already
-          //been added (from another surface that shares it)
-          //or that is overlaps another curve in the multimap
-          std::pair< std::multimap<Surface*, Curve* >::iterator,
-                     std::multimap<Surface*, Curve* >::iterator > surface_curve_pair;
-          surface_curve_pair = surface_curve_imprint_map.equal_range( overlapping_surface2 );
+		  if( distance < tolerance )
+		    {
+		      //check multimap to make sure that this curve has not already
+		      //been added (from another surface that shares it)
+		      //or that is overlaps another curve in the multimap
+		      std::pair< std::multimap<Surface*, Curve* >::iterator,
+			std::multimap<Surface*, Curve* >::iterator > surface_curve_pair;
+		      surface_curve_pair = surface_curve_imprint_map.equal_range( overlapping_surface2 );
 
-          std::multimap<Surface*, Curve*>::iterator end = surface_curve_pair.second;
-          std::multimap<Surface*, Curve*>::iterator iter = surface_curve_pair.first;
-          bool match_found = false;
-          while( iter != end )
-          {
-            if( iter->second == tmp_curve )
-            {
-              match_found = true;
-              break;
-            }
+		      std::multimap<Surface*, Curve*>::iterator end = surface_curve_pair.second;
+		      std::multimap<Surface*, Curve*>::iterator iter = surface_curve_pair.first;
+		      bool match_found = false;
+		      while( iter != end )
+			{
+			  if( iter->second == tmp_curve )
+			    {
+			      match_found = true;
+			      break;
+			    }
 
-            if( SurfaceOverlapTool::instance()->check_overlap( iter->second, tmp_curve, NULL ) )
-            {
-              match_found = true;
-              break;
-            }
+			  if( SurfaceOverlapTool::instance()->check_overlap( iter->second, tmp_curve, NULL ) )
+			    {
+			      match_found = true;
+			      break;
+			    }
 
-            iter++;
-          }
+			  iter++;
+			}
 
-          if( match_found == false )
-          {
-            surface_curve_imprint_map.insert( std::multimap<Surface*, Curve*>::value_type(
-                                overlapping_surface2, tmp_curve ));
-            surface_ordering_list.append_unique( overlapping_surface2 );
-          }
+		      if( match_found == false )
+			{
+			  surface_curve_imprint_map.insert( std::multimap<Surface*, Curve*>::value_type(
+													overlapping_surface2, tmp_curve ));
+			  surface_ordering_list.append_unique( overlapping_surface2 );
+			}
 
-        }
-      }
-      curves1.step();
-    }
-  }
+		    }
+		}
+	      curves1.step();
+	    }
+	}
 
-  if( progress_tool )
-    progress_tool->percent( 0.64 );
+      if( progress_tool )
+	progress_tool->percent( 0.64 );
 
-  //We cannot use the original curves for imprinting....they'll be
-  //getting modified.  Make copies of them here and build a new multimap
-  std::multimap<Surface*, Curve*>::iterator surf_curve_iter, surf_curve_last;
-  std::multimap<Surface*, Curve*> final_surface_curve_imprint_map;
-  for( surf_curve_iter = surface_curve_imprint_map.begin();
-       surf_curve_iter != surface_curve_imprint_map.end(); )
-  {
-    Surface *tmp_surf = surf_curve_iter->first;
-    surf_curve_last = surface_curve_imprint_map.upper_bound( tmp_surf );
+      //We cannot use the original curves for imprinting....they'll be
+      //getting modified.  Make copies of them here and build a new multimap
+      std::multimap<Surface*, Curve*>::iterator surf_curve_iter, surf_curve_last;
+      std::multimap<Surface*, Curve*> final_surface_curve_imprint_map;
+      for( surf_curve_iter = surface_curve_imprint_map.begin();
+	   surf_curve_iter != surface_curve_imprint_map.end(); )
+	{
+	  Surface *tmp_surf = surf_curve_iter->first;
+	  surf_curve_last = surface_curve_imprint_map.upper_bound( tmp_surf );
 
-    for(; surf_curve_iter!=surf_curve_last; ++surf_curve_iter )
-    {
-      Curve *copied_curve = make_Curve( surf_curve_iter->second );
-      final_surface_curve_imprint_map.insert( std::multimap<Surface*,
-                  Curve*>::value_type( tmp_surf, copied_curve ));
-    }
-  }
+	  for(; surf_curve_iter!=surf_curve_last; ++surf_curve_iter )
+	    {
+	      Curve *copied_curve = make_Curve( surf_curve_iter->second );
+	      final_surface_curve_imprint_map.insert( std::multimap<Surface*,
+						      Curve*>::value_type( tmp_surf, copied_curve ));
+	    }
+	}
 
-  if( progress_tool )
-    progress_tool->percent( 0.67 );
+      if( progress_tool )
+	progress_tool->percent( 0.67 );
 
-  double percentage_per_surface = 0;
-  double delta = 0;
+      double percentage_per_surface = 0;
+      double delta = 0;
 
-  if( progress_tool )
-  {
-    if( surface_ordering_list.size() )
-      percentage_per_surface = 0.16 / surface_ordering_list.size();
-    else
-      progress_tool->percent( 0.83 );
+      if( progress_tool )
+	{
+	  if( surface_ordering_list.size() )
+	    percentage_per_surface = 0.16 / surface_ordering_list.size();
+	  else
+	    progress_tool->percent( 0.83 );
 
-  }
+	}
 
-  //Now iterate of each surface that will be imprinted with curves.
-  surface_ordering_list.reset();
-  bool print_errors = false;
-  for( i=surface_ordering_list.size(); i--; )
-  {
-    if( progress_tool )
-    {
-      delta += percentage_per_surface;
-      progress_tool->percent( 0.67 + delta );
-    }
+      //Now iterate of each surface that will be imprinted with curves.
+      surface_ordering_list.reset();
+      bool print_errors = false;
+      for( i=surface_ordering_list.size(); i--; )
+	{
+	  if( progress_tool )
+	    {
+	      delta += percentage_per_surface;
+	      progress_tool->percent( 0.67 + delta );
+	    }
 
-    Surface *tmp_surface = surface_ordering_list.get_and_step();
+	  Surface *tmp_surface = surface_ordering_list.get_and_step();
 
-    surf_curve_iter = final_surface_curve_imprint_map.find( tmp_surface );
-    tmp_surface = surf_curve_iter->first;
+	  surf_curve_iter = final_surface_curve_imprint_map.find( tmp_surface );
+	  tmp_surface = surf_curve_iter->first;
 
-    DLIList<Surface*> surface_list;
-    surface_list.append( tmp_surface );
+	  DLIList<Surface*> surface_list;
+	  surface_list.append( tmp_surface );
 
-    DLIList<Curve*> curves_to_imprint;
-    surf_curve_last = final_surface_curve_imprint_map.upper_bound( surf_curve_iter->first );
-    //For each curve that might be imprinted on the surface...
+	  DLIList<Curve*> curves_to_imprint;
+	  surf_curve_last = final_surface_curve_imprint_map.upper_bound( surf_curve_iter->first );
+	  //For each curve that might be imprinted on the surface...
 
-     for(; surf_curve_iter!=surf_curve_last; ++surf_curve_iter )
-     {
-       DLIList<Curve*> tmp_curve_list1, tmp_curve_list2; 
-       Curve *original_curve = surf_curve_iter->second;
-       tmp_curve_list1.append( original_curve ); 
+	  for(; surf_curve_iter!=surf_curve_last; ++surf_curve_iter )
+	    {
+	      DLIList<Curve*> tmp_curve_list1, tmp_curve_list2; 
+	      Curve *original_curve = surf_curve_iter->second;
+	      tmp_curve_list1.append( original_curve ); 
 
-       //project
-       CubitStatus projected = project_edges( surface_list, tmp_curve_list1, tmp_curve_list2, print_errors );
+	      //project
+	      CubitStatus projected = project_edges( surface_list, tmp_curve_list1, tmp_curve_list2, print_errors );
 
-       if( projected == CUBIT_FAILURE )
-       {
-         AcisQueryEngine::instance()->delete_solid_model_entities( original_curve );
-         continue;
-       }
+	      if( projected == CUBIT_FAILURE )
+		{
+		  AcisQueryEngine::instance()->delete_solid_model_entities( original_curve );
+		  continue;
+		}
  
-       Curve *projected_curve = tmp_curve_list2.get(); 
+	      Curve *projected_curve = tmp_curve_list2.get(); 
        
-       //if midpoint of projected is far from original curve, continue 
-       CubitVector original_curve_mid_point = original_curve->center_point();
-       if( original_curve_mid_point.distance_between( projected_curve->center_point() ) > tolerance ) 
-       {
-         AcisQueryEngine::instance()->delete_solid_model_entities( original_curve );
-         AcisQueryEngine::instance()->delete_solid_model_entities( projected_curve );
-         continue;
-       }
+	      //if midpoint of projected is far from original curve, continue 
+	      CubitVector original_curve_mid_point = original_curve->center_point();
+	      if( original_curve_mid_point.distance_between( projected_curve->center_point() ) > tolerance ) 
+		{
+		  AcisQueryEngine::instance()->delete_solid_model_entities( original_curve );
+		  AcisQueryEngine::instance()->delete_solid_model_entities( projected_curve );
+		  continue;
+		}
         
-       //now intersect
-       tmp_curve_list1.clean_out();
-       CubitStatus intersected =  curve_surface_intersection( tmp_surface, projected_curve, tmp_curve_list1 ); 
+	      //now intersect
+	      tmp_curve_list1.clean_out();
+	      CubitStatus intersected =  curve_surface_intersection( tmp_surface, projected_curve, tmp_curve_list1 ); 
       
-       //delete the curves
-       AcisQueryEngine::instance()->delete_solid_model_entities( original_curve );
-       AcisQueryEngine::instance()->delete_solid_model_entities( projected_curve );
+	      //delete the curves
+	      AcisQueryEngine::instance()->delete_solid_model_entities( original_curve );
+	      AcisQueryEngine::instance()->delete_solid_model_entities( projected_curve );
 
-       if( intersected  == CUBIT_FAILURE) 
-         continue;
+	      if( intersected  == CUBIT_FAILURE) 
+		continue;
        
-       curves_to_imprint += tmp_curve_list1;
-     }
+	      curves_to_imprint += tmp_curve_list1;
+	    }
 
-     //filter out small curves
-     int j;
-     for( j=curves_to_imprint.size(); j--; )
-     {
-       Curve *tmp_curve = curves_to_imprint.get();
-       double curve_length = tmp_curve->measure();
-       if( curve_length < tolerance )
-       {
-         curves_to_imprint.change_to( NULL );
-         AcisQueryEngine::instance()->delete_solid_model_entities( tmp_curve ); 
-       }
-       curves_to_imprint.step();
-     }
-     curves_to_imprint.remove_all_with_value( NULL );
+	  //filter out small curves
+	  int j;
+	  for( j=curves_to_imprint.size(); j--; )
+	    {
+	      Curve *tmp_curve = curves_to_imprint.get();
+	      double curve_length = tmp_curve->measure();
+	      if( curve_length < tolerance )
+		{
+		  curves_to_imprint.change_to( NULL );
+		  AcisQueryEngine::instance()->delete_solid_model_entities( tmp_curve ); 
+		}
+	      curves_to_imprint.step();
+	    }
+	  curves_to_imprint.remove_all_with_value( NULL );
 
-    BodySM *new_body_sm = NULL;
+	  BodySM *new_body_sm = NULL;
 
-    //Now imprint the curves onto the surface
-    CubitStatus status;
-    if( curves_to_imprint.size() )
-    {
-/*
-      GfxDebug::clear();
-      AcisDrawTool::instance()->draw_surface( tmp_surface, 4, true);
-      GfxDebug::mouse_xforms();
-      int kkk;
-      PRINT_INFO("number of curve = %d\n", curves_to_imprint.size() );
-      for( kkk=curves_to_imprint.size(); kkk--; )
-      {
-        AcisDrawTool::instance()->draw_curve( curves_to_imprint.get_and_step(), kkk+5 );
-        GfxDebug::mouse_xforms();
-      }
-*/
-      status = embed_curves_into_surface( tmp_surface, curves_to_imprint, new_body_sm );
-    }
+	  //Now imprint the curves onto the surface
+	  CubitStatus status;
+	  if( curves_to_imprint.size() )
+	    {
+	      /*
+		GfxDebug::clear();
+		AcisDrawTool::instance()->draw_surface( tmp_surface, 4, true);
+		GfxDebug::mouse_xforms();
+		int kkk;
+		PRINT_INFO("number of curve = %d\n", curves_to_imprint.size() );
+		for( kkk=curves_to_imprint.size(); kkk--; )
+		{
+		AcisDrawTool::instance()->draw_curve( curves_to_imprint.get_and_step(), kkk+5 );
+		GfxDebug::mouse_xforms();
+		}
+	      */
+	      status = embed_curves_into_surface( tmp_surface, curves_to_imprint, new_body_sm );
+	    }
 
-    if( new_body_sm == NULL )
-      continue;
-    new_body_sms.append_unique( new_body_sm );
+	  if( new_body_sm == NULL )
+	    continue;
+	  new_body_sms.append_unique( new_body_sm );
 
-    //Delete all the curves that were imprinted.  We're responsible for deleting them.
-    for( j=curves_to_imprint.size(); j--; )
-      AcisQueryEngine::instance()->delete_solid_model_entities( curves_to_imprint.get_and_step() );
+	  //Delete all the curves that were imprinted.  We're responsible for deleting them.
+	  for( j=curves_to_imprint.size(); j--; )
+	    AcisQueryEngine::instance()->delete_solid_model_entities( curves_to_imprint.get_and_step() );
 
-  }
-  return CUBIT_SUCCESS;
-}
+	}
+      return CUBIT_SUCCESS;
+    }
 
 
-//WARNING!!! Only use this function if you KNOW that the curves you want
-//to imprint line on the surface.....otherwise you'll get problems.
-//api_embed_wire_in_faces returns unexpected results if the curve
-//does not lie on the surface.
-CubitStatus AcisModifyEngine::embed_curves_into_surface( Surface *surface,
+  //WARNING!!! Only use this function if you KNOW that the curves you want
+  //to imprint line on the surface.....otherwise you'll get problems.
+  //api_embed_wire_in_faces returns unexpected results if the curve
+  //does not lie on the surface.
+  CubitStatus AcisModifyEngine::embed_curves_into_surface( Surface *surface,
                                                            DLIList<Curve*> &curves_to_imprint,
                                                            BodySM *&new_body ) const
-{
-  if( curves_to_imprint.size() == 0 )
-    return CUBIT_FAILURE;
+    {
+      if( curves_to_imprint.size() == 0 )
+	return CUBIT_FAILURE;
 
-  BODY *copied_BODY = NULL;
-  DLIList<FACE*> imprint_FACE_list;
-  DLIList<SurfaceACIS*> acis_surfs;
-  SurfaceACIS *tmp_acis_surf = CAST_TO( surface, SurfaceACIS );
+      BODY *copied_BODY = NULL;
+      DLIList<FACE*> imprint_FACE_list;
+      DLIList<SurfaceACIS*> acis_surfs;
+      SurfaceACIS *tmp_acis_surf = CAST_TO( surface, SurfaceACIS );
 
-  if( tmp_acis_surf == NULL )
-    return CUBIT_FAILURE;
+      if( tmp_acis_surf == NULL )
+	return CUBIT_FAILURE;
 
-  FACE *FACE_ptr = tmp_acis_surf->get_FACE_ptr();
-  BODY *BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACE_ptr );
-  BodySM *old_body_sm = AcisQueryEngine::instance()->get_body_sm_of_ENTITY( FACE_ptr );
+      FACE *FACE_ptr = tmp_acis_surf->get_FACE_ptr();
+      BODY *BODY_ptr = AcisQueryEngine::instance()->get_BODY_of_ENTITY( FACE_ptr );
+      BodySM *old_body_sm = AcisQueryEngine::instance()->get_body_sm_of_ENTITY( FACE_ptr );
 
-  acis_surfs.append( tmp_acis_surf );
-  if( get_copied_FACES_of_body( acis_surfs, imprint_FACE_list, copied_BODY ) == CUBIT_FAILURE )
-    return CUBIT_FAILURE;
+      acis_surfs.append( tmp_acis_surf );
+      if( get_copied_FACES_of_body( acis_surfs, imprint_FACE_list, copied_BODY ) == CUBIT_FAILURE )
+	return CUBIT_FAILURE;
 
-  if( imprint_FACE_list.size() == 0 )
-    return CUBIT_FAILURE;
+      if( imprint_FACE_list.size() == 0 )
+	return CUBIT_FAILURE;
 
-  double tolerance = GeometryQueryTool::get_geometry_factor()*GEOMETRY_RESABS;
-  if( tolerance < 0.001 )
-    tolerance = 0.001;
+      double tolerance = GeometryQueryTool::get_geometry_factor()*GEOMETRY_RESABS;
+      if( tolerance < 0.001 )
+	tolerance = 0.001;
 
-  int i;
-  EDGE *EDGEs[ 1 ];
-  ENTITY_LIST wire_BODYs;
+      int i;
+      EDGE *EDGEs[ 1 ];
+      ENTITY_LIST wire_BODYs;
 #ifdef BOYD16
-  outcome tmp_result;
+      outcome tmp_result;
 #endif
-  for( i=0; i<curves_to_imprint.size(); i++ )
-  {
-    //copy
-    EDGE *EDGE_ptr = AcisQueryEngine::get_EDGE( curves_to_imprint.get_and_step() );
+      for( i=0; i<curves_to_imprint.size(); i++ )
+	{
+	  //copy
+	  EDGE *EDGE_ptr = AcisQueryEngine::get_EDGE( curves_to_imprint.get_and_step() );
 
-    EDGE *copied_EDGE_ptr = NULL;
-    outcome tmp_result = api_edge( EDGE_ptr, copied_EDGE_ptr );
-    ATTRIB_CUBIT_OWNER::remove_cubit_owner( (ENTITY *)copied_EDGE_ptr,
-                                              CUBIT_TRUE );
-    EDGEs[0] = copied_EDGE_ptr;
-    BODY *tmp_BODY = NULL;
-    tmp_result = api_make_ewire( 1, EDGEs, tmp_BODY );
-    wire_BODYs.add( (ENTITY*)tmp_BODY );
-  }
+	  EDGE *copied_EDGE_ptr = NULL;
+	  outcome tmp_result = api_edge( EDGE_ptr, copied_EDGE_ptr );
+	  ATTRIB_CUBIT_OWNER::remove_cubit_owner( (ENTITY *)copied_EDGE_ptr,
+						  CUBIT_TRUE );
+	  EDGEs[0] = copied_EDGE_ptr;
+	  BODY *tmp_BODY = NULL;
+	  tmp_result = api_make_ewire( 1, EDGEs, tmp_BODY );
+	  wire_BODYs.add( (ENTITY*)tmp_BODY );
+	}
 
-  int number_wire_bodies = wire_BODYs.count();
+      int number_wire_bodies = wire_BODYs.count();
 
-  if( number_wire_bodies == 0 )
-    return CUBIT_FAILURE;
+      if( number_wire_bodies == 0 )
+	return CUBIT_FAILURE;
 
-  BODY *wire_BODY_ptr = (BODY*)wire_BODYs[0];
+      BODY *wire_BODY_ptr = (BODY*)wire_BODYs[0];
 
-  ENTITY_LIST *face_list = new ENTITY_LIST;
-  FACE* imprint_FACE = imprint_FACE_list.get();
-  face_list->add( (ENTITY*)imprint_FACE );
+      ENTITY_LIST *face_list = new ENTITY_LIST;
+      FACE* imprint_FACE = imprint_FACE_list.get();
+      face_list->add( (ENTITY*)imprint_FACE );
 
-  ENTITY_LIST temp_face_list;
-  api_get_faces( copied_BODY, temp_face_list );
-  int number_faces_before = temp_face_list.count();
+      ENTITY_LIST temp_face_list;
+      api_get_faces( copied_BODY, temp_face_list );
+      int number_faces_before = temp_face_list.count();
 
-  API_BEGIN
-    result = api_embed_wire_in_faces( wire_BODY_ptr, copied_BODY, face_list, tolerance );
-  API_END
+      API_BEGIN
+	result = api_embed_wire_in_faces( wire_BODY_ptr, copied_BODY, face_list, tolerance );
+      API_END
 
-  for(i=1; i<number_wire_bodies; i++ )
-  {
+	for(i=1; i<number_wire_bodies; i++ )
+	  {
 #ifdef BOYD16
-    bool embedded = false;
+	    bool embedded = false;
 #endif
-    wire_BODY_ptr = (BODY*)wire_BODYs[i];
+	    wire_BODY_ptr = (BODY*)wire_BODYs[i];
 
-    //get all the faces on the body
-    ENTITY_LIST FACEs;
-    api_get_faces( copied_BODY, FACEs );
+	    //get all the faces on the body
+	    ENTITY_LIST FACEs;
+	    api_get_faces( copied_BODY, FACEs );
 
-    //if number of faces on body did not change, no face got split, and we can
-    //split the same FACE again.
-    if( number_faces_before == FACEs.count()  )
-    {
-      result = api_embed_wire_in_faces( wire_BODY_ptr, copied_BODY, face_list, tolerance );
-      continue;
-    }
+	    //if number of faces on body did not change, no face got split, and we can
+	    //split the same FACE again.
+	    if( number_faces_before == FACEs.count()  )
+	      {
+		result = api_embed_wire_in_faces( wire_BODY_ptr, copied_BODY, face_list, tolerance );
+		continue;
+	      }
 
-    //need to determine which face to embed curve onto
-    //may be able to remove this later on and just embed into body
-    //just embed the remining wires into the body
-    //result = api_embed_wire_in_faces( wire_BODY_ptr, copied_BODY, NULL, tolerance );
-    //if( !result.ok() )
-    //  AcisQueryEngine::instance()->ACIS_API_error (result);
+	    //need to determine which face to embed curve onto
+	    //may be able to remove this later on and just embed into body
+	    //just embed the remining wires into the body
+	    //result = api_embed_wire_in_faces( wire_BODY_ptr, copied_BODY, NULL, tolerance );
+	    //if( !result.ok() )
+	    //  AcisQueryEngine::instance()->ACIS_API_error (result);
 
-    //get midpoint of curve to embed
-    ENTITY_LIST wire_edge_list;
-    api_get_edges( wire_BODY_ptr, wire_edge_list );
-    EDGE *wire_edge = (EDGE*)wire_edge_list[0];
-    SPAposition mid_point = wire_edge->mid_pos();
+	    //get midpoint of curve to embed
+	    ENTITY_LIST wire_edge_list;
+	    api_get_edges( wire_BODY_ptr, wire_edge_list );
+	    EDGE *wire_edge = (EDGE*)wire_edge_list[0];
+	    SPAposition mid_point = wire_edge->mid_pos();
 
-    //get position at fraction 0.79 along curve
+	    //get position at fraction 0.79 along curve
 #ifdef BOYD16
-    SPAposition start_point = wire_edge->start()->geometry()->coords();
+	    SPAposition start_point = wire_edge->start()->geometry()->coords();
 #endif
-    SPAparameter s_param = wire_edge->start_param();
-    SPAparameter e_param = wire_edge->end_param();
+	    SPAparameter s_param = wire_edge->start_param();
+	    SPAparameter e_param = wire_edge->end_param();
 
-    //SPAinterval param_interval = wire_edge->param_range();
-    SPAparameter new_parameter = s_param + ((e_param - s_param ) * 0.79);
+	    //SPAinterval param_interval = wire_edge->param_range();
+	    SPAparameter new_parameter = s_param + ((e_param - s_param ) * 0.79);
 
-    if (wire_edge->sense() == REVERSED )
-      new_parameter = -(new_parameter);
+	    if (wire_edge->sense() == REVERSED )
+	      new_parameter = -(new_parameter);
 
-    SPAposition point_on_curve;
-    wire_edge->geometry()->equation().eval(new_parameter, point_on_curve );
+	    SPAposition point_on_curve;
+	    wire_edge->geometry()->equation().eval(new_parameter, point_on_curve );
 
-    //find surface which contains point at parameter 0.79 and midpoint
-    //loop to find appropriate face
-    ENTITY *temp_ENT;
-    FACEs.init();
-    FACE *embed_FACE = NULL;
-    while( (temp_ENT = FACEs.next()) != NULL )
-    {
-      FACE *tmp_FACE = (FACE*)temp_ENT;
-      SPAposition point1;
-      api_find_cls_ptto_face(mid_point, tmp_FACE, point1 );
-      if ( distance_to_point( point1, mid_point ) < 0.0005 )
-      {
-        api_find_cls_ptto_face(point_on_curve, tmp_FACE, point1 );
+	    //find surface which contains point at parameter 0.79 and midpoint
+	    //loop to find appropriate face
+	    ENTITY *temp_ENT;
+	    FACEs.init();
+	    FACE *embed_FACE = NULL;
+	    while( (temp_ENT = FACEs.next()) != NULL )
+	      {
+		FACE *tmp_FACE = (FACE*)temp_ENT;
+		SPAposition point1;
+		api_find_cls_ptto_face(mid_point, tmp_FACE, point1 );
+		if ( distance_to_point( point1, mid_point ) < 0.0005 )
+		  {
+		    api_find_cls_ptto_face(point_on_curve, tmp_FACE, point1 );
 
-        if ( distance_to_point( point1, point_on_curve ) < 0.0005 )
-        {
-          embed_FACE = tmp_FACE;
-          break;
-        }
-      }
-    }
-    if( embed_FACE )
-    {
-      face_list->clear();
-      face_list->add( (ENTITY*)embed_FACE );
-      result = api_embed_wire_in_faces( wire_BODY_ptr, copied_BODY, face_list, tolerance );
-    }
-  }
+		    if ( distance_to_point( point1, point_on_curve ) < 0.0005 )
+		      {
+			embed_FACE = tmp_FACE;
+			break;
+		      }
+		  }
+	      }
+	    if( embed_FACE )
+	      {
+		face_list->clear();
+		face_list->add( (ENTITY*)embed_FACE );
+		result = api_embed_wire_in_faces( wire_BODY_ptr, copied_BODY, face_list, tolerance );
+	      }
+	  }
   
-  AcisModifyEngine::instance()->cleanup_slivers( copied_BODY );
+      AcisModifyEngine::instance()->cleanup_slivers( copied_BODY );
 
-  //check to see if anything actually happened
-  int num_vol_bef, num_face_bef, num_edge_bef, num_vertex_bef;
-  CubitStatus status1 = AcisQueryEngine::instance()->number_ENTITIES( BODY_ptr, num_vol_bef,
-                                           num_face_bef, num_edge_bef,
-                                           num_vertex_bef );
+      //check to see if anything actually happened
+      int num_vol_bef, num_face_bef, num_edge_bef, num_vertex_bef;
+      CubitStatus status1 = AcisQueryEngine::instance()->number_ENTITIES( BODY_ptr, num_vol_bef,
+									  num_face_bef, num_edge_bef,
+									  num_vertex_bef );
 
-  int num_vol_aft, num_face_aft, num_edge_aft, num_vertex_aft;
-  CubitStatus status2 = AcisQueryEngine::instance()->number_ENTITIES( copied_BODY, num_vol_aft,
-                                           num_face_aft, num_edge_aft,
-                                           num_vertex_aft );
+      int num_vol_aft, num_face_aft, num_edge_aft, num_vertex_aft;
+      CubitStatus status2 = AcisQueryEngine::instance()->number_ENTITIES( copied_BODY, num_vol_aft,
+									  num_face_aft, num_edge_aft,
+									  num_vertex_aft );
 
-  if( status1 == CUBIT_FAILURE  ||
-      status2 == CUBIT_FAILURE )
-  {
-    return CUBIT_FAILURE;
-  }
+      if( status1 == CUBIT_FAILURE  ||
+	  status2 == CUBIT_FAILURE )
+	{
+	  return CUBIT_FAILURE;
+	}
 
-  if( num_vol_bef == num_vol_aft &&
-      num_face_bef == num_face_aft &&
-      num_edge_bef == num_edge_aft &&
-      num_vertex_bef == num_vertex_aft)
-  {
-    AcisQueryEngine::instance()->delete_ACIS_BODY(copied_BODY, CUBIT_TRUE);
-    return CUBIT_SUCCESS;
-  }
+      if( num_vol_bef == num_vol_aft &&
+	  num_face_bef == num_face_aft &&
+	  num_edge_bef == num_edge_aft &&
+	  num_vertex_bef == num_vertex_aft)
+	{
+	  AcisQueryEngine::instance()->delete_ACIS_BODY(copied_BODY, CUBIT_TRUE);
+	  return CUBIT_SUCCESS;
+	}
 
-  BodySM* new_body_ptr = get_new_Body( old_body_sm, BODY_ptr, copied_BODY,
-                                       false, CUBIT_TRUE );
+      BodySM* new_body_ptr = get_new_Body( old_body_sm, BODY_ptr, copied_BODY,
+					   false, CUBIT_TRUE );
 
-  new_body = new_body_ptr;
-  return CUBIT_SUCCESS;
-}
+      new_body = new_body_ptr;
+      return CUBIT_SUCCESS;
+    }
 
-CubitStatus AcisModifyEngine::curve_surface_intersection( Surface *surface,
-                                            Curve* curve,
-                                            DLIList<Curve*> &new_curves ) const
-{
-  FACE *FACE_ptr = AcisQueryEngine::get_FACE( surface );
-  EDGE *EDGE_ptr = AcisQueryEngine::get_EDGE( curve );
+  CubitStatus AcisModifyEngine::curve_surface_intersection( Surface *surface,
+							    Curve* curve,
+							    DLIList<Curve*> &new_curves ) const
+    {
+      FACE *FACE_ptr = AcisQueryEngine::get_FACE( surface );
+      EDGE *EDGE_ptr = AcisQueryEngine::get_EDGE( curve );
 
-  ENTITY_LIST *ent_list = new ENTITY_LIST;
+      ENTITY_LIST *ent_list = new ENTITY_LIST;
 
-  outcome result = api_edfa_int( EDGE_ptr, FACE_ptr, ent_list );
+      outcome result = api_edfa_int( EDGE_ptr, FACE_ptr, ent_list );
 
-  if( !result.ok() || ent_list->count() == 0 )
-  {
-    delete ent_list;
-    return CUBIT_FAILURE;
-  }
+      if( !result.ok() || ent_list->count() == 0 )
+	{
+	  delete ent_list;
+	  return CUBIT_FAILURE;
+	}
 
-  ENTITY *tmp_ent;
-  ent_list->init();
-  while( (tmp_ent=ent_list->next()) != NULL )
-  {
-    if( is_EDGE( tmp_ent ) )
-    {
-      EDGE_ptr = static_cast<EDGE*>(tmp_ent);
-      Curve *curve_ptr = AcisQueryEngine::instance()->populate_topology_bridges(EDGE_ptr);
-      new_curves.append( curve_ptr );
-    }
-  }
-  delete ent_list;
+      ENTITY *tmp_ent;
+      ent_list->init();
+      while( (tmp_ent=ent_list->next()) != NULL )
+	{
+	  if( is_EDGE( tmp_ent ) )
+	    {
+	      EDGE_ptr = static_cast<EDGE*>(tmp_ent);
+	      Curve *curve_ptr = AcisQueryEngine::instance()->populate_topology_bridges(EDGE_ptr);
+	      new_curves.append( curve_ptr );
+	    }
+	}
+      delete ent_list;
 
-  if( new_curves.size() == 0 )
-    return CUBIT_FAILURE;
+      if( new_curves.size() == 0 )
+	return CUBIT_FAILURE;
 
-  return CUBIT_SUCCESS;
-}
+      return CUBIT_SUCCESS;
+    }
 
-void AcisModifyEngine::get_new_ENTITIES(ENTITY *top_ENTITY, DLIList<ENTITY*> &new_ENTITIES) const
-{
-  ENTITY_LIST ENTITIES;
-  int i;
-  
-  // vertices
-  api_get_vertices( top_ENTITY, ENTITIES);
-  for (i = 0; i < ENTITIES.count(); i++)
-  {
-    if (!ATTRIB_CUBIT_OWNER::cubit_owner(ENTITIES[i]))
+  void AcisModifyEngine::get_new_ENTITIES(ENTITY *top_ENTITY, DLIList<ENTITY*> &new_ENTITIES) const
     {
+      ENTITY_LIST ENTITIES;
+      int i;
+  
+      // vertices
+      api_get_vertices( top_ENTITY, ENTITIES);
+      for (i = 0; i < ENTITIES.count(); i++)
+	{
+	  if (!ATTRIB_CUBIT_OWNER::cubit_owner(ENTITIES[i]))
+	    {
+	      new_ENTITIES.append_unique(ENTITIES[i]);
+	    }
+	}
+      ENTITIES.clear();
+
+      // edges
+      api_get_edges( top_ENTITY, ENTITIES);
+      for (i = 0; i < ENTITIES.count(); i++)
+	{
+	  if (!ATTRIB_CUBIT_OWNER::cubit_owner(ENTITIES[i]))
+	    {
+	      new_ENTITIES.append_unique(ENTITIES[i]);
+	    }
+	}
+      ENTITIES.clear();
+      /*
+      // faces
+      api_get_faces( top_ENTITY, ENTITIES);
+      for (i = 0; i < ENTITIES.count(); i++)
+      {
+      if (!ATTRIB_CUBIT_OWNER::cubit_owner(ENTITIES[i]))
+      {
       new_ENTITIES.append_unique(ENTITIES[i]);
+      }
+      }
+      ENTITIES.clear();
+      */
     }
-  }
-  ENTITIES.clear();
 
-  // edges
-  api_get_edges( top_ENTITY, ENTITIES);
-  for (i = 0; i < ENTITIES.count(); i++)
-  {
-    if (!ATTRIB_CUBIT_OWNER::cubit_owner(ENTITIES[i]))
+  void AcisModifyEngine::get_att_ENTITIES(ENTITY *top_ENTITY, DLIList<ENTITY*> &att_ENTITIES, char *att_name) const
     {
-      new_ENTITIES.append_unique(ENTITIES[i]);
-    }
-  }
-  ENTITIES.clear();
-/*
-  // faces
-  api_get_faces( top_ENTITY, ENTITIES);
-  for (i = 0; i < ENTITIES.count(); i++)
-  {
-    if (!ATTRIB_CUBIT_OWNER::cubit_owner(ENTITIES[i]))
-    {
-      new_ENTITIES.append_unique(ENTITIES[i]);
-    }
-  }
-  ENTITIES.clear();
-  */
-}
+      ENTITY_LIST ENTITIES;
+      int i;
+      // vertices
+      api_get_vertices( top_ENTITY, ENTITIES);
+      for (i = 0; i < ENTITIES.count(); i++)
+	{
+	  ATTRIB_SNL_SIMPLE *attribute =
+	    (ATTRIB_SNL_SIMPLE *) find_attrib(ENTITIES[i], 
+					      ATTRIB_SNL_TYPE,
+					      ATTRIB_SNL_SIMPLE_TYPE);
+	  for(;attribute != NULL;attribute = (ATTRIB_SNL_SIMPLE *)
+		find_next_attrib(attribute,
+				 ATTRIB_SNL_TYPE,
+				 ATTRIB_SNL_SIMPLE_TYPE))
+	    {
+	      if( attribute->attribute_name() == att_name )
+		att_ENTITIES.append_unique(ENTITIES[i]);
+	    }
+	}
+      ENTITIES.clear();
 
-void AcisModifyEngine::get_att_ENTITIES(ENTITY *top_ENTITY, DLIList<ENTITY*> &att_ENTITIES, char *att_name) const
-{
-  ENTITY_LIST ENTITIES;
-  int i;
-  // vertices
-  api_get_vertices( top_ENTITY, ENTITIES);
-  for (i = 0; i < ENTITIES.count(); i++)
-  {
-    ATTRIB_SNL_SIMPLE *attribute =
+      // edges
+      api_get_edges( top_ENTITY, ENTITIES);
+      for (i = 0; i < ENTITIES.count(); i++)
+	{
+	  ATTRIB_SNL_SIMPLE *attribute =
+	    (ATTRIB_SNL_SIMPLE *) find_attrib(ENTITIES[i], 
+					      ATTRIB_SNL_TYPE,
+					      ATTRIB_SNL_SIMPLE_TYPE);
+	  for(;attribute != NULL;attribute = (ATTRIB_SNL_SIMPLE *)
+		find_next_attrib(attribute,
+				 ATTRIB_SNL_TYPE,
+				 ATTRIB_SNL_SIMPLE_TYPE))
+	    {
+	      if( attribute->attribute_name() == att_name )
+		att_ENTITIES.append_unique(ENTITIES[i]);
+	    }
+	}
+      ENTITIES.clear();
+      /*
+      // faces
+      api_get_faces( top_ENTITY, ENTITIES);
+      for (i = 0; i < ENTITIES.count(); i++)
+      {
+      ATTRIB_SNL_SIMPLE *attribute =
       (ATTRIB_SNL_SIMPLE *) find_attrib(ENTITIES[i], 
-                                        ATTRIB_SNL_TYPE,
-                                        ATTRIB_SNL_SIMPLE_TYPE);
-    for(;attribute != NULL;attribute = (ATTRIB_SNL_SIMPLE *)
-          find_next_attrib(attribute,
-                          ATTRIB_SNL_TYPE,
-                          ATTRIB_SNL_SIMPLE_TYPE))
-    {
+      ATTRIB_SNL_TYPE,
+      ATTRIB_SNL_SIMPLE_TYPE);
+      for(;attribute != NULL;attribute = (ATTRIB_SNL_SIMPLE *)
+      find_next_attrib(attribute,
+      ATTRIB_SNL_TYPE,
+      ATTRIB_SNL_SIMPLE_TYPE))
+      {
       if( attribute->attribute_name() == att_name )
-        att_ENTITIES.append_unique(ENTITIES[i]);
+      att_ENTITIES.append_unique(ENTITIES[i]);
+      }
+      }
+      ENTITIES.clear();
+      */
     }
-  }
-  ENTITIES.clear();
 
-  // edges
-  api_get_edges( top_ENTITY, ENTITIES);
-  for (i = 0; i < ENTITIES.count(); i++)
-  {
-    ATTRIB_SNL_SIMPLE *attribute =
-      (ATTRIB_SNL_SIMPLE *) find_attrib(ENTITIES[i], 
-                                        ATTRIB_SNL_TYPE,
-                                        ATTRIB_SNL_SIMPLE_TYPE);
-    for(;attribute != NULL;attribute = (ATTRIB_SNL_SIMPLE *)
-          find_next_attrib(attribute,
-                          ATTRIB_SNL_TYPE,
-                          ATTRIB_SNL_SIMPLE_TYPE))
+  CubitStatus AcisModifyEngine::cleanup_slivers( BODY *body_to_cleanup )
     {
-      if( attribute->attribute_name() == att_name )
-        att_ENTITIES.append_unique(ENTITIES[i]);
+      double sliver_curve_tol = GeometryQueryTool::get_sliver_curve_cleanup_tolerance();
+      double sliver_surface_tol = GeometryQueryTool::get_sliver_surface_cleanup_tolerance();
+
+      ENTITY_LIST dummy_list;
+      api_detect_short_edges( body_to_cleanup, dummy_list, sliver_curve_tol, true );
+      api_detect_sliver_faces( body_to_cleanup, dummy_list, sliver_surface_tol, true );
+
+      return CUBIT_SUCCESS;
     }
-  }
-  ENTITIES.clear();
-/*
-  // faces
-  api_get_faces( top_ENTITY, ENTITIES);
-  for (i = 0; i < ENTITIES.count(); i++)
-  {
-    ATTRIB_SNL_SIMPLE *attribute =
-      (ATTRIB_SNL_SIMPLE *) find_attrib(ENTITIES[i], 
-                                        ATTRIB_SNL_TYPE,
-                                        ATTRIB_SNL_SIMPLE_TYPE);
-    for(;attribute != NULL;attribute = (ATTRIB_SNL_SIMPLE *)
-          find_next_attrib(attribute,
-                          ATTRIB_SNL_TYPE,
-                          ATTRIB_SNL_SIMPLE_TYPE))
+
+  CubitStatus AcisModifyEngine::remove_curve_slivers( BodySM *body_sm, 
+						      double lengthlimit ) const
     {
-      if( attribute->attribute_name() == att_name )
-        att_ENTITIES.append_unique(ENTITIES[i]);
-    }
-  }
-  ENTITIES.clear();
-  */
-}
+      //get the BODY
+      BodyACIS *tmp_body_acis = CAST_TO(body_sm, BodyACIS );
+      BODY *tmp_BODY = tmp_body_acis->get_BODY_ptr();
 
-CubitStatus AcisModifyEngine::cleanup_slivers( BODY *body_to_cleanup )
-{
-   double sliver_curve_tol = GeometryQueryTool::get_sliver_curve_cleanup_tolerance();
-   double sliver_surface_tol = GeometryQueryTool::get_sliver_surface_cleanup_tolerance();
+      //copy the BODY 
+      BODY *copy_BODY = AcisModifyEngine::instance()->copy_BODY( tmp_BODY, false );
 
-   ENTITY_LIST dummy_list;
-   api_detect_short_edges( body_to_cleanup, dummy_list, sliver_curve_tol, true );
-   api_detect_sliver_faces( body_to_cleanup, dummy_list, sliver_surface_tol, true );
+      //remove the slivers
+      ENTITY_LIST removed_curves;
+      outcome result = api_detect_short_edges( copy_BODY, removed_curves, lengthlimit, true );
 
-   return CUBIT_SUCCESS;
-}
+      if( !result.ok() )
+	{
+	  PRINT_ERROR("Problem remove sliver curves\n");
+	  AcisQueryEngine::instance()->ACIS_API_error (result);
+	  api_delent( (ENTITY*)copy_BODY );
+	  return CUBIT_FAILURE;
+	}
 
-CubitStatus AcisModifyEngine::remove_curve_slivers( BodySM *body_sm, 
-                                                    double lengthlimit ) const
-{
-  //get the BODY
-  BodyACIS *tmp_body_acis = CAST_TO(body_sm, BodyACIS );
-  BODY *tmp_BODY = tmp_body_acis->get_BODY_ptr();
+      TopologyEntity *te = body_sm->topology_entity();
+      RefEntity *ref_ent = CAST_TO( te, RefEntity ); 
+      PRINT_INFO("Removed %d sliver curves on body %d\n",
+		 removed_curves.count(), ref_ent->id() );
 
-  //copy the BODY 
-  BODY *copy_BODY = AcisModifyEngine::instance()->copy_BODY( tmp_BODY, false );
+      if( removed_curves.count() == 0 )
+	{
+	  api_delent( (ENTITY*)copy_BODY );
+	  return CUBIT_SUCCESS;
+	}
+  
+      get_new_Body(body_sm, tmp_BODY, copy_BODY, CUBIT_FALSE);
 
-  //remove the slivers
-  ENTITY_LIST removed_curves;
-  outcome result = api_detect_short_edges( copy_BODY, removed_curves, lengthlimit, true );
+      return CUBIT_SUCCESS;
+    }
 
-  if( !result.ok() )
-  {
-    PRINT_ERROR("Problem remove sliver curves\n");
-    AcisQueryEngine::instance()->ACIS_API_error (result);
-    api_delent( (ENTITY*)copy_BODY );
-    return CUBIT_FAILURE;
-  }
+  CubitStatus AcisModifyEngine::stitch_surfs(
+					     DLIList<BodySM*>& surf_bodies,
+					     BodySM*& stitched_body)const
+    {
+      stitched_body = NULL;
+      if (surf_bodies.size()==0)
+	return CUBIT_SUCCESS;
 
-  TopologyEntity *te = body_sm->topology_entity();
-  RefEntity *ref_ent = CAST_TO( te, RefEntity ); 
-  PRINT_INFO("Removed %d sliver curves on body %d\n",
-            removed_curves.count(), ref_ent->id() );
+      if (surf_bodies.size()==1)
+	{
+	  stitched_body = surf_bodies.get();
+	  return CUBIT_SUCCESS;
+	}
 
-  if( removed_curves.count() == 0 )
-  {
-    api_delent( (ENTITY*)copy_BODY );
-    return CUBIT_SUCCESS;
-  }
+      BODY* tool_BODY = NULL;
+      BodySM * tool_body;
+      DLIList<FACE*> stitch_FACES;
+      for(int i=0; i < surf_bodies.size();i++)
+	{
+	  tool_body = surf_bodies.get_and_step();
+	  tool_BODY = AcisQueryEngine::get_BODY( const_cast<BodySM*>(tool_body) );
+	  FACE *FACE_ptr = tool_BODY->lump()->shell()->first_face();
+	  stitch_FACES.append( FACE_ptr );
+	}
+
+      CubitStatus status; 
+      //stitch FACEs together into one BODY
+      //they may not stitch into one single FACE...
   
-  get_new_Body(body_sm, tmp_BODY, copy_BODY, CUBIT_FALSE);
+      tool_BODY = NULL;
+  
+      FACE *dummy_FACE = NULL;
+      
+      status = stitch_FACEs(stitch_FACES , dummy_FACE, tool_BODY );
 
-  return CUBIT_SUCCESS;
-}
+      if( status == CUBIT_FAILURE )
+	{
+	  PRINT_ERROR("Stitch faces produce surfaces that cannot be stitched together.\n");
+      
+	  return CUBIT_FAILURE;
+	}
+  
+
+      //get rid of any unnecessary edges
+      api_clean_entity( (ENTITY*)tool_BODY);
+
+      stitched_body =  AcisQueryEngine::instance()->populate_topology_bridges(tool_BODY);
+
+      return CUBIT_SUCCESS;
+    }
+
+  CubitStatus AcisModifyEngine::trim_up_to_next_surface(BodySM*& tool_body,
+							DLIList<BodySM*> bodies,
+							GeometryEntity * surf_vert)
+    {
+      assert(tool_body);
+      assert(surf_vert);
+      BODY* tool_BODY = AcisQueryEngine::get_BODY( tool_body );
+      if (tool_BODY == NULL)
+	return CUBIT_FAILURE;
+
+      Point * vertex = CAST_TO(surf_vert, Point);
+      if (!vertex)
+	return CUBIT_FAILURE;
+      VERTEX * VERTEX_ptr = AcisQueryEngine::get_VERTEX(vertex);
+
+      CubitStatus stat= trim_up_to_next_surface(tool_BODY, bodies, VERTEX_ptr); 
+      if (stat)
+	tool_body =  AcisQueryEngine::instance()->populate_topology_bridges(tool_BODY);
+
+      return stat;
+    }

Modified: cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.hpp
===================================================================
--- cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.hpp	2007-08-24 20:05:52 UTC (rev 1252)
+++ cgm/trunk/geom/ACIS_SRC/AcisModifyEngine.hpp	2007-08-24 20:43:22 UTC (rev 1253)
@@ -202,14 +202,17 @@
     //- Returns the ID of the new Body or CUBIT_FAILURE
 
   virtual BodySM* cylinder( double hi, double r1, double r2,
-                          double r3 ) const ;
+                            double r3) const ;
     //- Creates an ACIS frustum and assigns it to a Body $
     //- {hi} input height $
     //- {r1} input radius in x-direction at base $
     //- {r2} input radius in y-direction at base $
-    //- {r3} input radius in x-direction at top
+    //- {r3} input radius in x-direction at top $
+    //- {axis} align axis, optional, if null vector, align in z direction $
+    //- {center} optional, if null vector, centered at origin
     //- Returns the ID of the new Body or CUBIT_FAILURE
 
+ 
   virtual BodySM* torus( double r1, double r2 ) const ;
     //- Creates an ACIS torus and assigns it to a Body $
     //- {r1} input major_radius $
@@ -227,6 +230,9 @@
     //- {p4} - 4th corner of the sheet
 
 //HEADER- Boolean operator functions.
+  virtual CubitStatus stitch_surfs(
+		      DLIList<BodySM*> &surf_bodies,
+		      BodySM*& stitched_body)const;
 
   virtual CubitStatus subtract( DLIList<BodySM*> &tool_body_ptr,
                                 DLIList<BodySM*> &from_bodies,
@@ -397,7 +403,9 @@
                              double draft_angle,
                              int draft_type,
                              bool switchside,
-                             bool rigid) const ;
+                             bool rigid,
+                             Surface* stop_surf = NULL,
+                             BodySM*  stop_body = NULL) const ;
 
   virtual CubitStatus  sweep_perpendicular(
                              DLIList<GeometryEntity*>& ref_ent_list,
@@ -406,7 +414,9 @@
                              double draft_angle,
                              int draft_type,
                              bool switchside,
-                             bool rigid) const ;
+                             bool rigid,
+                             Surface* stop_surf = NULL,
+                             BodySM*  stop_body = NULL) const ;
 
   virtual CubitStatus  sweep_rotational(
                              DLIList<GeometryEntity*>& ref_ent_list,
@@ -419,7 +429,9 @@
                              int draft_type = 0,
                              bool switchside = false,
                              bool make_solid = false,
-                             bool rigid = false ) const ;
+                             bool rigid = false, 
+                             Surface *stop_surf = NULL,
+                             BodySM*  stop_body = NULL) const ;
 
   virtual CubitStatus sweep_along_curve(
                              DLIList<GeometryEntity*>& ref_ent_list,
@@ -427,7 +439,9 @@
                              DLIList<Curve*>& ref_edge_list,
                              double draft_angle = 0.0,
                              int draft_type = 0,
-                             bool rigid = false ) const;
+                             bool rigid = false,
+			     Surface *stop_surf = NULL,
+                             BodySM*  stop_body = NULL) const;
 
 
 //HEADER- Functions for webcut operations
@@ -455,10 +469,11 @@
     //- The newly created bodies are merged and imprinted depeding on
     //- the respective flags.
 
-  virtual CubitStatus webcut( DLIList<BodySM*>& webcut_body_list,
-                              BodySM const* tool_body,
-                              DLIList<BodySM*>& results_list,
-                              bool imprint  = false ) const ;
+  virtual CubitStatus webcut( 
+            DLIList<BodySM*>& webcut_body_list,
+            BodySM const* tool_body,
+            DLIList<BodySM*>& results_list,
+            bool imprint  = false) const;
     //R int
     //R- Number of bodies that were webcut ( >= 0 )
     //I webcut_body_list
@@ -475,23 +490,25 @@
     //- as the webcutting tool. The newly created bodies are
     //- merged and imprinted depeding on the respective flags.
 
-  virtual CubitStatus webcut_with_cylinder( 
+/*  virtual CubitStatus webcut_with_cylinder( 
                                     DLIList<BodySM*> &webcut_body_list,
                                     double radius,
                                     const CubitVector &axis,
                                     const CubitVector &center,
                                     DLIList<BodySM*>& results_list,
                                     bool imprint = false );
+*/
     //- cores the bodies with a cylinder formed by the given
     //- parameters and the height larger than the model.
 
-  virtual CubitStatus webcut_with_brick( 
+/*  virtual CubitStatus webcut_with_brick( 
                                  DLIList<BodySM*>& webcut_body_list, 
                                  const CubitVector &center,
                                  const CubitVector axes[3], 
                                  const CubitVector &extension,
                                  DLIList<BodySM*> &results_list,
                                  bool imprint = false );
+*/
   /**<  Webcuts the bodies in the list with a cutting brick.
     *  The brick is created by the given parameters - center of
     *  brick, xyz axes, and extension.  Extension is 1/2 width,
@@ -499,6 +516,7 @@
     *  solid modeling engine to reduce the impact on body ids.
     */
 
+/*
   virtual CubitStatus webcut_with_planar_sheet( 
                                         DLIList<BodySM*>& webcut_body_list,
                                         const CubitVector &center,
@@ -506,20 +524,22 @@
                                         double width, double height,
                                         DLIList<BodySM*> &results_list,
                                         bool imprint = false );
+*/
   /**<  Webcuts the bodies in the list with a cutting planar sheet.
     *  The sheet is created by the given parameters - center of
     *  sheet, xy axes, and width and height. Sheet creation is done
     *  in the solid modeling engine to reduce the impact on body ids.
     */
-
+  /*
   virtual CubitStatus webcut_with_curve_loop( 
                                       DLIList<BodySM*> &webcut_body_list,
                                       DLIList<Curve*> &ref_edge_list,
                                       DLIList<BodySM*>& results_list,
                                       bool imprint = false);
+  */
     //- creates a sheet body with the given curve loop
     //- uses the new sheet body to cut the body list
- 
+  /*
   virtual CubitStatus webcut_with_sweep_surfaces_rotated(
                               DLIList<BodySM*> &blank_bodies,
                               DLIList<Surface*> &surfaces,
@@ -530,7 +550,8 @@
                               bool up_to_next, 
                               DLIList<BodySM*> &results_list,
                               CubitBoolean imprint = false );
-
+  */
+  /*
   virtual CubitStatus webcut_with_sweep_curves_rotated(
                               DLIList<BodySM*> &blank_bodies,
                               DLIList<Curve*> &curves,
@@ -540,11 +561,13 @@
                               Surface *stop_surf,
                               DLIList<BodySM*> &results_list,
                               CubitBoolean imprint = false );
+  */
   //-these 2 functions sweep a surface or curve about an axis, creating a swept
   //volume or surface respectively, which is in turn used to webcut the blank_bodies.
   //stop_surface is a surface where the sweep will terminate.  If stop_surface is
   //specified, there MUST be some intersection between sweep and stop_surface. 
 
+  /*
   virtual CubitStatus webcut_with_sweep_surfaces(
                               DLIList<BodySM*> &blank_bodies,
                               DLIList<Surface*> &surfaces,
@@ -557,6 +580,7 @@
                               Curve *curve_to_sweep_along, 
                               DLIList<BodySM*> &results_list,
                               CubitBoolean imprint = false );
+  */
   //-sweeps a surface(s) along a vector, curve or perpendicular to the surface 
   //(last case implied when sweep_vector's length is zero) producing a swept body.
   //If through_all is true, sweep will traverse blank_bodies completely.  If stop_surf
@@ -567,6 +591,7 @@
   //fails, each surface is swept individually and the resultant bodies united.
   //This tool body is then used for the webcutting. 
 
+  /*
   virtual CubitStatus webcut_with_sweep_curves(
                               DLIList<BodySM*> &blank_bodies,
                               DLIList<Curve*> &curves,
@@ -576,14 +601,16 @@
                               Curve *curve_to_sweep_along, 
                               DLIList<BodySM*> &results_list,
                               CubitBoolean imprint = false );
+  */
   //-sweeps a curve(s) along a vector, curve. Swept surface(s)are stitched 
   //together and used as cutting tool to webcut blank_bodies. If surface(s) 
   //do not completely cut blank_bodies, webcut fails. If stop_surface is
   //specified, there MUST be some intersection between sweept surface and 
   //stop_surface. 
 
-  CubitStatus trim_up_to_next_surface( BODY *&tool_body, DLIList<BodySM*> &blank_bodies,
-                                       VERTEX *surf_VERT );
+  CubitStatus trim_up_to_next_surface(BodySM*& tool_body,
+                                      DLIList<BodySM*> bodies,
+                                      GeometryEntity * surf_vert);
 
   virtual CubitStatus section( DLIList<BodySM*> &section_body_list,
                                const CubitVector &point_1,
@@ -771,31 +798,34 @@
     //-
 
 //HEADER- Miscellaneous functions
-
+/*
   virtual CubitStatus webcut_with_sheet(DLIList<BodySM*>& webcut_body_list,
                                         BodySM *sheet_body,
                                         DLIList<BodySM*> &new_bodies,
                                         bool imprint = false);
+*/
     //- webcuts a body using a sheet body.
     //- It splits the sheet into two single sided bodies.
     //- it then subtracts this with the webcut body.
     //- The result is splitting the webcut_body into halves.
     //- if the webcut body is a topological torus, this routine
     //- will fail...
-
+  /*
   virtual CubitStatus webcut_with_sheet(BODY *webcut_body,
                                         BODY *sheet_body,
                                         BODY *&webcut_body_1,
                                         BODY *&webcut_body_2,
                                         CubitBoolean imprint  = CUBIT_FALSE);
+  */
     //- webcuts a body using a sheet body.
     //- It splits the sheet into two single sided bodies.
-
+  /*
   virtual CubitStatus webcut_with_extended_surf(DLIList<BodySM*> &webcut_body,
                                                 Surface *extend_from,
                                                 DLIList<BodySM*> &new_bodies,
                                                 int &num_cut,
                                                 bool imprint = false);
+  */
     //- creates a surface by extending one from the given surface then
     //- webcuts using the this sheet.(see webcut_with_sheet.
 
@@ -1146,7 +1176,21 @@
 
 //HEADER- Functions that create TopologyEntities
 
+  CubitStatus stitch_FACEs( DLIList<FACE*> &faces,
+                            FACE *&result_FACE,
+                            BODY *&stitched_BODY )const;
+  //I List of FACEs you want stitched together
+  //IO Pointer to FACE...gets set if all FACEs can be stitched into single FACE 
+  //IO If stitching of FACEs is successful, stitched_BODY is resultant BODY.  
+  //   Means that all faces could be stitched together, forming a single BODY,
+  //   but not a single FACE.
+  //returns CUBIT_SUCCESS if stitching was successful, other return FAILURE
 
+
+  CubitStatus trim_up_to_next_surface( BODY *&tool_BODY,
+                                       DLIList<BodySM*> &blank_bodies,
+                                       VERTEX *surf_VERT );
+
   CubitStatus get_new_Body(DLIList<BodySM*> &old_Body_list,
                            DLIList<BODY*> &old_BODY_list,
                            DLIList<BODY*> &new_BODY_list,
@@ -1460,7 +1504,8 @@
   CubitStatus webcut( DLIList<BodySM*>& webcut_body_list,
                       BODY* tool_BODY,
                       DLIList<BodySM*>& results_list,
-                      bool imprint = false ) const ;
+                      bool imprint = false
+                      ) const ;
     //R int
     //R- Number of bodies that were webcut ( >= 0 )
     //I webcut_body_list
@@ -1492,7 +1537,8 @@
   CubitStatus webcut_BODY( BODY* inputAcisBody,
                            BODY* infiniteCuttingTool,
                            BODY*& webcutBody1,
-                           BODY*& webcutBody2) const;
+                           BODY*& webcutBody2,
+                           CubitBoolean cutting_with_sheet = CUBIT_FALSE) const;
     //- Creates 2 ACIS BODYs that are the result of "webcutting" the input ACIS
     //- BODY, inputAcisBody, using the "infinite" solid BODY, infiniteCuttingTool.
     //- The ACIS FACES that overlap (at the cutting tool) are not "merged" -- i.e.,
@@ -1513,15 +1559,7 @@
     //- Deletes the Bodies in body_list and the Acis BODYs in BODY_list
 
 
-  CubitStatus stitch_FACEs( DLIList<FACE*> &faces,
-                            FACE *&result_FACE,
-                            BODY *&stitched_BODY );
-  //I List of FACEs you want stitched together
-  //IO Pointer to FACE...gets set if all FACEs can be stitched into single FACE 
-  //IO If stitching of FACEs is successful, stitched_BODY is resultant BODY.  
-  //   Means that all faces could be stitched together, forming a single BODY,
-  //   but not a single FACE.
-  //returns CUBIT_SUCCESS if stitching was successful, other return FAILURE
+  
 
   void webcut_imprint(BODY* cutting_tool_BODY_ptr,
                       DLIList<BodySM*> &old_body_list,
@@ -1566,7 +1604,8 @@
                                        double draft_angle = 0.0,
                                        int draft_type = 0,
                                        bool rigid = false,
-                                       FACE *to_FACE= NULL ) const;
+                                       FACE *to_FACE= NULL,
+                                       BODY *to_BODY = NULL ) const;
     //- Sweeps the FACE, FACE_ptr, along the sweep_vector, a distance equal
     //- to the length of the vector, using the input draft_angle and draft_type.
     //- The primary side of the FACE is swept unless it is DOUBLE_SIDED
@@ -1587,7 +1626,8 @@
                                         double draft_angle = 0.0,
                                         int draft_type = 0,
                                         bool rigid = false ,
-                                        FACE *to_FACE= NULL ) const;
+                                        FACE *to_FACE= NULL,
+                                        BODY *to_BODY = NULL  ) const;
     //- Sweeps the FACE, FACE_ptr, perpendicularly, a distance equal
     //- to the distance given, using the input draft_angle and draft_type.
     //- The primary side of the FACE is swept unless it is DOUBLE_SIDED
@@ -1608,7 +1648,8 @@
                                        double draft_angle = 0.0,
                                        int draft_type = 0,
                                        bool rigid = false, 
-                                       FACE *to_FACE= NULL ) const;
+                                       FACE *to_FACE= NULL,
+                                       BODY *to_BODY = NULL  ) const;
     //- Sweeps the EDGE, EDGE_ptr, along the sweep_vector, a distance equal
     //- to the length of the vector, using the input draft_angle and draft_type.
     //- The draft_type is either 0 or 1 (see the ACIS documentation on the
@@ -1627,7 +1668,8 @@
                                      double draft_angle = 0.0,
                                      int draft_type = 0,
                                      bool rigid = false,
-                                     FACE *to_FACE = NULL ) const;
+                                     FACE *to_FACE = NULL,
+                                     BODY *to_BODY = NULL  ) const;
     //- Revolves the FACE, FACE_ptr, about the unit vector, axis_unit_vector,
     //- passing through the spatial location, point.
     //- The angle of revolution is specified by angle and the input
@@ -1654,7 +1696,8 @@
                                      int draft_type = 0,
                                      bool make_solid = false,
                                      bool rigid = false, 
-                                     FACE *to_FACE= NULL ) const;
+                                     FACE *to_FACE= NULL,
+                                     BODY *to_BODY = NULL  ) const;
     //- Revolves the EDGE, EDGE_ptr, about the unit vector, axis_unit_vector,
     //- passing through the spatial location, point.
     //- The angle of revolution is specified by angle and the input
@@ -1670,7 +1713,8 @@
                                      double draft_angle = 0.0,
                                      int draft_type = 0,
                                      bool rigid = false, 
-                                     FACE *to_FACE= NULL ) const;
+                                     FACE *to_FACE= NULL,
+                                     BODY *to_BODY = NULL  ) const;
     //- Sweeps the FACE, FACE_ptr, along a WIRE body.
     //- The draft_type is either 0, 1 or 2 (see the ACIS documentation on the
     //- sweep_options) and indicates what should be done to "close"
@@ -1684,7 +1728,8 @@
                                      double draft_angle = 0.0,
                                      int draft_type = 0,
                                      bool rigid = false, 
-                                     FACE *to_FACE= NULL ) const;
+                                     FACE *to_FACE= NULL,
+                                     BODY *to_BODY = NULL  ) const;
     //- Sweeps the EDGE, EDGE_ptr, along a WIRE body.
     //- The draft_type is either 0, 1 or 2 (see the ACIS documentation on the
     //- sweep_options) and indicates what should be done to "close"

Modified: cgm/trunk/geom/ACIS_SRC/AcisQueryEngine.cpp
===================================================================
--- cgm/trunk/geom/ACIS_SRC/AcisQueryEngine.cpp	2007-08-24 20:05:52 UTC (rev 1252)
+++ cgm/trunk/geom/ACIS_SRC/AcisQueryEngine.cpp	2007-08-24 20:43:22 UTC (rev 1253)
@@ -4607,6 +4607,10 @@
     this_minor = 0;
     valid = true;
   }
+  else if (major == 16 && this_minor >= 0 && this_minor <= 7) {
+    this_minor = 0;
+    valid = true;
+  }
   else {
     PRINT_ERROR("Unrecognized Acis version number %d.%d.\n", major, this_minor);
     return CUBIT_FAILURE;

Modified: cgm/trunk/geom/GeometryModifyEngine.cpp
===================================================================
--- cgm/trunk/geom/GeometryModifyEngine.cpp	2007-08-24 20:05:52 UTC (rev 1252)
+++ cgm/trunk/geom/GeometryModifyEngine.cpp	2007-08-24 20:43:22 UTC (rev 1253)
@@ -1,7 +1,607 @@
 #include "CubitDefines.h"
 #include "GeometryDefines.h"
+#include "CubitBox.hpp"
 #include "CubitVector.hpp"
+#include "BodySM.hpp"
+#include "Surface.hpp"
 
 #include "GeometryModifyEngine.hpp"
+#include "GeometryQueryEngine.hpp"
+#include "GeometryQueryTool.hpp"
 
-                            
+CubitStatus GeometryModifyEngine::webcut_with_brick( 
+                                     DLIList<BodySM*>& webcut_body_list,
+                                     const CubitVector &center,
+                                     const CubitVector axes[3],
+                                     const CubitVector &extension,
+                                     DLIList<BodySM*> &results_list,
+                                     bool imprint )
+{
+   // Create the brick to cut with
+   BodySM *cutting_tool_ptr = brick( center, axes, extension );
+   if( cutting_tool_ptr == NULL )
+      return CUBIT_FAILURE;
+
+   CubitStatus stat =
+       this->webcut(webcut_body_list, cutting_tool_ptr, results_list, imprint) ;
+
+   // Delete the BodySM that was created to be used as a tool
+   get_gqe()->delete_solid_model_entities(cutting_tool_ptr) ;
+
+   return stat;
+}
+
+CubitStatus GeometryModifyEngine::webcut_with_cylinder(
+                                        DLIList<BodySM*> &webcut_body_list,
+                                        double radius,
+                                        const CubitVector &axis,
+                                        const CubitVector &center,
+                                        DLIList<BodySM*>& results_list,
+                                        bool imprint ) 
+{
+  
+  double max_size =  0.;
+  //lets find the distance to the center for each body and take
+  //the max.
+  double curr;
+  CubitVector cent_bod;
+  CubitBox bounding_box; 
+  BodySM *body_ptr;
+  bounding_box = webcut_body_list[0]->bounding_box();
+  cent_bod =  bounding_box.center();
+  cent_bod = cent_bod - center;
+  curr = cent_bod.length();
+  if ( curr > max_size )
+     max_size = curr;
+
+
+  for ( int ii = webcut_body_list.size()-1; ii > 0; ii-- )
+    {
+      body_ptr = webcut_body_list[ii];
+      bounding_box |= body_ptr->bounding_box();
+      cent_bod = body_ptr->bounding_box().center();
+      cent_bod = cent_bod - center;
+      curr = cent_bod.length();
+      if ( curr > max_size )
+	max_size = curr;
+    }
+  
+  curr = bounding_box.diagonal().length();
+
+  if ( curr > max_size )
+     max_size = curr;
+
+  double height = 0.0;   
+  if ( center.x() > max_size )
+    {
+      height = 500.0 * center.x();
+    }
+  else if ( center.y() > max_size )
+    {
+      height = 500.0 * center.y();
+    }
+  else if ( center.z() > max_size )
+    {
+      height = 500.0 * center.z();
+    }
+  else
+    {
+      height = 500.0 * max_size;
+    }
+
+  //lets make certain we have a valid height..
+  if ( height < GEOMETRY_RESABS )
+    {
+      height = 500.0;
+    }
+
+  BodySM *cutting_tool_ptr = cylinder( height, radius, radius, radius );
+
+  if( cutting_tool_ptr == NULL )
+    return CUBIT_FAILURE;
+
+  //transform the cyclinder to cernter and axis
+  // The current frustum is centered on the z axis.
+  CubitVector axis2(0., 0., 1.0 );
+  //now find the normal to the current axis and axis we want to be
+  //at. This normal is where we will rotate about.
+  CubitVector normal_axis = axis2 * axis;
+  if ( normal_axis.length() > CUBIT_RESABS )
+    {
+       //angle in degrees.
+       double angle = normal_axis.vector_angle( axis2, axis );
+       get_gqe()->rotate(cutting_tool_ptr, normal_axis, angle);
+    }
+  get_gqe()->translate(cutting_tool_ptr, center);
+  
+  CubitStatus stat =
+    this->webcut(webcut_body_list, cutting_tool_ptr, results_list, imprint) ;
+
+  // Delete the BodySM that was created to be used as a tool
+  get_gqe()->delete_solid_model_entities(cutting_tool_ptr) ;
+
+  return stat;
+}
+                           
+CubitStatus GeometryModifyEngine::webcut_with_planar_sheet(
+                                     DLIList<BodySM*>& webcut_body_list,
+                                     const CubitVector &center,
+                                     const CubitVector axes[2],
+				     double width,
+				     double height,
+                                     DLIList<BodySM*> &results_list,
+                                     bool imprint )
+{
+   // Create the planar sheet to cut with
+   CubitVector p1, p2, p3, p4;
+ 
+   // Get the corners of the sheet
+   center.next_point( axes[0], width/2.0, p1 );
+   p1.next_point( axes[1], -height/2.0, p1 );
+   p1.next_point( axes[1], height, p2 );
+   p2.next_point( axes[0], -width, p3 );
+   p3.next_point( axes[1], -height, p4 );
+
+   BodySM *cutting_tool_ptr = planar_sheet(p1,p2,p3,p4);  
+   if( cutting_tool_ptr == NULL )
+      return CUBIT_FAILURE;
+
+   CubitStatus stat = 
+       this->webcut(webcut_body_list, cutting_tool_ptr, results_list, imprint) ;
+
+   // Delete the BodySM that was created to be used as a tool
+   get_gqe()->delete_solid_model_entities(cutting_tool_ptr) ;
+
+   return stat;
+}
+
+CubitStatus GeometryModifyEngine::webcut_with_sweep_curves_rotated(
+                              DLIList<BodySM*> &blank_bodies,
+                              DLIList<Curve*> &curves,
+                              const CubitVector& point,
+                              const CubitVector& sweep_axis,
+                              double angle,
+                              Surface *stop_surf,
+                              DLIList<BodySM*> &results_list,
+                              CubitBoolean imprint )
+{
+  if(curves.size() == 0 )
+    return CUBIT_FAILURE;
+ 
+  DLIList<GeometryEntity*> ref_ent_list;
+  for(int i = 0; i < curves.size(); i++)    
+    ref_ent_list.append((GeometryEntity*)(curves.get_and_step()));			  
+  
+  DLIList<BodySM*> swept_bodies;
+  CubitStatus stat = sweep_rotational(ref_ent_list,swept_bodies,point,
+                                      sweep_axis,angle,0, 0.0, 0,false,false,
+                                      false,stop_surf);
+  if(stat == CUBIT_FAILURE  && swept_bodies.size() == 0)
+    return stat;
+
+  //stitch faces together
+  BodySM* cutting_tool_ptr = NULL;
+  stat = stitch_surfs(swept_bodies, cutting_tool_ptr);
+
+  if(stat == CUBIT_FAILURE)
+    {
+      //delete all swept faces
+      for(int i = 0; i < swept_bodies.size(); i++)
+	get_gqe()->delete_solid_model_entities(swept_bodies.get_and_step()) ;
+      return stat;
+    }
+
+  stat = 
+       this->webcut(blank_bodies, cutting_tool_ptr, results_list, imprint) ;
+
+   // Delete the BodySM that was created to be used as a tool
+   get_gqe()->delete_solid_model_entities(cutting_tool_ptr) ;
+
+   //delete all swept faces
+   for(int i = 0; i < swept_bodies.size(); i++)
+      get_gqe()->delete_solid_model_entities(swept_bodies.get_and_step()) ;
+   return stat;
+  
+}
+
+CubitStatus GeometryModifyEngine::webcut_with_sweep_curves(
+                              DLIList<BodySM*> &blank_bodies,
+                              DLIList<Curve*> &curves,
+                              const CubitVector& sweep_vector,
+                              bool through_all,
+                              Surface *stop_surf,
+                              Curve *curve_to_sweep_along,
+                              DLIList<BodySM*> &results_list,
+                              CubitBoolean imprint )
+{
+  if(curves.size() == 0 )
+    return CUBIT_FAILURE;
+  
+  CubitVector tmp_sweep_vector = sweep_vector;
+
+  //get model bbox info...will scale sweep vector by its diagonal
+  //so that we go far enough
+  if( through_all || stop_surf )
+    {
+      CubitBox bounding_box = GeometryQueryTool::instance()->model_bounding_box();
+      tmp_sweep_vector.normalize();
+      tmp_sweep_vector*=(2*bounding_box.diagonal().length());
+    }
+
+  DLIList<GeometryEntity*> ref_ent_list;
+  for(int i = 0; i < curves.size(); i++)    
+    ref_ent_list.append((GeometryEntity*)(curves.get_and_step()));
+  DLIList<BodySM*> swept_bodies;
+  CubitStatus stat;
+
+  //see if we're sweeping along a specified curve
+  if( curve_to_sweep_along )
+    {
+      DLIList<Curve*> curves_to_sweep_along;
+      curves_to_sweep_along.append(curve_to_sweep_along);
+      stat = sweep_along_curve(ref_ent_list, swept_bodies,
+			       curves_to_sweep_along,0.0,0,false,stop_surf);
+
+      if (!stat && swept_bodies.size() == 0)
+	return stat;
+    }
+
+  else
+    {
+      stat = sweep_translational(ref_ent_list, swept_bodies,
+			     tmp_sweep_vector,0.0,0, false, false, stop_surf);
+
+      if (!stat && swept_bodies.size() == 0)
+	return stat;
+    }
+
+  //stitch faces together
+  BodySM* cutting_tool_ptr = NULL;
+  stat = stitch_surfs(swept_bodies, cutting_tool_ptr);
+
+  if(stat == CUBIT_FAILURE)
+    {
+      //delete all swept faces
+      for(int i = 0; i < swept_bodies.size(); i++)
+	get_gqe()->delete_solid_model_entities(swept_bodies.get_and_step()) ;
+      return stat;
+    }
+
+  stat = 
+       this->webcut(blank_bodies, cutting_tool_ptr, results_list, imprint) ;
+
+   // Delete the BodySM that was created to be used as a tool
+   get_gqe()->delete_solid_model_entities(cutting_tool_ptr) ;
+
+   //delete all swept faces
+   for(int i = 0; i < swept_bodies.size(); i++)
+      get_gqe()->delete_solid_model_entities(swept_bodies.get_and_step()) ;
+   return stat;
+}
+
+CubitStatus GeometryModifyEngine::webcut_with_curve_loop(
+			      DLIList<BodySM*> &webcut_body_list,
+                              DLIList<Curve*> &curves,
+                              DLIList<BodySM*>& results_list,
+                              bool imprint )
+{
+  if(curves.size() == 0 )
+    return CUBIT_FAILURE;
+
+  GeometryType surface_type = PLANE_SURFACE_TYPE;
+  CubitStatus stat;
+
+  //make copies of the curves.
+  DLIList<Curve*> copied_curves;
+  Curve* temp_curve = NULL;
+  for (int i = curves.size(); i--;)
+    {
+      temp_curve = make_Curve(curves.get_and_step());
+      if(temp_curve != NULL)
+        copied_curves.append(temp_curve);
+    }
+  
+  //make a face out of the curves
+  Surface * surf = make_Surface(surface_type, copied_curves, NULL, false );
+  if (surf == NULL)
+    {
+      PRINT_ERROR("webcut tool surface is not created from acis.\n");
+      return CUBIT_FAILURE;
+    }
+
+  
+  //get cutting tool BodySM.
+  BodySM* cutting_tool_ptr = make_BodySM(surf);
+  assert(cutting_tool_ptr );
+    
+  stat = 
+       this->webcut(webcut_body_list, cutting_tool_ptr, results_list, imprint) ;
+
+   // Delete the BodySM that was created to be used as a tool
+   get_gqe()->delete_solid_model_entities(cutting_tool_ptr) ;
+   return stat;
+}
+
+CubitStatus GeometryModifyEngine::webcut_with_extended_surf(
+			      DLIList<BodySM*> &webcut_body_list,
+                              Surface *extend_from,
+                              DLIList<BodySM*> &results_list,
+                              int &num_cut,
+                              bool imprint )
+{
+  assert(extend_from);
+  //make the extended face 
+  Surface * surf = make_Surface(extend_from, true);
+  if (surf == NULL)
+    {
+      PRINT_ERROR("webcut tool surface is not created from acis.\n");
+      return CUBIT_FAILURE;
+    }
+
+  //get cutting tool BodySM.
+  BodySM* cutting_tool_ptr = surf->bodysm();
+  assert(cutting_tool_ptr );
+    
+  CubitStatus stat;
+  stat = 
+    this->webcut(webcut_body_list, cutting_tool_ptr, results_list, imprint) ;
+
+  num_cut = results_list.size();
+
+  // Delete the BodySM that was created to be used as a tool
+  get_gqe()->delete_solid_model_entities(cutting_tool_ptr) ;
+  return stat;
+}
+
+CubitStatus GeometryModifyEngine::webcut_with_sweep_surfaces_rotated(
+                              DLIList<BodySM*> &blank_bodies,
+                              DLIList<Surface*> &surfaces,
+                              const CubitVector& point,
+                              const CubitVector& sweep_vector,
+                              double angle,
+                              Surface *stop_surf,
+                              bool up_to_next,
+                              DLIList<BodySM*> &results_list,
+                              CubitBoolean imprint )
+{
+  if(surfaces.size() == 0 )
+    return CUBIT_FAILURE;
+ 
+  DLIList<GeometryEntity*> ref_ent_list;
+  Surface * temp_face = NULL;
+  for(int i = 0; i < surfaces.size(); i++) 
+    {
+      //copy the faces before sweep
+      temp_face = make_Surface(surfaces.get_and_step());
+      if (temp_face)
+	ref_ent_list.append((GeometryEntity*)temp_face);		       
+    }
+
+  BodySM* to_body = NULL;
+  CubitStatus stat = CUBIT_SUCCESS;
+  if(up_to_next && blank_bodies.size() > 1) //unite all bland_bodies
+    {
+       DLIList<BodySM*> newBodies;
+
+       DLIList<BodySM*> copied_bodies;
+       for(int i = 0; i < blank_bodies.size(); i++)
+         copied_bodies.append(copy_body(blank_bodies.get_and_step()));
+
+       stat = unite(copied_bodies, newBodies);
+
+       if(stat == CUBIT_FAILURE)
+	 {
+	   PRINT_ERROR("Cannot use 'up_to_next' option with specified geometry\n");
+	   PRINT_INFO("Try the 'stop surface <id>' option instead\n");
+	   return stat;
+	 }
+       to_body = newBodies.get();
+    }
+
+  else if(up_to_next && blank_bodies.size() == 1)
+    to_body = copy_body(blank_bodies.get());
+
+  DLIList<BodySM*> swept_bodies;
+  stat = sweep_rotational(ref_ent_list,swept_bodies,point,
+                                      sweep_vector,angle,0, 0.0,0,false,false,
+                                      false,stop_surf, to_body);
+  if(stat == CUBIT_FAILURE && swept_bodies.size() == 0)
+    {
+       //delete copied faces
+       GeometryEntity * temp_entity = NULL;
+       for(int i = ref_ent_list.size();i--;)
+         {
+            temp_entity = ref_ent_list.get_and_step();
+            if (temp_entity)
+              get_gqe()->delete_solid_model_entities( (Surface*)temp_entity);
+         }
+
+       return stat;
+    }
+
+  //if there are more than 1, unite them all
+  DLIList<BodySM*>  newBodies;
+  if (swept_bodies.size() > 1)
+     stat = unite(swept_bodies, newBodies);
+  else
+     newBodies = swept_bodies;
+
+  if(stat == CUBIT_FAILURE || newBodies.size()!= 1)
+    { 
+       PRINT_ERROR("webcut tool body is not created from acis.\n");
+       //delete the swept_bodies
+       BodySM* tmp_body = NULL;
+       for (int i = swept_bodies.size(); i--;)
+         {
+	   tmp_body= swept_bodies.get_and_step();
+           if (tmp_body)
+	     get_gqe()->delete_solid_model_entities(tmp_body);
+	 }
+ 
+       //delete copied faces
+       GeometryEntity * temp_entity = NULL;
+       for(int i = ref_ent_list.size();i--;)
+         {
+            temp_entity = ref_ent_list.get_and_step();
+            if (temp_entity)
+              get_gqe()->delete_solid_model_entities( (Surface*)temp_entity); 
+         }
+       return CUBIT_FAILURE;
+    }
+
+  BodySM *cutting_tool_ptr = newBodies.get(); 
+
+  stat = 
+    this->webcut(blank_bodies, cutting_tool_ptr, results_list, imprint ) ;
+
+  // Delete the BodySM that was created to be used as a tool
+  get_gqe()->delete_solid_model_entities(cutting_tool_ptr) ;
+
+  return stat;
+}
+
+CubitStatus GeometryModifyEngine::webcut_with_sweep_surfaces(
+                              DLIList<BodySM*> &blank_bodies,
+                              DLIList<Surface*> &surfaces,
+                              const CubitVector& sweep_vector,
+                              bool sweep_perp,
+                              bool through_all,
+                              bool outward,
+                              bool up_to_next,
+                              Surface *stop_surf,
+                              Curve *curve_to_sweep_along,
+                              DLIList<BodySM*> &results_list,
+                              CubitBoolean imprint )
+{
+  if(surfaces.size() == 0 )
+    return CUBIT_FAILURE;
+  
+  CubitVector tmp_sweep_vector = sweep_vector;
+
+  //get model bbox info...will scale sweep vector by its diagonal
+  //so that we go far enough
+  if( through_all || stop_surf || up_to_next)
+    {
+      CubitBox bounding_box = GeometryQueryTool::instance()->model_bounding_box();
+      tmp_sweep_vector.normalize();
+      tmp_sweep_vector*=(2*bounding_box.diagonal().length());
+    }
+
+  if( sweep_perp == true )
+  {
+    if( through_all || stop_surf )
+    {
+      CubitBox bounding_box = GeometryQueryTool::instance()->model_bounding_box();
+      tmp_sweep_vector.set(1,0,0);
+      tmp_sweep_vector = 2*(bounding_box.diagonal());
+    }
+  }
+
+  BodySM* to_body = NULL;
+  CubitStatus stat = CUBIT_SUCCESS;
+  if(up_to_next && blank_bodies.size() > 1) //unite all bland_bodies
+    {
+       DLIList<BodySM*> newBodies;
+       DLIList<BodySM*> copied_bodies;
+       for(int i = 0; i < blank_bodies.size(); i++)
+	 copied_bodies.append(copy_body(blank_bodies.get_and_step()));
+
+       stat = unite(copied_bodies, newBodies);
+       if(stat == CUBIT_FAILURE)
+	 {
+	   PRINT_ERROR("Cannot use 'up_to_next' option with specified geometry\n");
+	   PRINT_INFO("Try the 'stop surface <id>' option instead\n");
+	   return stat;
+	 }
+       to_body = newBodies.get();
+    }
+
+  else if(up_to_next && blank_bodies.size() == 1)
+    to_body = copy_body(blank_bodies.get());
+
+  DLIList<GeometryEntity*> ref_ent_list;
+  Surface * temp_face = NULL;
+  for(int i = 0; i < surfaces.size(); i++) 
+    {
+      //copy the faces before sweep
+      temp_face = make_Surface(surfaces.get_and_step());
+      if (temp_face)
+	ref_ent_list.append((GeometryEntity*)temp_face);		       
+    }
+  
+  //Sweep surfaces
+  DLIList<BodySM*> swept_bodies;
+
+  //see if we're sweeping along a specified curve
+  if( curve_to_sweep_along )
+    {
+      DLIList<Curve*> curves_to_sweep_along;
+      curves_to_sweep_along.append(curve_to_sweep_along);
+      stat = sweep_along_curve(ref_ent_list, swept_bodies,
+			       curves_to_sweep_along, 0.0,0,false,stop_surf,
+			       to_body);   
+    }
+
+  else if (sweep_perp )
+    stat = sweep_perpendicular(ref_ent_list, swept_bodies,
+			       tmp_sweep_vector.length(),0.0,0,outward,false,
+			       stop_surf, to_body);
+  else    
+    stat = sweep_translational(ref_ent_list, swept_bodies,
+			       tmp_sweep_vector,0.0,0, false, false, stop_surf,
+			       to_body);
+
+
+  if (stat == CUBIT_FAILURE && swept_bodies.size() == 0)
+    {
+       //delete copied faces
+       GeometryEntity * temp_entity = NULL;
+       for(int i = ref_ent_list.size();i--;)
+       {
+          temp_entity = ref_ent_list.get_and_step();
+          if (temp_entity)
+            get_gqe()->delete_solid_model_entities( (Surface*)temp_entity);
+       }
+       return stat;
+    }
+
+  //if there are more than 1, unite them all
+  DLIList<BodySM*>  newBodies;
+  if (swept_bodies.size() > 1)
+     stat = unite(swept_bodies, newBodies);
+  else
+     newBodies = swept_bodies;
+
+  if(stat == CUBIT_FAILURE || newBodies.size()!= 1)
+    { 
+       PRINT_ERROR("the webcut tool body is not created from acis.\n");
+       //delete the swept_bodies
+       BodySM* tmp_body = NULL;
+       for (int i = swept_bodies.size(); i--;)
+         {
+	   tmp_body= swept_bodies.get_and_step();
+           if (tmp_body)
+	     get_gqe()->delete_solid_model_entities(tmp_body);
+	 }
+       //delete copied faces
+       GeometryEntity * temp_entity = NULL;
+       for(int i = ref_ent_list.size();i--;)
+         {
+            temp_entity = ref_ent_list.get_and_step();
+            if (temp_entity)
+              get_gqe()->delete_solid_model_entities( (Surface*)temp_entity);
+         }
+
+       return CUBIT_FAILURE;
+    }
+
+  BodySM *cutting_tool_ptr = newBodies.get();  
+
+  stat = 
+    this->webcut(blank_bodies, cutting_tool_ptr, results_list, imprint ) ;
+
+  // Delete the BodySM that was created to be used as a tool
+  get_gqe()->delete_solid_model_entities(cutting_tool_ptr) ;
+
+  return stat;
+}

Modified: cgm/trunk/geom/GeometryModifyEngine.hpp
===================================================================
--- cgm/trunk/geom/GeometryModifyEngine.hpp	2007-08-24 20:05:52 UTC (rev 1252)
+++ cgm/trunk/geom/GeometryModifyEngine.hpp	2007-08-24 20:43:22 UTC (rev 1253)
@@ -150,6 +150,15 @@
     //- specific modeling engine.  For example, if the engine is 
     //- AcisGeometryEngine, then a SurfaceACIS is created.
   
+  virtual CubitStatus stitch_surfs( 
+			DLIList<BodySM*> &surf_bodies,
+                        BodySM *& stitched_Body )const= 0;
+   //I List of surface_bodys you want stitched together
+   //IO If stitching of FACEs is successful, stitched_Body is resultant BodySM.
+   //   Means that all surfaces could be stitched together, forming a single BODY,
+   //   but not a single FACE.
+   //returns CUBIT_SUCCESS if stitching was successful, other return FAILURE
+
   virtual Lump* make_Lump( DLIList<Surface*>& surface_list ) const = 0;
     //R Lump*
     //R- Pointer to a newly created Lump object.
@@ -244,7 +253,7 @@
       //- Returns the ID of the new Body or CUBIT_FAILURE
 
       virtual BodySM* cylinder( double hi, double r1, double r2, 
-                              double r3 ) const = 0 ;
+                                double r3) const = 0;
       //- Creates an ACIS frustum and assigns it to a Body $
       //- {hi} input height $
       //- {r1} input radius in x-direction at base $
@@ -458,7 +467,9 @@
                                       double draft_angle,
                                       int draft_type,
                                       bool switchside,
-                                      bool rigid) const = 0;
+                                      bool rigid,
+                                      Surface* stop_surf = NULL,
+                                      BodySM*  stop_body = NULL) const = 0;
       
       virtual CubitStatus  sweep_perpendicular(
                                       DLIList<GeometryEntity*>& ref_ent_list,
@@ -467,7 +478,9 @@
                                       double draft_angle,
                                       int draft_type,
                                       bool switchside,
-                                      bool rigid) const = 0;
+                                      bool rigid,
+                                      Surface* stop_surf = NULL,
+                                      BodySM*  stop_body = NULL ) const = 0;
       
       virtual CubitStatus  sweep_rotational(
                                    DLIList<GeometryEntity*>& ref_ent_list,
@@ -480,7 +493,9 @@
                                    int draft_type = 0,
                                    bool switchside = false,
                                    bool make_solid = false,
-                                   bool rigid = false ) const = 0;
+                                   bool rigid = false,
+                                   Surface *stop_surf = NULL,
+                                   BodySM*  stop_body = NULL ) const = 0;
         
       virtual CubitStatus sweep_along_curve( 
                                    DLIList<GeometryEntity*>& ref_ent_list,
@@ -488,18 +503,22 @@
                                    DLIList<Curve*>& ref_edge_list,
                                    double draft_angle = 0.0,
                                    int draft_type = 0,
-                                   bool rigid = false ) const= 0;
+                                   bool rigid = false,
+                                   Surface *stop_surf = NULL,
+                                   BodySM*  stop_body = NULL  ) const= 0;
      
 
       virtual CubitStatus scale( BodySM *&body, const CubitVector& factors ) = 0;
 
       //HEADER- Webcut-related functions
-      virtual CubitStatus webcut( DLIList<BodySM*>& webcut_body_list, 
-                                  const CubitVector &v1,
-                                  const CubitVector &v2,
-                                  const CubitVector &v3,
-                                  DLIList<BodySM*>& results_list,
-                                  bool imprint = false ) const = 0;
+      virtual CubitStatus webcut( 
+              DLIList<BodySM*>& webcut_body_list, 
+              const CubitVector &v1,
+              const CubitVector &v2,
+              const CubitVector &v3,
+              DLIList<BodySM*>& results_list,
+              bool imprint = false             
+ ) const = 0;
       //R int
       //R- Number of bodies that were webcut ( >= 0 )
       //I webcut_body_list
@@ -516,10 +535,12 @@
       //- The newly created bodies are merged and imprinted depeding on 
       //- the respective flags.
 
-      virtual CubitStatus webcut(DLIList<BodySM*>& webcut_body_list, 
-                                 BodySM const* tool_body,
-                                 DLIList<BodySM*>& results_list,
-                                 bool imprint = false ) const = 0 ;
+      virtual CubitStatus webcut(
+                    DLIList<BodySM*>& webcut_body_list, 
+                    BodySM const* tool_body,
+                    DLIList<BodySM*>& results_list,
+                    bool imprint = false
+                    ) const = 0 ;
       //R int       
       //R- Number of bodies that were webcut ( >= 0 )
       //I webcut_body_list
@@ -548,10 +569,12 @@
       //- I- Bodies to be webcut, plane to define cuts, and imprint merge flags.
       //- This is an experimental function, hooked to the GUI for making
       //- bodies one to one sweeps.
+      /*
       virtual CubitStatus webcut_with_sheet(DLIList<BodySM*>& webcut_body_list,
                                             BodySM *sheet_body,
                                             DLIList<BodySM*> &new_bodies,
                                             bool imprint = false) = 0;
+      */
       //- webcuts a body using a sheet body.
       //- It splits the sheet into two single sided bodies.
       //- it then subtracts this with the webcut body.
@@ -564,7 +587,7 @@
                                             Surface *extend_from,
                                             DLIList<BodySM*> &new_bodies,
                                             int &num_cut,
-                                            bool imprint = false ) = 0;
+                                            bool imprint = false );
       //- creates a surface by extending one from the given surface then
       //- webcuts using the this sheet.(see webcut_with_sheet.
  
@@ -579,7 +602,7 @@
                             Surface *stop_surf, 
                             Curve *curve_to_sweep_along, 
                             DLIList<BodySM*> &results_list,
-                            CubitBoolean imprint = false) = 0;
+                            CubitBoolean imprint = false);
 
       virtual CubitStatus webcut_with_sweep_curves(
                             DLIList<BodySM*> &blank_bodies,
@@ -589,7 +612,7 @@
                             Surface *stop_surf, 
                             Curve *curve_to_sweep_along, 
                             DLIList<BodySM*> &results_list,
-                            CubitBoolean imprint = false) = 0;
+                            CubitBoolean imprint = false) ;
 
       virtual CubitStatus webcut_with_sweep_curves_rotated(
                             DLIList<BodySM*> &blank_bodies,
@@ -599,7 +622,7 @@
                             double angle,
                             Surface *stop_surf, 
                             DLIList<BodySM*> &results_list,
-                            CubitBoolean imprint = false) = 0;
+                            CubitBoolean imprint = false) ;
 
       virtual CubitStatus webcut_with_sweep_surfaces_rotated(
                             DLIList<BodySM*> &blank_bodies,
@@ -610,24 +633,24 @@
                             Surface *stop_surf, 
                             bool up_to_next, 
                             DLIList<BodySM*> &results_list,
-                            CubitBoolean imprint = false) = 0;
+                            CubitBoolean imprint = false);
 
       virtual CubitStatus webcut_with_cylinder( 
-                                        DLIList<BodySM*> &webcut_body_list,                                        
+                                        DLIList<BodySM*> &webcut_body_list,  
                                         double radius,
                                         const CubitVector &axis,
                                         const CubitVector &center,
                                         DLIList<BodySM*>& results_list,
-                                        bool imprint = false) = 0;
+                                        bool imprint = false) ;
       //- webcuts a body using a cylinder give the input parameters.
 
-      virtual CubitStatus webcut_with_brick( 
+      CubitStatus webcut_with_brick( 
                                      DLIList<BodySM*>& webcut_body_list, 
                                      const CubitVector &center, 
                                      const CubitVector axes[3], 
                                      const CubitVector &extension,
                                      DLIList<BodySM*> &results_list,
-                                     bool imprint = false ) = 0;
+                                     bool imprint = false ); 
       /**<  Webcuts the bodies in the list with a cutting brick.
         *  The brick is created by the given parameters - center of
         *  brick, xyz axes, and extension.  Extension is 1/2 width,
@@ -638,12 +661,12 @@
         */
 
       virtual CubitStatus webcut_with_planar_sheet( 
-                                            DLIList<BodySM*>& webcut_body_list, 
+                                            DLIList<BodySM*>& webcut_body_list,
                                             const CubitVector &center, 
                                             const CubitVector axes[2],
                                             double width, double height,
                                             DLIList<BodySM*> &results_list,
-                                            bool imprint = false ) = 0;
+                                            bool imprint = false );
       /**<  Webcuts the bodies in the list with a cutting planar sheet.
         *  The sheet is created by the given parameters - center of
         *  sheet, xy axes, and width and height. Sheet creation is done 
@@ -654,7 +677,7 @@
                                          DLIList<BodySM*> &webcut_body_list,
                                          DLIList<Curve*> &ref_edge_list,
                                          DLIList<BodySM*>& results_list,
-                                         bool imprint = false) = 0;
+                                         bool imprint = false) ;
       //- webcuts a body list using a temp sheet body created from the curve loop
 
 

Modified: cgm/trunk/geom/GeometryModifyTool.cpp
===================================================================
--- cgm/trunk/geom/GeometryModifyTool.cpp	2007-08-24 20:05:52 UTC (rev 1252)
+++ cgm/trunk/geom/GeometryModifyTool.cpp	2007-08-24 20:43:22 UTC (rev 1253)
@@ -5032,7 +5032,7 @@
 
    push_vg_attributes_before_modify(body_sm_list);
 
-   CubitStatus stat = gme->webcut_with_sheet (
+   CubitStatus stat = gme->webcut (
        body_sm_list, tool_sm, new_sms, imprint  );
 
    restore_vg_after_modify(new_sms, original_body_list);

Modified: cgm/trunk/geom/facet/FacetModifyEngine.cpp
===================================================================
--- cgm/trunk/geom/facet/FacetModifyEngine.cpp	2007-08-24 20:05:52 UTC (rev 1252)
+++ cgm/trunk/geom/facet/FacetModifyEngine.cpp	2007-08-24 20:43:22 UTC (rev 1253)
@@ -1286,6 +1286,13 @@
   return (BodySM*) NULL;
 }
 
+CubitStatus FacetModifyEngine::stitch_surfs(
+		      DLIList<BodySM*>& surf_bodies,
+		      BodySM*& stitched_body) const
+{
+  PRINT_ERROR("Option not supported for mesh based geometry.\n");
+  return CUBIT_SUCCESS;
+}
 //===============================================================================
 // Function   : subtract
 // Member Type: PUBLIC
@@ -1775,7 +1782,9 @@
   double /*draft_angle*/,
   int /*draft_type*/,
   bool /*switchside*/,
-  bool /*rigid*/) const
+  bool /*rigid*/,
+  Surface * /*stop_face*/,
+  BodySM  *stop_body )const 
 {
   PRINT_ERROR("Option not supported for mesh based geometry.\n");
   return CUBIT_FAILURE;
@@ -1795,7 +1804,9 @@
   double /*draft_angle*/,
   int /*draft_type*/,
   bool /*switchside*/,
-  bool /*rigid*/) const
+  bool /*rigid*/,
+  Surface* stop_surf,
+  BodySM  *stop_body ) const
 {
   PRINT_ERROR("Option not supported for mesh based geometry.\n");
   return CUBIT_FAILURE;
@@ -1819,7 +1830,9 @@
   int /*draft_type*/,
   bool /*switchside*/,
   bool /*make_solid*/,
-  bool /*rigid*/) const
+  bool /*rigid*/, 
+  Surface * /*stop_face*/,
+  BodySM  *stop_body) const
 {
   PRINT_ERROR("Option not supported for mesh based geometry.\n");
   return CUBIT_FAILURE;
@@ -1838,7 +1851,9 @@
   DLIList<Curve*>& /*ref_edge_list*/,
   double /*draft_angle*/,
   int /*draft_type*/,
-  bool /*rigid*/) const
+  bool /*rigid*/,
+  Surface * /*stop_face*/,
+  BodySM  *stop_body ) const
 {
   PRINT_ERROR("Option not supported for mesh based geometry.\n");
   return CUBIT_FAILURE;
@@ -1858,7 +1873,8 @@
                               const CubitVector &v2,
                               const CubitVector &v3,
                               DLIList<BodySM*>& results_list,
-                              bool imprint ) const
+                              bool imprint
+                              ) const
 {
 
   MODIFY_CHECK_RETURN_FAILURE;
@@ -1978,10 +1994,11 @@
 // Author     : John Fowler
 // Date       : 10/02
 //===============================================================================
-CubitStatus    FacetModifyEngine::webcut(DLIList<BodySM*>& /*webcut_body_list*/,
-                                 BodySM const* /*tool_body*/,
-                                 DLIList<BodySM*>& /*results_list*/,
-                                 bool /*imprint*/ ) const
+CubitStatus  FacetModifyEngine::webcut(
+             DLIList<BodySM*>& /*webcut_body_list*/,
+             BodySM const* /*tool_body*/,
+             DLIList<BodySM*>& /*results_list*/,
+             bool /*imprint*/ )const
 {
   PRINT_ERROR("Option not supported for mesh based geometry.\n");
   return CUBIT_FAILURE;
@@ -2131,18 +2148,19 @@
 // Author     : John Fowler
 // Date       : 10/02
 //===============================================================================
-CubitStatus FacetModifyEngine::webcut_with_brick( 
-                                      DLIList<BodySM*>& /*webcut_body_list*/, 
-                                      const CubitVector &/*center*/,
-                                      const CubitVector* /*axes[3]*/, 
-                                      const CubitVector &/*extension*/,
-                                      DLIList<BodySM*> &/*results_list*/,
-                                      bool /*imprint*/ )
-{
-  PRINT_ERROR("Option not supported for mesh based geometry.\n");
-  return CUBIT_FAILURE;
-}
 
+//CubitStatus FacetModifyEngine::webcut_with_brick( 
+//                                      DLIList<BodySM*>& /*webcut_body_list*/, 
+//                                      const CubitVector &/*center*/,
+//                                      const CubitVector* /*axes[3]*/, 
+//                                      const CubitVector &/*extension*/,
+//                                      DLIList<BodySM*> &/*results_list*/,
+//                                      bool /*imprint*/ )
+//{
+//  PRINT_ERROR("Option not supported for mesh based geometry.\n");
+//  return CUBIT_FAILURE;
+//}
+
 //===============================================================================
 // Function   : webcut_with_planar_sheet
 // Member Type: PUBLIC

Modified: cgm/trunk/geom/facet/FacetModifyEngine.hpp
===================================================================
--- cgm/trunk/geom/facet/FacetModifyEngine.hpp	2007-08-24 20:05:52 UTC (rev 1252)
+++ cgm/trunk/geom/facet/FacetModifyEngine.hpp	2007-08-24 20:43:22 UTC (rev 1253)
@@ -139,6 +139,10 @@
   
   virtual BodySM* copy_body ( BodySM* bodyPtr) const ;
   
+  virtual CubitStatus stitch_surfs(
+		      DLIList<BodySM*>& surf_bodies,
+		      BodySM*& stitched_body)const;
+
   virtual CubitStatus subtract(DLIList<BodySM*> &tool_body_list,
     DLIList<BodySM*> &from_bodies,
     DLIList<BodySM*> &new_bodies,
@@ -225,7 +229,9 @@
     double draft_angle,
     int draft_type,
     bool switchside,
-    bool rigid) const;
+    bool rigid,
+    Surface *stop_surf = NULL,
+    BodySM  *stop_body = NULL) const;
   
   virtual CubitStatus  sweep_perpendicular(
     DLIList<GeometryEntity*>& ref_ent_list,
@@ -234,7 +240,9 @@
     double draft_angle,
     int draft_type,
     bool switchside,
-    bool rigid) const;
+    bool rigid,
+    Surface* stop_surf = NULL,
+    BodySM  *stop_body = NULL ) const;
   
   virtual CubitStatus  sweep_rotational(
     DLIList<GeometryEntity*>& ref_ent_list,
@@ -247,7 +255,9 @@
     int draft_type = 0,
     bool switchside = CUBIT_FALSE,
     bool make_solid = CUBIT_FALSE,
-    bool rigid = CUBIT_FALSE ) const;
+    bool rigid = CUBIT_FALSE , 
+    Surface *stop_surf = NULL,
+    BodySM  *stop_body = NULL) const;
   
   virtual CubitStatus sweep_along_curve(
     DLIList<GeometryEntity*>& ref_ent_list,
@@ -255,9 +265,10 @@
     DLIList<Curve*>& ref_edge_list,
     double draft_angle = 0.0,
     int draft_type = 0,
-    bool rigid = CUBIT_FALSE ) const;
+    bool rigid = CUBIT_FALSE,
+    Surface *stop_surf = NULL,
+    BodySM  *stop_body = NULL ) const;
  
-
     virtual CubitStatus webcut_with_sweep_surfaces(
                           DLIList<BodySM*> &blank_bodies,
                           DLIList<Surface*> &surfaces,
@@ -308,12 +319,13 @@
     const CubitVector &v2,
     const CubitVector &v3,
     DLIList<BodySM*>& results_list,
-    bool imprint = false ) const;
+    bool imprint = false 
+    ) const;
   
   virtual CubitStatus webcut(DLIList<BodySM*>& webcut_body_list,
     BodySM const* tool_body,
     DLIList<BodySM*>& results_list,
-    bool imprint = false ) const;
+    bool imprint = false)const;
   
   virtual CubitStatus webcut_across_translate( DLIList<BodySM*>& body_list,
     Surface* plane_surf1,
@@ -340,12 +352,13 @@
     DLIList<BodySM*>& results_list,
     bool imprint = false );
   
-  virtual CubitStatus webcut_with_brick( DLIList<BodySM*>& webcut_body_list, 
+/*  virtual CubitStatus webcut_with_brick( DLIList<BodySM*>& webcut_body_list, 
     const CubitVector &center,
     const CubitVector axes[3], 
     const CubitVector &extension,
     DLIList<BodySM*> &results_list,
     bool imprint = false );
+*/
   
   virtual CubitStatus webcut_with_planar_sheet( DLIList<BodySM*>& webcut_body_list,
     const CubitVector &center,




More information about the cgma-dev mailing list