diff --git a/.gitattributes b/.gitattributes
index efcd7ae4688..15b514a1078 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -2795,6 +2795,19 @@ HalfedgeDS/doc_tex/HalfedgeDS_ref/fig/hds_optional.gif -text svneol=unset#image/
HalfedgeDS/doc_tex/HalfedgeDS_ref/fig/hds_optional.pdf -text svneol=unset#application/pdf
HalfedgeDS/doc_tex/HalfedgeDS_ref/fig/hds_optional_small.gif -text svneol=unset#image/gif
Inscribed_areas/demo/Largest_empty_rect_2/Qt3/help/index.html svneol=native#text/html
+Inscribed_areas/doc/Inscribed_areas/CGAL/Extremal_polygon_traits_2.h -text
+Inscribed_areas/doc/Inscribed_areas/CGAL/Largest_empty_iso_rectangle_2.h -text
+Inscribed_areas/doc/Inscribed_areas/CGAL/extremal_polygon_2.h -text
+Inscribed_areas/doc/Inscribed_areas/Concepts/ExtremalPolygonTraits_2.h -text
+Inscribed_areas/doc/Inscribed_areas/Concepts/LargestEmptyIsoRectangleTraits_2.h -text
+Inscribed_areas/doc/Inscribed_areas/Inscribed_areas.txt -text
+Inscribed_areas/doc/Inscribed_areas/PackageDescription.txt -text
+Inscribed_areas/doc/Inscribed_areas/fig/largestEmptyRect.gif -text svneol=unset#image/gif
+Inscribed_areas/doc/Inscribed_areas/fig/largestEmptyRect.pdf -text svneol=unset#application/pdf
+Inscribed_areas/doc/Inscribed_areas/fig/ler-detail.png -text svneol=unset#image/png
+Inscribed_areas/doc/Inscribed_areas/fig/ler.png -text svneol=unset#image/png
+Inscribed_areas/doc/Inscribed_areas/fig/max_triangle.gif -text svneol=unset#image/gif
+Inscribed_areas/doc/Inscribed_areas/fig/max_triangle.pdf -text svneol=unset#application/pdf
Inscribed_areas/doc_tex/Inscribed_areas/largestEmptyRect.gif -text svneol=unset#image/gif
Inscribed_areas/doc_tex/Inscribed_areas/largestEmptyRect.pdf -text svneol=unset#application/pdf
Inscribed_areas/doc_tex/Inscribed_areas/max_triangle.gif -text svneol=unset#image/gif
diff --git a/Documentation/doxyassist.xml b/Documentation/doxyassist.xml
index bca66aebd1e..ef75d7b6dd2 100644
--- a/Documentation/doxyassist.xml
+++ b/Documentation/doxyassist.xml
@@ -760,8 +760,6 @@ namespace for the XML file to be processed properly. -->
../GraphicsView/doc/GraphicsView/../GraphicsView/doc/GraphicsView/./tags/GraphicsView.tag
-
-
../GraphicsView/doc/GraphicsView/fig
@@ -801,14 +799,8 @@ namespace for the XML file to be processed properly. -->
../Polytope_distance_d/doc/Polytope_distance_d/../Polytope_distance_d/doc/Polytope_distance_d/./tags/Polytope_distance_d.tag
-
- ../Polytope_distance_d/examples
- ../Width_3/examples
- ../Matrix_search/examples
-
+ ../Polytope_distance_d/examples../Polytope_distance_d/doc/Polytope_distance_d/fig
-
-
@@ -819,18 +811,23 @@ namespace for the XML file to be processed properly. -->
../Bounding_volumes/doc/Bounding_volumes/../Bounding_volumes/doc/Bounding_volumes/./tags/Bounding_volumes.tag
-
- ../Min_quadrilateral_2/examples
- ../Min_circle_2/examples
- ../Min_ellipse_2/examples
- ../Min_sphere_d/examples
- ../Approximate_min_ellipsoid_d/examples
- ../Matrix_search/examples
-
+ ../Bounding_volumes/examples../Bounding_volumes/doc/Bounding_volumes/fig
+
+ Inscribed Areas
+ ../Inscribed_areas/doc/Inscribed_areas
+
+ ../Inscribed_areas/doc/Inscribed_areas/
+ ../Inscribed_areas/doc/Inscribed_areas/
+ ./tags/Inscribed_areas.tag
+ ../Inscribed_areas/examples
+ ../Inscribed_areas/doc/Inscribed_areas/fig
+
+
+
2D Snap Rounding
../Snap_rounding_2/doc/Snap_rounding_2
diff --git a/Inscribed_areas/doc/Inscribed_areas/CGAL/Extremal_polygon_traits_2.h b/Inscribed_areas/doc/Inscribed_areas/CGAL/Extremal_polygon_traits_2.h
new file mode 100644
index 00000000000..1d93c713c6a
--- /dev/null
+++ b/Inscribed_areas/doc/Inscribed_areas/CGAL/Extremal_polygon_traits_2.h
@@ -0,0 +1,210 @@
+namespace CGAL {
+
+/*!
+\ingroup PkgInscribedAreas
+
+\advanced The class `Extremal_polygon_area_traits_2` provides the types and
+operations needed to compute a maximum area \f$ k\f$-gon \f$ P_k\f$ that can
+be inscribed into a given convex polygon \f$ P\f$ using the function
+`extremal_polygon_2`.
+
+\tparam K must be a model of `Kernel`.
+
+\models ::ExtremalPolygonTraits_2
+
+\sa `CGAL::maximum_area_inscribed_k_gon_2`
+\sa `CGAL::maximum_perimeter_inscribed_k_gon_2`
+\sa `CGAL::extremal_polygon_2`
+\sa `CGAL::Extremal_polygon_perimeter_traits_2`
+\sa `ExtremalPolygonTraits_2`
+
+*/
+template< typename K >
+class Extremal_polygon_area_traits_2 {
+public:
+
+/// \name Types
+/// @{
+
+/*!
+typedef to `K::FT`.
+*/
+typedef Hidden_type FT;
+
+/*!
+typedef to `K::Point_2`.
+*/
+typedef Hidden_type Point_2;
+
+/*!
+typedef to `K::Less_xy_2`.
+*/
+typedef Hidden_type Less_xy_2;
+
+/*!
+typedef to `K::Orientation_2`.
+*/
+typedef Hidden_type Orientation_2;
+
+/*!
+AdaptableBinaryFunction class `op`:
+`Point_2` \f$ \times\f$ `Point_2` \f$ \rightarrow\f$ `FT`.
+For a fixed `Point_2` \f$ root\f$, `op`\f$ (p,\,q)\f$ returns
+twice the area of the triangle \f$ (root,\, q,\, p)\f$.
+*/
+typedef Hidden_type Operation;
+
+/// @}
+
+/// \name Operations
+/// @{
+
+/*!
+returns 3.
+*/
+int min_k() const;
+
+/*!
+returns `FT(0)`.
+*/
+FT init(const Point_2& p, const Point_2& q)
+const;
+
+/*!
+returns `Operation` where `p` is the fixed
+\f$ root\f$ point.
+*/
+Operation operation( const Point_2& p)
+const;
+
+/*!
+writes the vertices of
+[`points_begin`, `points_end`) forming a maximum area
+triangle rooted at `points_begin[0]` to o and returns the
+past-the-end iterator for that sequence (== `o + 3`).
+*/
+template < class RandomAccessIterator, class
+OutputIterator > OutputIterator compute_min_k_gon(
+RandomAccessIterator points_begin, RandomAccessIterator points_end, FT&
+max_area, OutputIterator o) const;
+
+/*!
+
+*/
+Less_xy_2 less_xy_2_object();
+
+/*!
+
+*/
+Orientation_2 orientation_2_object();
+
+/// @}
+
+}; /* end Extremal_polygon_area_traits_2 */
+
+/*!
+\ingroup PkgInscribedAreas
+
+\advanced The class `Extremal_polygon_perimeter_traits_2` provides the
+types and operations needed to compute a maximum perimeter \f$
+k\f$-gon \f$ P_k\f$ that can be inscribed into a given convex polygon
+\f$ P\f$ using the function `extremal_polygon_2`.
+
+\tparam K must be a model of `Kernel`.
+
+\models ::ExtremalPolygonTraits_2
+
+\sa `CGAL::maximum_area_inscribed_k_gon_2`
+\sa `CGAL::maximum_perimeter_inscribed_k_gon_2`
+\sa `CGAL::extremal_polygon_2`
+\sa `CGAL::Extremal_polygon_area_traits_2`
+\sa `ExtremalPolygonTraits_2`
+
+*/
+template< typename K >
+class Extremal_polygon_perimeter_traits_2 {
+public:
+
+/// \name Types
+/// @{
+
+/*!
+typedef to `K::FT`.
+*/
+typedef Hidden_type FT;
+
+/*!
+typedef to `K::Point_2`.
+*/
+typedef Hidden_type Point_2;
+
+/*!
+typedef to `K::Less_xy_2`.
+*/
+typedef Hidden_type Less_xy_2;
+
+/*!
+typedef to `K::Orientation_2`.
+*/
+typedef Hidden_type Orientation_2;
+
+/*!
+AdaptableBinaryFunction class `op`:
+`Point_2` \f$ \times\f$ `Point_2` \f$ \rightarrow\f$ `FT`.
+For a fixed `Point_2` \f$ root\f$, `op`\f$ (p,\,q)\f$ returns
+\f$ d(r,\,p) + d(p,\,q) - d(r,\,q)\f$ where \f$ d\f$ denotes the Euclidean
+distance.
+*/
+typedef Hidden_type Operation;
+
+/// @}
+
+/// \name Operations
+/// @{
+
+/*!
+returns 2.
+*/
+int min_k() const;
+
+/*!
+returns twice the Euclidean distance between `p` and
+`q`.
+*/
+FT init(const Point_2& p, const Point_2& q)
+const;
+
+/*!
+returns `Operation` where `p` is the fixed
+\f$ root\f$ point.
+*/
+Operation operation( const Point_2& p)
+const;
+
+/*!
+writes the pair
+(`points_begin[0]`, `p`) where `p` is drawn from
+[`points_begin`, `points_end`) such that the Euclidean
+distance between both points is maximized (maximum perimeter
+2-gon rooted at `points_begin[0]`) to o and returns the
+past-the-end iterator for that sequence (== `o + 2`).
+*/
+template < class RandomAccessIterator, class
+OutputIterator > OutputIterator compute_min_k_gon(
+RandomAccessIterator points_begin, RandomAccessIterator points_end, FT&
+max_area, OutputIterator o) const;
+
+/*!
+
+*/
+Less_xy_2 less_xy_2_object();
+
+/*!
+
+*/
+Orientation_2 orientation_2_object();
+
+/// @}
+
+}; /* end Extremal_polygon_perimeter_traits_2 */
+} /* end namespace CGAL */
diff --git a/Inscribed_areas/doc/Inscribed_areas/CGAL/Largest_empty_iso_rectangle_2.h b/Inscribed_areas/doc/Inscribed_areas/CGAL/Largest_empty_iso_rectangle_2.h
new file mode 100644
index 00000000000..c994725508f
--- /dev/null
+++ b/Inscribed_areas/doc/Inscribed_areas/CGAL/Largest_empty_iso_rectangle_2.h
@@ -0,0 +1,186 @@
+
+namespace CGAL {
+
+/*!
+\ingroup PkgInscribedAreas
+
+Given a set of points in the plane, the class `Largest_empty_iso_rectangle_2` is a data
+structure that maintains an iso-rectangle with the largest area among
+all iso-rectangles that are inside a given bounding box( iso-rectangle), and
+that do not contain any point of the point set.
+
+The class `Largest_empty_iso_rectangle_2` expects a model of the concept `LargestEmptyIsoRectangleTraits_2` as its template argument.
+
+Implementation
+--------------
+
+The algorithm is an implementation of \cite o-naler-90. The runtime of an
+insertion or a removal is \f$ O(\log n)\f$. A query takes \f$ O(n^2)\f$ worst
+case time and \f$ O(n \log n)\f$ expected time. The working storage is \f$
+O(n)\f$.
+
+*/
+template< typename T >
+class Largest_empty_iso_rectangle_2 {
+public:
+
+/// \name Types
+/// @{
+
+/*!
+
+*/
+typedef T Traits;
+
+/*!
+
+*/
+typedef Traits::Point_2 Point_2;
+
+/*!
+
+*/
+typedef Traits::Iso_rectangle_2 Iso_rectangle_2;
+
+/*!
+Iterator over the points.
+
+This iterator allows to enumerate the points. It is non mutable,
+bidirectional and its value type is `Point_2`. It is invalidated by
+any insertion or removal of a point.
+*/
+typedef Hidden_type const_iterator;
+
+/// @}
+
+/// \name Creation
+/// @{
+
+/*!
+Constructor. The iso-rectangle `b` is the bounding rectangle.
+*/
+Largest_empty_iso_rectangle_2
+(const Iso_rectangle_2 &b);
+
+/*!
+Constructor. The iso-rectangle whose lower left and upper right points are `p` and
+`q` respectively is the bounding rectangle.
+*/
+Largest_empty_iso_rectangle_2
+(const Point_2 p,const Point_2 q);
+
+/*!
+Constructor. The iso-rectangle whose lower left point and upper right points are (0,0)
+and (1,1) respectively is the bounding rectangle.
+*/
+Largest_empty_iso_rectangle_2
+();
+
+/*!
+Copy constructor.
+*/
+Largest_empty_iso_rectangle_2
+(const Largest_empty_iso_rectangle_2 tr);
+
+/// @}
+
+/// \name Assignment
+/// @{
+
+/*!
+
+*/
+Largest_empty_iso_rectangle_2
+operator=(const Largest_empty_iso_rectangle_2 & tr);
+
+/// @}
+
+/// \name Access Functions
+/// @{
+
+/*!
+Returns a const reference to the traits object.
+*/
+const Traits & traits() const;
+
+/*!
+Returns an iterator to the beginning of the point set.
+*/
+const_iterator begin() const;
+
+/*!
+Returns a past-the-end iterator for the point set.
+*/
+const_iterator end() const;
+
+/// @}
+
+/// \name Queries
+/// @{
+
+/*!
+Returns the four points that define the largest empty iso-rectangle.
+(Note that these points are not necessarily on a corner of an iso-rectangle.)
+*/
+Quadruple
+get_left_bottom_right_top();
+
+/*!
+Returns the largest empty iso-rectangle. (Note that the two
+points defining the iso-rectangle are not necessarily part of
+the point set.)
+*/
+Iso_rectangle_2 get_largest_empty_iso_rectangle();
+
+/*!
+Returns the iso-rectangle passed in the constructor.
+*/
+Iso_rectangle_2 get_bounding_box();
+
+/// @}
+
+/// \name Insertion
+/// @{
+
+/*!
+Inserts point `p` in the point set, if it is not already in the set.
+*/
+void
+insert(const Point_2& p);
+
+/*!
+Inserts point `p` in the point set, if it is not already in the set.
+*/
+void
+push_back(const Point_2& p);
+
+/*!
+Inserts the points in the range \f$ \left[\right.\f$`first`,
+`last`\f$ \left.\right)\f$. Returns the number of inserted points.
+
+\requires The `value_type` of `first` and `last` is `Point`.
+*/
+template < class InputIterator >
+int
+insert(InputIterator first, InputIterator last);
+
+/// @}
+
+/// \name Removal
+/// @{
+
+/*!
+Removes point `p`.
+Returns false iff `p` is not in the point set.
+*/
+bool remove(const Point_2& p);
+
+/*!
+Removes all points of `l`.
+*/
+void clear();
+
+/// @}
+
+}; /* end Largest_empty_iso_rectangle_2 */
+} /* end namespace CGAL */
diff --git a/Inscribed_areas/doc/Inscribed_areas/CGAL/extremal_polygon_2.h b/Inscribed_areas/doc/Inscribed_areas/CGAL/extremal_polygon_2.h
new file mode 100644
index 00000000000..d7839b61573
--- /dev/null
+++ b/Inscribed_areas/doc/Inscribed_areas/CGAL/extremal_polygon_2.h
@@ -0,0 +1,199 @@
+namespace CGAL {
+
+/*!
+\ingroup PkgInscribedAreas
+
+\advanced The function `extremal_polygon_2` computes a maximal \f$
+k\f$-gon that can be inscribed into a given convex polygon. The
+criterion for maximality and some basic operations have to be
+specified in an appropriate traits class parameter.
+
+computes a maximal (as specified by `t`) inscribed \f$ k\f$-gon of
+the convex polygon described by [`points_begin`,
+`points_end`), writes its vertices to `o` and returns the
+past-the-end iterator of this sequence.
+
+\pre
+
the - at least three - points denoted by the range
+[`points_begin`, `points_end`) form the boundary of a
+convex polygon (oriented clock- or counterclockwise).
+
\f$ k \ge \ccc{t.min_k()}\f$.
+
+
+\require
+
`Traits` is a model for `ExtremalPolygonTraits_2`.
+
Value type of `RandomAccessIterator` is `Traits::Point_2`.
+
`OutputIterator` accepts `Traits::Point_2` as value
+type.
+
+
+\sa `CGAL::maximum_area_inscribed_k_gon_2`
+\sa `CGAL::maximum_perimeter_inscribed_k_gon_2`
+\sa `ExtremalPolygonTraits_2`
+\sa `CGAL::monotone_matrix_search`
+
+Implementation
+--------------
+
+The implementation uses monotone matrix search
+\cite akmsw-gamsa-87 and has a worst case running time of \f$ O(k
+\cdot n + n \cdot \log n)\f$, where \f$ n\f$ is the number of vertices in
+\f$ P\f$.
+
+*/
+
+template < class RandomAccessIterator, class OutputIterator, class Traits >
+OutputIterator
+extremal_polygon_2(
+RandomAccessIterator points_begin,
+RandomAccessIterator points_end,
+int k,
+OutputIterator o,
+const Traits& t);
+
+} /* namespace CGAL */
+
+namespace CGAL {
+
+/*!
+\ingroup PkgInscribedAreas
+
+The function `maximum_area_inscribed_k_gon_2` computes a maximum area
+\f$ k\f$-gon \f$ P_k\f$ that can be inscribed into a given convex polygon \f$ P\f$.
+Note that
+
+
\f$ P_k\f$ is not unique in general, but it can be chosen in such a
+way that its vertices form a subset of the vertex set of \f$ P\f$ and
+
the vertices of a maximum area \f$ k\f$-gon, where the \f$ k\f$ vertices
+are to be drawn from a planar point set \f$ S\f$, lie on the convex
+hull of \f$ S\f$ i.e. a convex polygon.
+
+
+computes a maximum area inscribed \f$ k\f$-gon of the convex polygon
+described by [`points_begin`, `points_end`), writes its
+vertices to `o` and returns the past-the-end iterator of this
+sequence.
+
+\pre
+
the - at least three - points denoted by the range
+[`points_begin`, `points_end`) form the boundary of a
+convex polygon (oriented clock- or counterclockwise).
+
\f$ k \ge 3\f$.
+
+
+\require
+
Value type of `RandomAccessIterator` is `K::Point_2`
+where `K` is a model for `Kernel`.
+
`OutputIterator` accepts the value type of
+`RandomAccessIterator` as value type.
+
+
+\sa `CGAL::maximum_perimeter_inscribed_k_gon_2`
+\sa `ExtremalPolygonTraits_2`
+\sa `CGAL::Extremal_polygon_area_traits_2`
+\sa `CGAL::Extremal_polygon_perimeter_traits_2`
+\sa `CGAL::extremal_polygon_2`
+\sa `CGAL::monotone_matrix_search`
+
+Implementation
+--------------
+
+The implementation uses monotone matrix search
+\cite akmsw-gamsa-87 and has a worst case running time of \f$ O(k
+\cdot n + n \cdot \log n)\f$, where \f$ n\f$ is the number of vertices in
+\f$ P\f$.
+
+Example
+--------------
+
+The following code generates a random convex polygon
+`p` with ten vertices and computes the maximum area inscribed
+five-gon of `p`.
+
+\cgalexample{extremal_polygon_2_area.cpp}
+
+*/
+
+template < class RandomAccessIterator, class OutputIterator >
+OutputIterator
+maximum_area_inscribed_k_gon_2(
+RandomAccessIterator points_begin,
+RandomAccessIterator points_end,
+int k,
+OutputIterator o);
+
+} /* namespace CGAL */
+
+namespace CGAL {
+
+/*!
+\ingroup PkgInscribedAreas
+
+The function `maximum_perimeter_inscribed_k_gon_2` computes a maximum perimeter
+\f$ k\f$-gon \f$ P_k\f$ that can be inscribed into a given convex polygon \f$ P\f$.
+Note that
+
+
\f$ P_k\f$ is not unique in general, but it can be chosen in such a
+way that its vertices form a subset of the vertex set of \f$ P\f$ and
+
the vertices of a maximum perimeter \f$ k\f$-gon, where the \f$ k\f$
+vertices are to be drawn from a planar point set \f$ S\f$, lie on the
+convex hull of \f$ S\f$ i.e. a convex polygon.
+
+
+computes a maximum perimeter inscribed \f$ k\f$-gon of the convex polygon
+described by [`points_begin`, `points_end`), writes its
+vertices to `o` and returns the past-the-end iterator of this
+sequence.
+
+\pre
+
the - at least three - points denoted by the range
+[`points_begin`, `points_end`) form the boundary of a
+convex polygon (oriented clock- or counterclockwise).
+
\f$ k \ge 2\f$.
+
+
+\require
+
Value type of `RandomAccessIterator` is `K::Point_2`
+where `K` is a model for `Kernel`.
+
There is a global function `K::FT CGAL::sqrt(K::FT)`
+defined that computes the squareroot of a number.
+
`OutputIterator` accepts the value type of
+`RandomAccessIterator` as value type.
+
+
+\sa `CGAL::maximum_area_inscribed_k_gon_2`
+\sa `ExtremalPolygonTraits_2`
+\sa `CGAL::Extremal_polygon_area_traits_2`
+\sa `CGAL::Extremal_polygon_perimeter_traits_2`
+\sa `CGAL::extremal_polygon_2`
+\sa `CGAL::monotone_matrix_search`
+
+Implementation
+--------------
+
+The implementation uses monotone matrix search
+\cite akmsw-gamsa-87 and has a worst case running time of \f$ O(k
+\cdot n + n \cdot \log n)\f$, where \f$ n\f$ is the number of vertices in
+\f$ P\f$.
+
+Example
+--------------
+
+The following code generates a random convex polygon
+`p` with ten vertices and computes the maximum perimeter inscribed
+five-gon of `p`.
+
+\cgalexample{extremal_polygon_2_perimeter.cpp}
+
+*/
+
+template < class RandomAccessIterator, class OutputIterator >
+OutputIterator
+maximum_perimeter_inscribed_k_gon_2(
+RandomAccessIterator points_begin,
+RandomAccessIterator points_end,
+int k,
+OutputIterator o);
+
+} /* namespace CGAL */
+
diff --git a/Inscribed_areas/doc/Inscribed_areas/Concepts/ExtremalPolygonTraits_2.h b/Inscribed_areas/doc/Inscribed_areas/Concepts/ExtremalPolygonTraits_2.h
new file mode 100644
index 00000000000..c3124420915
--- /dev/null
+++ b/Inscribed_areas/doc/Inscribed_areas/Concepts/ExtremalPolygonTraits_2.h
@@ -0,0 +1,119 @@
+
+/*!
+\ingroup PkgInscribedAreasConcepts
+\cgalconcept
+
+\advanced The concept `ExtremalPolygonTraits_2` provides the types and
+operations needed to compute a maximal \f$ k\f$-gon that can be
+inscribed into a given convex polygon.
+
+\note `ExtremalPolygonTraits_2``::Less_xy_2` and
+`ExtremalPolygonTraits_2``::Orientation_2` are used for (expensive)
+precondition checking only. Therefore, they need not to be
+specified, in case that precondition checking is disabled.
+
+\hasModel `CGAL::Extremal_polygon_area_traits_2`
+\hasModel `CGAL::Extremal_polygon_perimeter_traits_2`
+
+\sa `CGAL::maximum_area_inscribed_k_gon_2`
+\sa `CGAL::maximum_perimeter_inscribed_k_gon_2`
+\sa `CGAL::extremal_polygon_2`
+
+*/
+
+class ExtremalPolygonTraits_2 {
+public:
+
+/// \name Types
+/// @{
+
+/*!
+model for `FieldNumberType`.
+*/
+typedef Hidden_type FT;
+
+/*!
+model for
+`Kernel::Point_2`.
+*/
+typedef Hidden_type Point_2;
+
+/*!
+model for
+`Kernel::Less_xy_2`.
+*/
+typedef Hidden_type Less_xy_2;
+
+/*!
+model for
+`Kernel::Orientation_2`.
+*/
+typedef Hidden_type Orientation_2;
+
+/*!
+AdaptableBinaryFunction class `op`:
+`Point_2` \f$ \times\f$ `Point_2` \f$ \rightarrow\f$ `FT`.
+Together with `init` this operation recursively defines the
+objective function to maximize. Let \f$ p\f$ and \f$ q\f$ be two vertices
+of a polygon \f$ P\f$ such that \f$ q\f$ precedes \f$ p\f$ in the oriented
+vertex chain of \f$ P\f$ starting with vertex \f$ root\f$. Then
+`op(p,q)` returns the value by which an arbitrary
+sub-polygon of \f$ P\f$ with vertices from \f$ [root,\, q]\f$ increases
+when \f$ p\f$ is added to it. E.g. in the maximum area case this is
+the area of the triangle \f$ (root,\, q,\, p)\f$.
+*/
+typedef Hidden_type Operation;
+
+/// @}
+
+/// \name Operations
+/// @{
+
+/*!
+returns the minimal \f$ k\f$ for
+which a maximal \f$ k\f$-gon can be computed. (e.g. in the maximum
+area case this is three.)
+*/
+int min_k() const;
+
+/*!
+returns the value of the objective function for a
+polygon consisting of the two points `p` and `q`. (e.g.
+in the maximum area case this is `FT( 0)`.)
+*/
+FT init( const Point_2& p, const Point_2& q)
+const;
+
+/*!
+return `Operation` where `p` is the fixed \f$ root\f$
+point.
+*/
+Operation operation( const Point_2& p)
+const;
+
+/*!
+writes the
+points of [`points_begin`, `points_end`) forming a
+`min_k()`-gon rooted at `points_begin[0]` of maximal
+value to o and returns the past-the-end iterator for that
+sequence (== `o + min_k()`).
+*/
+template < class RandomAccessIterator, class
+OutputIterator > OutputIterator compute_min_k_gon(
+RandomAccessIterator points_begin, RandomAccessIterator
+points_end, FT& max_area, OutputIterator o) const;
+
+/*!
+
+*/
+Less_xy_2 less_xy_2_object();
+
+/*!
+
+*/
+Orientation_2 orientation_2_object();
+
+/// @}
+
+}; /* end ExtremalPolygonTraits_2 */
+
diff --git a/Inscribed_areas/doc/Inscribed_areas/Concepts/LargestEmptyIsoRectangleTraits_2.h b/Inscribed_areas/doc/Inscribed_areas/Concepts/LargestEmptyIsoRectangleTraits_2.h
new file mode 100644
index 00000000000..bf58002402d
--- /dev/null
+++ b/Inscribed_areas/doc/Inscribed_areas/Concepts/LargestEmptyIsoRectangleTraits_2.h
@@ -0,0 +1,128 @@
+
+/*!
+\ingroup PkgInscribedAreasConcepts
+\cgalconcept
+
+The concept `LargestEmptyIsoRectangleTraits_2` describes the set of requirements to be
+fulfilled by any class used to instantiate the template parameter of
+the class `Largest_empty_iso_rectangle_2`.
+This concept provides the types of the geometric primitives used in
+this class and some function object types for the required
+predicates on those primitives.
+
+\hasModel CGAL::Cartesian
+\hasModel CGAL::Homogeneous
+
+\sa `CGAL::Largest_empty_iso_rectangle_2`
+
+*/
+
+class LargestEmptyIsoRectangleTraits_2 {
+public:
+
+/// \name Types
+/// @{
+
+/*!
+The point type.
+*/
+typedef Hidden_type Point_2;
+
+/*!
+The iso rectangle type.
+*/
+typedef Hidden_type Iso_rectangle_2;
+
+/*!
+Predicate object. Must provide
+the operator
+`Comparison_result operator()(Point_2 p, Point_2 q)`
+which returns
+`SMALLER, EQUAL` or `LARGER`
+according ding to the
+\f$ x\f$-ordering of points `p` and `q`.
+*/
+typedef Hidden_type Compare_x_2;
+
+/*!
+Predicate object. Must provide
+the operator
+`Comparison_result operator()(Point_2 p, Point_2 q)`
+which returns
+`SMALLER, EQUAL` or `LARGER`
+according to the
+\f$ y\f$-ordering of points `p` and `q`.
+*/
+typedef Hidden_type Compare_y_2;
+
+/*!
+Predicate object. Must provide
+the operator
+`bool operator()(Point_2 p, Point_2 q)`
+which returns
+whether `p` is less than `q` according to their \f$ x\f$-ordering.
+*/
+typedef Hidden_type Less_x_2;
+
+/*!
+Predicate object. Must provide
+the operator
+`bool operator()(Point_2 p, Point_2 q)`
+which returns
+whether `p` is less than `q` according to their \f$ y\f$-ordering.
+*/
+typedef Hidden_type Less_y_2;
+
+/// @}
+
+/// \name Creation
+/// Only a default constructor, copy constructor and an assignement
+/// operator are required. Note that further constructors can be
+/// provided.
+/// @{
+
+/*!
+Default constructor.
+*/
+LargestEmptyIsoRectangleTraits_2();
+
+/*!
+Copy constructor
+*/
+LargestEmptyIsoRectangleTraits_2(LargestEmptyIsoRectangleTraits_2);
+
+/*!
+Assignment operator.
+*/
+LargestEmptyIsoRectangleTraits_2 operator=(LargestEmptyIsoRectangleTraits_2 gtr);
+
+/// @}
+
+/// \name Predicate functions
+/// The following functions give access to the predicate and constructor objects.
+/// @{
+
+/*!
+
+*/
+Compare_x_2 compare_x_2_object();
+
+/*!
+
+*/
+Compare_y_2 compare_y_2_object();
+
+/*!
+
+*/
+Less_x_2 less_x_2_object();
+
+/*!
+
+*/
+Less_y_2 less_y_2_object();
+
+/// @}
+
+}; /* end LargestEmptyIsoRectangleTraits_2 */
+
diff --git a/Inscribed_areas/doc/Inscribed_areas/Inscribed_areas.txt b/Inscribed_areas/doc/Inscribed_areas/Inscribed_areas.txt
new file mode 100644
index 00000000000..0dc6589899c
--- /dev/null
+++ b/Inscribed_areas/doc/Inscribed_areas/Inscribed_areas.txt
@@ -0,0 +1,48 @@
+
+\page chapInscribedAreas Inscribed Areas
+
+namespace CGAL {
+/*!
+
+\mainpage Inscribed Areas
+\anchor chapInscribedAreas
+
+\authors Michael Hoffmann and Eli Packer
+
+This chapter describes algorithms which for a given point set compute
+the ``best'' inscribed object from a specific
+class. We provide algorithms for
+computing maximal inscribed \f$ k\f$-gons (triangles, quadrilaterals,
+\f$ \dots\f$ ) of a planar point set \f$ P\f$. Maximal \f$ k\f$-gons are convex, and it
+is known that their vertices can be chosen to be vertices of the
+convex hull of \f$ P\f$. Hence, the functions
+`CGAL::maximum_area_inscribed_k_gon_2` and
+`CGAL::maximum_perimeter_inscribed_k_gon_2` operate on convex polygons
+only. The example below shows that the largest area triangle (green)
+and the largest perimeter triangle (orange, containing the top point)
+of a point set are different in general.
+
+\image html max_triangle.gif
+
+We further provide an algorithm for computing the maximal area
+inscribed axis parallel rectangle
+
+Given a set of points in the plane, the class `CGAL::Largest_empty_iso_rectangle_2`
+is a data structure that maintains an iso-rectangle with the largest area among
+all iso-rectangles that are inside a given iso-rectangles, and
+that do not contain any point of the point set.
+
+\image html largestEmptyRect.gif
+
+Inscribed volumes are also frequently applied to extract
+geometric properties of objects. The largest area triangle is for example used in
+heuristics for matching archaeological aerial photographs. Largest
+perimeter triangles are used in scoring cross country soaring flights,
+where the goal is basically to fly as far as possible, but still
+return to the departure airfield. To score simply based on the total
+distance flown is not a good measure, since circling in thermals
+allows to increase it easily.
+
+*/
+} /* namespace CGAL */
+
diff --git a/Inscribed_areas/doc/Inscribed_areas/PackageDescription.txt b/Inscribed_areas/doc/Inscribed_areas/PackageDescription.txt
new file mode 100644
index 00000000000..88dd5a61ad9
--- /dev/null
+++ b/Inscribed_areas/doc/Inscribed_areas/PackageDescription.txt
@@ -0,0 +1,29 @@
+/// \defgroup PkgInscribedAreas Inscribed Areas
+
+/// \defgroup PkgInscribedAreasConcepts Concepts
+/// \ingroup PkgInscribedAreas
+
+/*!
+\addtogroup PkgInscribedAreas
+\todo check generated documentation
+\PkgDescriptionBegin{Inscribed Areas}
+\PkgPicture{ler-detail.png}
+\PkgAuthor{Michael Hoffmann and Eli Packer}
+\PkgDesc{This package provides algorithms for computing inscribed areas. The algorithms for computing inscribed areas are: the largest inscribed k-gon (area or perimeter) of a convex point set and the largest inscribed iso-rectangle.}
+\PkgSince{1.1}
+\cgalbib{cgal:hp-ia}
+\license{\ref licensesGPL "GPL"}
+\PkgDescriptionEnd
+
+This chapter describes concepts, classes, and functions for
+maximum area and perimeter inscribed \f$ k\f$-gon (2D), extremal inscribed
+\f$ k\f$-gon (2D), largest empty isorectangle (2D).
+
+# Assertions #
+
+The optimization code uses infix `OPTIMISATION` in the assertions,
+e.g. defining the compiler flag
+`CGAL_OPTIMISATION_NO_PRECONDITIONS` switches precondition
+checking off, cf. Section \ref secchecks.
+*/
+
diff --git a/Inscribed_areas/doc/Inscribed_areas/fig/largestEmptyRect.gif b/Inscribed_areas/doc/Inscribed_areas/fig/largestEmptyRect.gif
new file mode 100644
index 00000000000..10989c140e6
Binary files /dev/null and b/Inscribed_areas/doc/Inscribed_areas/fig/largestEmptyRect.gif differ
diff --git a/Inscribed_areas/doc/Inscribed_areas/fig/largestEmptyRect.pdf b/Inscribed_areas/doc/Inscribed_areas/fig/largestEmptyRect.pdf
new file mode 100644
index 00000000000..8fdcac69ebb
Binary files /dev/null and b/Inscribed_areas/doc/Inscribed_areas/fig/largestEmptyRect.pdf differ
diff --git a/Inscribed_areas/doc/Inscribed_areas/fig/ler-detail.png b/Inscribed_areas/doc/Inscribed_areas/fig/ler-detail.png
new file mode 100644
index 00000000000..e7ea8b7a22f
Binary files /dev/null and b/Inscribed_areas/doc/Inscribed_areas/fig/ler-detail.png differ
diff --git a/Inscribed_areas/doc/Inscribed_areas/fig/ler.png b/Inscribed_areas/doc/Inscribed_areas/fig/ler.png
new file mode 100644
index 00000000000..b3a41e86c52
Binary files /dev/null and b/Inscribed_areas/doc/Inscribed_areas/fig/ler.png differ
diff --git a/Inscribed_areas/doc/Inscribed_areas/fig/max_triangle.gif b/Inscribed_areas/doc/Inscribed_areas/fig/max_triangle.gif
new file mode 100644
index 00000000000..5501d21f1a9
Binary files /dev/null and b/Inscribed_areas/doc/Inscribed_areas/fig/max_triangle.gif differ
diff --git a/Inscribed_areas/doc/Inscribed_areas/fig/max_triangle.pdf b/Inscribed_areas/doc/Inscribed_areas/fig/max_triangle.pdf
new file mode 100644
index 00000000000..fcb69f33acf
Binary files /dev/null and b/Inscribed_areas/doc/Inscribed_areas/fig/max_triangle.pdf differ