Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/browser/layout.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/browser/layout.py	(revision 12633)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/browser/layout.py	(revision 12634)
@@ -34,5 +34,5 @@
 from waeup.ikoba.interfaces import IIkobaObject, IUserAccount, IIkobaUtils
 from waeup.ikoba.interfaces import MessageFactory as _
-from waeup.ikoba.utils.helpers import to_timezone
+from waeup.ikoba.utils.helpers import to_timezone, format_date
 from waeup.ikoba.authentication import get_principal_role_manager
 from waeup.ikoba.browser.interfaces import ICustomerNavigationBase
@@ -284,8 +284,5 @@
 
     def formatDate(self,dateobj):
-        if isinstance(dateobj, date):
-            return dateobj.strftime("%d/%m/%Y")
-        else:
-            return None
+        return format_date(dateobj, self.request)
             
     def formatTZDate(self,datetimeobj):
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser.py	(revision 12633)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser.py	(revision 12634)
@@ -51,5 +51,6 @@
 from waeup.ikoba.mandates.mandate import PasswordMandate
 from waeup.ikoba.widgets.hrefwidget import HREFDisplayWidget
-from waeup.ikoba.utils.helpers import get_current_principal, to_timezone, now
+from waeup.ikoba.utils.helpers import (
+    get_current_principal, to_timezone, now, format_date)
 from waeup.ikoba.customers.interfaces import (
     ICustomer, ICustomersContainer, ICustomerRequestPW, ICustomersUtils,
@@ -1593,4 +1594,11 @@
 
     @property
+    def validity_period(self):
+        if self.context.valid_from or self.context.valid_to:
+            return "%s - %s" % (format_date(self.context.valid_from, self.request),
+                                format_date(self.context.valid_to, self.request))
+        return
+
+    @property
     def label(self):
         portal_language = getUtility(IIkobaUtils).PORTAL_LANGUAGE
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser_templates/contractpage.pt
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser_templates/contractpage.pt	(revision 12633)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/browser_templates/contractpage.pt	(revision 12634)
@@ -26,4 +26,17 @@
     </tr>
     <tal:widgets content="structure provider:widgets" />
+    <tr>
+      <td i18n:translate="" class="fieldname">
+        Validity Period:
+      </td>
+      <td>
+        <span tal:content="python: layout.formatDate(context.valid_from)">
+          VALIDFROM
+        </span> -
+        <span tal:content="python: layout.formatDate(context.valid_to)">
+          VALIDTO
+        </span>
+      </td>
+    </tr>
   </tbody>
 </table>
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_browser.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_browser.py	(revision 12633)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/tests/test_browser.py	(revision 12634)
@@ -1444,4 +1444,6 @@
         self.contract.product_object = self.product
         self.contract.tc_dict = {'en': u'<strong>Hello world</strong>'}
+        self.contract.valid_from = date(2015, 12, 4)
+        self.contract.valid_to = 'anything'
         self.contract.title = u'Contract Title'
         self.browser.open(self.customer_path + '/contracts/CON1')
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/utils.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/utils.py	(revision 12633)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/customers/utils.py	(revision 12634)
@@ -410,6 +410,13 @@
                 data.extend(creator.fromStringList(customer.history.messages))
 
+        # Insert validity period
+        if getattr(view, 'validity_period', None):
+            vp_translation = trans(_('Validity Period'), portal_language)
+            data.append(Paragraph(vp_translation, HEADING_STYLE))
+            vp = view.validity_period
+            data.append(Paragraph(vp, NOTE_STYLE))
+
         # Insert content tables (optionally on second page)
-        if hasattr(view, 'tabletitle'):
+        if getattr(view, 'tabletitle', None):
             for i in range(len(view.tabletitle)):
                 if tabledata[i] and tableheader[i]:
@@ -422,5 +429,5 @@
 
         # Insert terms and conditions
-        if hasattr(view, 'terms_and_conditions'):
+        if getattr(view, 'terms_and_conditions', None):
             tc_translation = trans(_('Terms and Conditions'), portal_language)
             data.append(Paragraph(tc_translation, HEADING_STYLE))
Index: /main/waeup.ikoba/trunk/src/waeup/ikoba/utils/helpers.py
===================================================================
--- /main/waeup.ikoba/trunk/src/waeup/ikoba/utils/helpers.py	(revision 12633)
+++ /main/waeup.ikoba/trunk/src/waeup/ikoba/utils/helpers.py	(revision 12634)
@@ -30,4 +30,5 @@
 from cStringIO import StringIO
 from docutils.core import publish_string
+from zope.i18n import translate
 from zope.component import getUtility
 from zope.component.interfaces import IFactory
@@ -40,4 +41,5 @@
 from zope.pluggableauth.interfaces import IAuthenticatorPlugin
 from zope.formlib.widget import renderElement
+from waeup.ikoba.interfaces import MessageFactory as _
 
 BUFSIZE = 8 * 1024
@@ -859,2 +861,8 @@
                 contents=ReST2HTML(text))
     return elements
+
+def format_date(dateobj, request):
+    if isinstance(dateobj, datetime.date):
+        return dateobj.strftime("%d/%m/%Y")
+    else:
+        return translate(_('indefinite'), context=request)
