diff --git a/Doc/changelog.docu b/Doc/changelog.docu
index 9e7727ee..573c79a0 100644
--- a/Doc/changelog.docu
+++ b/Doc/changelog.docu
@@ -17,6 +17,7 @@
Core
- Fixed several warnings
+- Make Previous Halfedge Attribute optional again
Tools
diff --git a/src/OpenMesh/Core/Mesh/ArrayItems.hh b/src/OpenMesh/Core/Mesh/ArrayItems.hh
index 503fc735..1d1488cd 100644
--- a/src/OpenMesh/Core/Mesh/ArrayItems.hh
+++ b/src/OpenMesh/Core/Mesh/ArrayItems.hh
@@ -97,6 +97,7 @@ struct ArrayItems
//TODO: should be selected with config.h define
typedef Halfedge_with_prev Halfedge;
+ typedef Halfedge_without_prev HalfedgeNoPrev;
typedef GenProg::Bool2Type HasPrevHalfedge;
//-------------------------------------------------------- internal edge type
diff --git a/src/OpenMesh/Core/Mesh/AttribKernelT.hh b/src/OpenMesh/Core/Mesh/AttribKernelT.hh
index 6e67bc2b..10a46c08 100644
--- a/src/OpenMesh/Core/Mesh/AttribKernelT.hh
+++ b/src/OpenMesh/Core/Mesh/AttribKernelT.hh
@@ -75,10 +75,30 @@ public:
//---------------------------------------------------------------- item types
+ enum Attribs {
+ VAttribs = MeshItems::VAttribs,
+ HAttribs = MeshItems::HAttribs,
+ EAttribs = MeshItems::EAttribs,
+ FAttribs = MeshItems::FAttribs
+ };
+
typedef MeshItems MeshItemsT;
typedef Connectivity ConnectivityT;
typedef typename Connectivity::Vertex Vertex;
- typedef typename Connectivity::Halfedge Halfedge;
+
+ //Define Halfedge based on PrevHalfedge.
+ typedef typename GenProg::IF<
+ (bool)(HAttribs & Attributes::PrevHalfedge),
+ typename Connectivity::Halfedge,
+ typename Connectivity::HalfedgeNoPrev
+ >::Result Halfedge;
+ typedef typename GenProg::IF<
+ (bool)(HAttribs & Attributes::PrevHalfedge),
+ GenProg::Bool2Type,
+ GenProg::Bool2Type
+ >::Result HasPrevHalfedge;
+
+ //typedef typename Connectivity::Halfedge Halfedge;
typedef typename Connectivity::Edge Edge;
typedef typename Connectivity::Face Face;
@@ -98,12 +118,6 @@ public:
typedef AttribKernelT AttribKernel;
- enum Attribs {
- VAttribs = MeshItems::VAttribs,
- HAttribs = MeshItems::HAttribs,
- EAttribs = MeshItems::EAttribs,
- FAttribs = MeshItems::FAttribs
- };
typedef VPropHandleT DataVPropHandle;
typedef HPropHandleT DataHPropHandle;