[med-svn] [gnumed-client] 01/03: New upstream version 1.6.9+dfsg

Andreas Tille tille at debian.org
Tue Sep 13 13:57:26 UTC 2016


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository gnumed-client.

commit 1f4f1f865b945fb8df36a120d1e62ad1fbaff3af
Author: Andreas Tille <tille at debian.org>
Date:   Tue Sep 13 15:45:57 2016 +0200

    New upstream version 1.6.9+dfsg
---
 client/CHANGELOG                            |  17 ++
 client/business/gmAllergy.py                |  32 ++-
 client/business/gmAutoHints.py              |   6 +-
 client/business/gmDICOM.py                  |  12 +
 client/business/gmMedication.py             | 373 ++++++++++++++++++++++------
 client/doc/schema/gnumed-entire_schema.html |   2 +-
 client/gnumed.py                            |   2 +-
 client/po/ar-gnumed.mo                      | Bin 2373 -> 2373 bytes
 client/po/ar.po                             |  80 +++++-
 client/po/bg-gnumed.mo                      | Bin 1340 -> 1340 bytes
 client/po/bg.po                             |  80 +++++-
 client/po/ca-gnumed.mo                      | Bin 25469 -> 25469 bytes
 client/po/ca.po                             | 104 ++++++--
 client/po/cs-gnumed.mo                      | Bin 27310 -> 27310 bytes
 client/po/cs.po                             |  99 ++++++--
 client/po/da-gnumed.mo                      | Bin 3284 -> 3284 bytes
 client/po/da.po                             |  94 +++++--
 client/po/de-gnumed.mo                      | Bin 492632 -> 493408 bytes
 client/po/de.po                             | 112 +++++++--
 client/po/el-gnumed.mo                      | Bin 108365 -> 108365 bytes
 client/po/el.po                             | 112 +++++++--
 client/po/en_AU-gnumed.mo                   | Bin 4988 -> 4988 bytes
 client/po/en_AU.po                          |  92 +++++--
 client/po/en_CA-gnumed.mo                   | Bin 15065 -> 15065 bytes
 client/po/en_CA.po                          | 103 ++++++--
 client/po/es-gnumed.mo                      | Bin 515202 -> 514765 bytes
 client/po/es.po                             | 124 ++++++---
 client/po/fr-gnumed.mo                      | Bin 152053 -> 152053 bytes
 client/po/fr.po                             | 105 ++++++--
 client/po/id-gnumed.mo                      | Bin 4526 -> 4526 bytes
 client/po/id.po                             |  84 ++++++-
 client/po/it-gnumed.mo                      | Bin 101242 -> 101242 bytes
 client/po/it.po                             | 104 ++++++--
 client/po/ka-gnumed.mo                      | Bin 1928 -> 1928 bytes
 client/po/ka.po                             | 100 ++++++--
 client/po/nb-gnumed.mo                      | Bin 2194 -> 2194 bytes
 client/po/nb.po                             |  96 +++++--
 client/po/nl-gnumed.mo                      | Bin 141767 -> 141767 bytes
 client/po/nl.po                             | 106 ++++++--
 client/po/pl-gnumed.mo                      | Bin 38003 -> 38003 bytes
 client/po/pl.po                             | 109 ++++++--
 client/po/pt-gnumed.mo                      | Bin 124922 -> 124922 bytes
 client/po/pt.po                             | 108 ++++++--
 client/po/pt_BR-gnumed.mo                   | Bin 149991 -> 149991 bytes
 client/po/pt_BR.po                          | 106 ++++++--
 client/po/ro-gnumed.mo                      | Bin 1311 -> 1311 bytes
 client/po/ro.po                             |  80 +++++-
 client/po/ru-gnumed.mo                      | Bin 431563 -> 431563 bytes
 client/po/ru.po                             | 109 ++++++--
 client/po/ru_RU-gnumed.mo                   | Bin 451187 -> 451187 bytes
 client/po/ru_RU.po                          | 109 ++++++--
 client/po/sq-gnumed.mo                      | Bin 33489 -> 33489 bytes
 client/po/sq.po                             |  99 ++++++--
 client/po/sr-gnumed.mo                      | Bin 14583 -> 14583 bytes
 client/po/sr.po                             | 101 ++++++--
 client/po/sv-gnumed.mo                      | Bin 65951 -> 65951 bytes
 client/po/sv.po                             | 103 ++++++--
 client/po/tr-gnumed.mo                      | Bin 1940 -> 1940 bytes
 client/po/tr.po                             |  80 +++++-
 client/po/uk-gnumed.mo                      | Bin 862 -> 862 bytes
 client/po/uk.po                             |  80 +++++-
 client/po/zh_TW-gnumed.mo                   | Bin 2740 -> 2740 bytes
 client/po/zh_TW.po                          |  80 +++++-
 client/pycommon/gmDateTime.py               |  42 +++-
 client/pycommon/gmShellAPI.py               |   2 +
 client/pycommon/gmTools.py                  |   5 +-
 client/wxpython/gmAutoHintWidgets.py        |   1 -
 client/wxpython/gmEncounterWidgets.py       |   6 +-
 client/wxpython/gmFormWidgets.py            |   5 +-
 client/wxpython/gmMacro.py                  | 177 ++++++-------
 client/wxpython/gmMeasurementWidgets.py     |  19 ++
 client/wxpython/gmPatOverviewWidgets.py     |  53 ++--
 client/wxpython/gmSoapSTCWidgets.py         |  23 +-
 client/wxpython/gmTextCtrl.py               |  58 ++++-
 74 files changed, 2850 insertions(+), 744 deletions(-)

diff --git a/client/CHANGELOG b/client/CHANGELOG
index 8723c0b..aa1c7c3 100644
--- a/client/CHANGELOG
+++ b/client/CHANGELOG
@@ -6,6 +6,23 @@
 # rel-1-6-patches
 ------------------------------------------------
 
+	1.6.9
+
+FIX: faulty detection of dynamic hint applicability
+FIX: exception on Orthanc port out of bounds
+FIX: setting address from list in receiver selection widget
+FIX: no EMR user interaction when updating active encounter display
+FIX: faulty by-day measurements display after patient change
+
+IMPROVED: start-end formatting of substance intake
+IMPROVED: select unicode character from SOAP STC context menu
+IMPROVED: edit test results by context menu from lists
+IMPROVED: AMTS data file generation (v2 -> v2.3)
+IMPROVED: color of focussed line in STC-based SOAP editor
+IMPROVED: information in Hx box of patient overview plugin
+
+NEW: placeholder $<if_not_empty>$
+
 	1.6.8
 
 FIX: remove dynamic hint lacking evidence of clinical relevance
diff --git a/client/business/gmAllergy.py b/client/business/gmAllergy.py
index acbe75f..9d29ba4 100644
--- a/client/business/gmAllergy.py
+++ b/client/business/gmAllergy.py
@@ -155,7 +155,7 @@ class cAllergyState(gmBusinessDBObject.cBusinessDBObject):
 	as_amts_latex = property(_get_as_amts_latex, lambda x:x)
 
 	#--------------------------------------------------------
-	def _get_as_amts_data(self, strict=True):
+	def _get_as_amts_data_v_2_0(self, strict=True):
 		lines = []
 		# Trennzeile für bessere Lesbarkeit als leere Zwischenüberschrift
 		lines.append(u'$ ')
@@ -176,6 +176,21 @@ class cAllergyState(gmBusinessDBObject.cBusinessDBObject):
 				lines.append(u'@%s' % self['comment'])
 		return lines
 
+	#--------------------------------------------------------
+	def _get_as_amts_data(self, strict=True):
+		# Zwischenüberschrift
+		state = u'%s (%s)' % (self.state_string, gmDateTime.pydt_strftime(self['last_confirmed'], '%b %Y'))
+		if strict:
+			state = state[:32]
+		# Freitextzeile
+		if self['comment'] is None:
+			comment = u''
+		else:
+			comment = u'<X t="%s"/>' % self['comment']
+			if strict:
+				comment = u'<X t="%s"/>' % self['comment'][:200]
+		return u'<S t="%s">%s%%s</S>' % (state, comment)
+
 	as_amts_data = property(_get_as_amts_data, lambda x:x)
 
 	#--------------------------------------------------------
@@ -300,7 +315,7 @@ class cAllergy(gmBusinessDBObject.cBusinessDBObject):
 	as_amts_latex = property(_get_as_amts_latex, lambda x:x)
 
 	#--------------------------------------------------------
-	def _get_as_amts_data(self, strict=True):
+	def _get_as_amts_data_v_2_0(self, strict=True):
 		# Freitextzeile: 200 Zeichen, @..., \textwidth
 		txt = u'@%s %s%s' % (
 			self['descriptor'],
@@ -311,6 +326,18 @@ class cAllergy(gmBusinessDBObject.cBusinessDBObject):
 			return txt[:200]
 		return txt
 
+	#--------------------------------------------------------
+	def _get_as_amts_data(self, strict=True):
+		txt = u'%s %s%s' % (
+			self['descriptor'],
+			self['l10n_type'],
+			gmTools.coalesce(self['reaction'], u'', u': %s')
+		)
+		if strict:
+			txt = txt[:200]
+		# Freitextzeile: 200 Zeichen
+		return u'<X t="%s"/>' % txt
+
 	as_amts_data = property(_get_as_amts_data, lambda x:x)
 
 #============================================================
@@ -359,6 +386,7 @@ def create_allergy(allergene=None, allg_type=None, episode_id=None, encounter_id
 	allergy = cAllergy(aPK_obj = rows[0][0])
 
 	return allergy
+
 #============================================================
 # main - unit testing
 #------------------------------------------------------------
diff --git a/client/business/gmAutoHints.py b/client/business/gmAutoHints.py
index 96f7440..7230585 100644
--- a/client/business/gmAutoHints.py
+++ b/client/business/gmAutoHints.py
@@ -174,9 +174,9 @@ def get_hints_for_patient(pk_identity=None, include_suppressed_needing_invalidat
 	idx = gmPG2.get_col_indices(curs)
 	curs.close()
 	conn.rollback()
-	if not include_suppressed_needing_invalidation:
-		return [ cDynamicHint(row = {'data': r, 'idx': idx, 'pk_field': 'pk_auto_hint'}) for r in rows if r['rationale4suppression'] != 'magic_tag::please_invalidate_suppression' ]
-	return [ cDynamicHint(row = {'data': r, 'idx': idx, 'pk_field': 'pk_auto_hint'}) for r in rows ]
+	if include_suppressed_needing_invalidation:
+		return [ cDynamicHint(row = {'data': r, 'idx': idx, 'pk_field': 'pk_auto_hint'}) for r in rows ]
+	return [ cDynamicHint(row = {'data': r, 'idx': idx, 'pk_field': 'pk_auto_hint'}) for r in rows if r['rationale4suppression'] != 'magic_tag::please_invalidate_suppression' ]
 
 #------------------------------------------------------------
 def suppress_dynamic_hint(pk_hint=None, rationale=None, pk_encounter=None):
diff --git a/client/business/gmDICOM.py b/client/business/gmDICOM.py
index d8bdf6e..4a2713e 100644
--- a/client/business/gmDICOM.py
+++ b/client/business/gmDICOM.py
@@ -814,6 +814,9 @@ class cOrthancServer:
 		except socket.error:
 			_log.exception('cannot GET: %s', full_url)
 			return False
+		except OverflowError:
+			_log.exception('cannot GET: %s', full_url)
+			return False
 
 		if not (response.status in [ 200 ]):
 			_log.error('cannot GET: %s', full_url)
@@ -843,6 +846,9 @@ class cOrthancServer:
 		except socket.error:
 			_log.exception('cannot POST: %s', url)
 			return False
+		except OverflowError:
+			_log.exception('cannot POST: %s', url)
+			return False
 
 		if response.status == 404:
 			_log.debug('no data, response: %s', response)
@@ -875,6 +881,9 @@ class cOrthancServer:
 		except socket.error:
 			_log.exception('cannot PUT: %s', url)
 			return False
+		except OverflowError:
+			_log.exception('cannot PUT: %s', url)
+			return False
 
 		if response.status == 404:
 			_log.debug('no data, response: %s', response)
@@ -898,6 +907,9 @@ class cOrthancServer:
 		except socket.error:
 			_log.exception('cannot DELETE: %s', url)
 			return False
+		except OverflowError:
+			_log.exception('cannot DELETE: %s', full_url)
+			return False
 
 		if not (response.status in [ 200 ]):
 			_log.error('cannot DELETE: %s', url)
diff --git a/client/business/gmMedication.py b/client/business/gmMedication.py
index 350507e..ce18704 100644
--- a/client/business/gmMedication.py
+++ b/client/business/gmMedication.py
@@ -11,9 +11,10 @@ import logging
 import csv
 import io
 import os
-import re as regex
 import subprocess
 import decimal
+import uuid
+import re as regex
 from xml.etree import ElementTree as etree
 import datetime as pydt
 
@@ -2466,109 +2467,207 @@ class cSubstanceIntakeEntry(gmBusinessDBObject.cBusinessDBObject):
 	medically_formatted_start = property(_get_medically_formatted_start, lambda x:x)
 
 	#--------------------------------------------------------
+	def _get_medically_formatted_start_end_of_stopped(self, now):
+
+		# format intro
+		if gmDateTime.pydt_is_today(self._payload[self._idx['discontinued']]):
+			intro = _(u'until today')
+		else:
+			ended_ago = now - self._payload[self._idx['discontinued']]
+			intro = _(u'until %s%s ago') % (
+				gmTools.u_almost_equal_to,
+				gmDateTime.format_interval_medically(ended_ago),
+			)
+
+		# format start
+		if self._payload[self._idx['started']] is None:
+			start = gmTools.coalesce(self._payload[self._idx['comment_on_start']], u'?')
+		else:
+			start = u'%s%s%s' % (
+				gmTools.bool2subst((self._payload[self._idx['comment_on_start']] is None), u'', gmTools.u_almost_equal_to),
+				gmDateTime.pydt_strftime(self._payload[self._idx['started']], format = '%Y %b %d', encoding = u'utf8', accuracy = gmDateTime.acc_days),
+				gmTools.coalesce(self._payload[self._idx['comment_on_start']], u'', u' [%s]')
+			)
+
+		# format duration taken
+		if self._payload[self._idx['started']] is None:
+			duration_taken_str = u'?'
+		else:
+			duration_taken = self._payload[self._idx['discontinued']] - self._payload[self._idx['started']] + pydt.timedelta(days = 1)
+			duration_taken_str = gmDateTime.format_interval (duration_taken, gmDateTime.acc_days)
+
+		# format duration planned
+		if self._payload[self._idx['duration']] is None:
+			duration_planned_str = u''
+		else:
+			duration_planned_str = _(u' [planned: %s]') % gmDateTime.format_interval(self._payload[self._idx['duration']], gmDateTime.acc_days)
+
+		# format end
+		end = gmDateTime.pydt_strftime(self._payload[self._idx['discontinued']], '%Y %b %d', u'utf8', gmDateTime.acc_days)
+
+		# assemble
+		txt = u'%s (%s %s %s%s %s %s)' % (
+			intro,
+			start,
+			gmTools.u_arrow2right_thick,
+			duration_taken_str,
+			duration_planned_str,
+			gmTools.u_arrow2right_thick,
+			end
+		)
+		return txt
+
+	#--------------------------------------------------------
 	def _get_medically_formatted_start_end(self):
 
 		now = gmDateTime.pydt_now_here()
 
-		if self._payload[self._idx['comment_on_start']] is None:
-			start_prefix = u''
-		else:
-			start_prefix = gmTools.u_almost_equal_to
+		# medications stopped today or before today
+		if self._payload[self._idx['discontinued']] is not None:
+			if (self._payload[self._idx['discontinued']] < now) or (gmDateTime.pydt_is_today(self._payload[self._idx['discontinued']])):
+				return self._get_medically_formatted_start_end_of_stopped(now)
 
-		# ongoing medication
-		if self._payload[self._idx['discontinued']] is None:
-			# calculate start string
-			if self._payload[self._idx['started']] is None:
-				start = gmTools.coalesce(self._payload[self._idx['comment_on_start']], u'?')
-			else:
+		# ongoing medications
+		arrow_parts = []
+
+		# format start
+		if self._payload[self._idx['started']] is None:
+			start_str = gmTools.coalesce(self._payload[self._idx['comment_on_start']], u'?')
+		else:
+			start_prefix = gmTools.bool2subst((self._payload[self._idx['comment_on_start']] is None), u'', gmTools.u_almost_equal_to)
+			# starts today
+			if gmDateTime.pydt_is_today(self._payload[self._idx['started']]):
+				start_str = _(u'today (%s)') % gmDateTime.pydt_strftime(self._payload[self._idx['started']], format = '%Y %b %d', encoding = u'utf8', accuracy = gmDateTime.acc_days)
+			# started in the past
+			elif self._payload[self._idx['started']] < now:
 				started_ago = now - self._payload[self._idx['started']]
 				three_months = pydt.timedelta(weeks = 13, days = 3)
 				five_years = pydt.timedelta(weeks = 265)
 				if started_ago < three_months:
-					start = _('%s%s%s (%s ago)') % (
+					start_str = _('%s%s%s (%s%s ago, in %s)') % (
 						start_prefix,
-						gmDateTime.pydt_strftime(self._payload[self._idx['started']], format = '%Y %b %d', encoding = u'utf8', accuracy = gmDateTime.acc_days),
+						gmDateTime.pydt_strftime(self._payload[self._idx['started']], format = '%b %d', encoding = u'utf8', accuracy = gmDateTime.acc_days),
 						gmTools.coalesce(self._payload[self._idx['comment_on_start']], u'', u' [%s]'),
-						gmDateTime.format_interval_medically(started_ago)
+						gmTools.u_almost_equal_to,
+						gmDateTime.format_interval_medically(started_ago),
+						gmDateTime.pydt_strftime(self._payload[self._idx['started']], format = '%Y', encoding = u'utf8', accuracy = gmDateTime.acc_days)
 					)
 				elif started_ago < five_years:
-					start = _('%s%s%s (%s ago, %s)') % (
+					start_str = _('%s%s%s (%s%s ago, %s)') % (
 						start_prefix,
 						gmDateTime.pydt_strftime(self._payload[self._idx['started']], '%Y %b', u'utf8', gmDateTime.acc_months),
 						gmTools.coalesce(self._payload[self._idx['comment_on_start']], u'', u' [%s]'),
+						gmTools.u_almost_equal_to,
 						gmDateTime.format_interval_medically(started_ago),
 						gmDateTime.pydt_strftime(self._payload[self._idx['started']], '%b %d', u'utf8', gmDateTime.acc_days)
 					)
 				else:
-					start = _('%s%s%s (%s ago, %s)') % (
+					start_str = _('%s%s%s (%s%s ago, %s)') % (
 						start_prefix,
 						gmDateTime.pydt_strftime(self._payload[self._idx['started']], '%Y', u'utf8', gmDateTime.acc_years),
 						gmTools.coalesce(self._payload[self._idx['comment_on_start']], u'', u' [%s]'),
+						gmTools.u_almost_equal_to,
 						gmDateTime.format_interval_medically(started_ago),
 						gmDateTime.pydt_strftime(self._payload[self._idx['started']], '%b %d', u'utf8', gmDateTime.acc_days),
 					)
+			# starts in the future
+			else:
+				starts_in = self._payload[self._idx['started']] - now
+				start_str = _('%s%s%s (in %s%s)') % (
+					start_prefix,
+					gmDateTime.pydt_strftime(self._payload[self._idx['started']], '%Y %b %d', u'utf8', gmDateTime.acc_days),
+					gmTools.coalesce(self._payload[self._idx['comment_on_start']], u'', u' [%s]'),
+					gmTools.u_almost_equal_to,
+					gmDateTime.format_interval_medically(starts_in)
+				)
 
-			# calculate end string
+		arrow_parts.append(start_str)
+
+		# format durations
+		durations = []
+		if self._payload[self._idx['discontinued']] is not None:
+			if self._payload[self._idx['started']] is not None:
+				duration_documented = self._payload[self._idx['discontinued']] - self._payload[self._idx['started']]
+				durations.append(_(u'%s (documented)') % gmDateTime.format_interval(duration_documented, gmDateTime.acc_days))
+		if self._payload[self._idx['duration']] is not None:
+			durations.append(_(u'%s (plan)') % gmDateTime.format_interval(self._payload[self._idx['duration']], gmDateTime.acc_days))
+		if len(durations) == 0:
 			if self._payload[self._idx['is_long_term']]:
-				end = u' %s %s' % (gmTools.u_arrow2right, gmTools.u_infinity)
-				if self._payload[self._idx['duration']] is not None:
-					duration = gmDateTime.format_interval(self._payload[self._idx['duration']], gmDateTime.acc_days)
-					if self._payload[self._idx['started']] is None:
-						planned_end_str = u''
-					else:
-						planned_end = self._payload[self._idx['started']] + self._payload[self._idx['duration']] - pydt.timedelta(days = 1)
-						if planned_end < now:
-							planned_end_from_now_str = _(u'%s ago') % gmDateTime.format_interval(now - planned_end, gmDateTime.acc_days)
-						else:
-							planned_end_from_now_str = _(u'in %s') % gmDateTime.format_interval(planned_end - now, gmDateTime.acc_days)
-						planned_end_str = _(u', until %s (%s)') % (
-							gmDateTime.pydt_strftime(planned_end, '%Y %b %d', u'utf8', gmDateTime.acc_days),
-							planned_end_from_now_str
-						)
-					end += _(u' (planned for %s%s)') % (duration, planned_end_str)
+				duration_str = gmTools.u_infinity
+			else:
+				duration_str = u'?'
+		else:
+			duration_str = u', '.join(durations)
+
+		arrow_parts.append(duration_str)
+
+		# format end
+		if self._payload[self._idx['discontinued']] is None:
+			if self._payload[self._idx['duration']] is None:
+				end_str = u'?'
 			else:
-				if self._payload[self._idx['duration']] is None:
-					end = u' %s ?' % gmTools.u_arrow2right
+				if self._payload[self._idx['started']] is None:
+					end_str = u'?'
 				else:
-					duration = gmDateTime.format_interval(self._payload[self._idx['duration']], gmDateTime.acc_days)
-					if self._payload[self._idx['started']] is None:
-						planned_end_str = u''
+					planned_end = self._payload[self._idx['started']] + self._payload[self._idx['duration']] - pydt.timedelta(days = 1)
+					if planned_end.year == now.year:
+						end_template = '%b %d'
+						if planned_end < now:
+							planned_end_from_now_str = _(u'%s ago, in %s') % (gmDateTime.format_interval(now - planned_end, gmDateTime.acc_days), planned_end.year)
+						else:
+							planned_end_from_now_str = _(u'in %s, %s') % (gmDateTime.format_interval(planned_end - now, gmDateTime.acc_days), planned_end.year)
 					else:
-						planned_end = self._payload[self._idx['started']] + self._payload[self._idx['duration']]
+						end_template = '%Y'
 						if planned_end < now:
-							planned_end_from_now_str = _(u'%s ago') % gmDateTime.format_interval(now - planned_end, gmDateTime.acc_days)
+							planned_end_from_now_str = _(u'%s ago = %s') % (
+								gmDateTime.format_interval(now - planned_end, gmDateTime.acc_days),
+								gmDateTime.pydt_strftime(planned_end, '%b %d', u'utf8', gmDateTime.acc_days)
+							)
 						else:
-							planned_end_from_now_str = _(u'in %s') % gmDateTime.format_interval(planned_end - now, gmDateTime.acc_days)
-						planned_end_str = _(u', until %s (%s)') % (
-							gmDateTime.pydt_strftime(planned_end, '%Y %b %d', u'utf8', gmDateTime.acc_days),
-							planned_end_from_now_str
-						)
-					end = _(u', planned for %s%s') % (duration, planned_end_str)
-
-			txt = u'%s%s' % (start, end)
-
-		# stopped medication
+							planned_end_from_now_str = _(u'in %s = %s') % (
+								gmDateTime.format_interval(planned_end - now, gmDateTime.acc_days),
+								gmDateTime.pydt_strftime(planned_end, '%b %d', u'utf8', gmDateTime.acc_days)
+							)
+					end_str = u'%s (%s)' % (
+						gmDateTime.pydt_strftime(planned_end, end_template, u'utf8', gmDateTime.acc_days),
+						planned_end_from_now_str
+					)
 		else:
-			duration_taken = self._payload[self._idx['discontinued']] - self._payload[self._idx['started']] + pydt.timedelta(days = 1)
-			if self._payload[self._idx['started']] is None:
-				start = gmTools.coalesce(self._payload[self._idx['comment_on_start']], u'?')
+			if gmDateTime.is_today(self._payload[self._idx['discontinued']]):
+				end_str = _(u'today')
+			elif self._payload[self._idx['discontinued']].year == now.year:
+				end_date_template = '%b %d'
+				if self._payload[self._idx['discontinued']] < now:
+					planned_end_from_now_str = _(u'%s ago, in %s') % (
+						gmDateTime.format_interval(now - self._payload[self._idx['discontinued']], gmDateTime.acc_days),
+						self._payload[self._idx['discontinued']].year
+					)
+				else:
+					planned_end_from_now_str = _(u'in %s, %s') % (
+						gmDateTime.format_interval(self._payload[self._idx['discontinued']] - now, gmDateTime.acc_days),
+						self._payload[self._idx['discontinued']].year
+					)
 			else:
-				start = u'%s%s%s' % (
-					start_prefix,
-					gmDateTime.pydt_strftime(self._payload[self._idx['started']], format = '%Y %b %d', encoding = u'utf8', accuracy = gmDateTime.acc_days),
-					gmTools.coalesce(self._payload[self._idx['comment_on_start']], u'', u' [%s]')
-				)
-			ended_ago = now - self._payload[self._idx['discontinued']]
-			txt = _(u'%s %s ago (for %s: %s %s %s)') % (
-				gmTools.u_arrow2right_until_vertical_bar,
-				gmDateTime.format_interval_medically(ended_ago),
-				gmDateTime.format_interval_medically(duration_taken),
-				start,
-				gmTools.u_arrow2right,
-				gmDateTime.pydt_strftime(self._payload[self._idx['discontinued']], '%Y %b %d', u'utf8', gmDateTime.acc_days)
+				end_date_template = '%Y'
+				if self._payload[self._idx['discontinued']] < now:
+					planned_end_from_now_str = _(u'%s ago = %s') % (
+						gmDateTime.format_interval(now - self._payload[self._idx['discontinued']], gmDateTime.acc_days),
+						gmDateTime.pydt_strftime(self._payload[self._idx['discontinued']], '%b %d', u'utf8', gmDateTime.acc_days)
+					)
+				else:
+					planned_end_from_now_str = _(u'in %s = %s') % (
+						gmDateTime.format_interval(self._payload[self._idx['discontinued']] - now, gmDateTime.acc_days),
+						gmDateTime.pydt_strftime(self._payload[self._idx['discontinued']], '%b %d', u'utf8', gmDateTime.acc_days)
+					)
+			end_str = u'%s (%s)' % (
+				gmDateTime.pydt_strftime(self._payload[self._idx['discontinued']], end_date_template, u'utf8', gmDateTime.acc_days),
+				planned_end_from_now_str
 			)
 
-		return txt
+		arrow_parts.append(end_str)
+
+		# assemble
+		return (u' %s ' % gmTools.u_arrow2right_thick).join(arrow_parts)
 
 	medically_formatted_start_end = property(_get_medically_formatted_start_end, lambda x:x)
 
@@ -2821,7 +2920,8 @@ def format_substance_intake_as_amts_latex(intake=None, strict=True):
 			cells.append(u'\\fontsize{10pt}{12pt}\selectfont %s ' % _esc(intake['notes']))
 	# aim
 	if intake['aim'] is None:
-		cells.append(u' ')
+		#cells.append(u' ')
+		cells.append(_esc(intake['episode'][:50]))
 	else:
 		if strict:
 			cells.append(_esc(intake['aim'][:50]))
@@ -2835,7 +2935,118 @@ def format_substance_intake_as_amts_latex(intake=None, strict=True):
 
 #------------------------------------------------------------
 def format_substance_intake_as_amts_data(intake=None, strict=True):
-#def format_substance_intake_as_amts_data_v2_0(intake=None, strict=True):
+	"""
+	<M a="Handelsname" fd="freie Formangabe" t="freies Dosierschema" dud="freie Dosiereinheit (Stück Tab)" r="reason" i="info">
+		<W w="Metformin" s="500 mg"/>
+		<W ...>
+	</M>
+	"""
+	if not strict:
+		pass
+		# relax length checks
+
+	M_fields = []
+	if intake['pk_brand'] is not None:
+		M_fields.append(u'a="%s"' % intake['brand'])
+	M_fields.append(u'fd="%s"' % intake['preparation'])
+	if intake['schedule'] is not None:
+		M_fields.append(u't="%s"' % intake['schedule'])
+	#M_fields.append(u'dud="%s"' % intake['dose unit, like Stück'])
+	if intake['aim'] is None:
+		M_fields.append(u'r="%s"' % intake['episode'])
+	else:
+		M_fields.append(u'r="%s"' % intake['aim'])
+	if intake['notes'] is not None:
+		M_fields.append(u'i="%s"' % intake['notes'])
+	M_line = u'<M %s>' % u' '.join(M_fields)
+
+	if intake['pk_brand'] is None:
+		components = [[intake['substance'], intake['amount'], intake['unit'], u'']]
+	else:
+		components = [ c.split('::') for c in intake.containing_drug['components'] ]
+	W_lines = []
+	for comp in components:
+		W_lines.append(u'<W w="%s" s="%s %s"/>' % (comp[0], comp[1], comp[2]))
+
+	return M_line + u''.join(W_lines) + u'</M>'
+
+#------------------------------------------------------------
+def generate_amts_data_template_definition_file(work_dir=None, strict=True):
+
+	_log.debug('generating AMTS data template definition file(workdir=%s, strict=%s)', work_dir, strict)
+
+	if not strict:
+		return __generate_enhanced_amts_data_template_definition_file(work_dir = work_dir)
+
+	amts_lines = [ l for l in (u'<MP v="023" U="%s"' % uuid.uuid4().hex + u""" l="de-DE"$<<if_not_empty::$<amts_page_idx::::1>$// a="%s"//::>>$$<<if_not_empty::$<amts_page_idx::::>$// z="$<amts_total_pages::::1>$"//::>>$>
+<P g="$<name::%(firstnames)s::45>$" f="$<name::%(lastnames)s::45>$" b="$<date_of_birth::%Y%m%d::8>$"/>
+<A
+ n="$<<range_of::$<praxis::%(praxis)s,%(branch)s::>$,$<current_provider::::>$::30>>$"
+$<praxis_address:: s="%(street)s"::>$
+$<praxis_address:: z="%(postcode)s"::>$
+$<praxis_address:: c="%(urb)s::>$
+$<praxis_comm::workphone// p="%(url)s::20>$
+$<praxis_comm::email// e="%(url)s::80>$
+ t="$<today::%Y%m%d::8>$"
+/>
+<O ai="s.S.$<amts_total_pages::::1>$ unten"/>
+$<amts_intakes_as_data::::9999999>$
+</MP>""").split(u'\n') ]
+#$<<if_not_empty::$<allergy_list::%(descriptor)s//,::>$//<O ai="%s"/>::>>$
+
+	amts_fname = gmTools.get_unique_filename (
+		prefix = 'gm2amts_data-',
+		suffix = '.txt',
+		tmp_dir = work_dir
+	)
+	amts_template = io.open(amts_fname, mode = 'wt', encoding = 'utf8')
+	amts_template.write(u'[form]\n')
+	amts_template.write(u'template = $template$\n')
+	amts_template.write(u''.join(amts_lines))
+	amts_template.write(u'\n')
+	amts_template.write(u'$template$\n')
+	amts_template.close()
+
+	return amts_fname
+
+#------------------------------------------------------------
+def __generate_enhanced_amts_data_template_definition_file(work_dir=None):
+
+	amts_lines = [ l for l in (u'<MP v="023" U="%s"' % uuid.uuid4().hex + u""" l="de-DE" a="1" z="1">
+<P g="$<name::%(firstnames)s::>$" f="$<name::%(lastnames)s::>$" b="$<date_of_birth::%Y%m%d::8>$"/>
+<A
+ n="$<praxis::%(praxis)s,%(branch)s::>$,$<current_provider::::>$"
+$<praxis_address:: s="%(street)s %(number)s %(subunit)s"::>$
+$<praxis_address:: z="%(postcode)s"::>$
+$<praxis_address:: c="%(urb)s::>$
+$<praxis_comm::workphone// p="%(url)s::>$
+$<praxis_comm::email// e="%(url)s::>$
+ t="$<today::%Y%m%d::8>$"
+/>
+<O ai="Seite 1 unten"/>
+$<amts_intakes_as_data_enhanced::::9999999>$
+</MP>""").split(u'\n') ]
+#$<<if_not_empty::$<allergy_list::%(descriptor)s//,::>$//<O ai="%s"/>::>>$
+
+	amts_fname = gmTools.get_unique_filename (
+		prefix = 'gm2amts_data-utf8-unabridged-',
+		suffix = '.txt',
+		tmp_dir = work_dir
+	)
+	amts_template = io.open(amts_fname, mode = 'wt', encoding = 'utf8')
+	amts_template.write(u'[form]\n')
+	amts_template.write(u'template = $template$\n')
+	amts_template.write(u''.join(amts_lines))
+	amts_template.write(u'\n')
+	amts_template.write(u'$template$\n')
+	amts_template.close()
+
+	return amts_fname
+
+#------------------------------------------------------------
+# AMTS v2.0
+#------------------------------------------------------------
+def format_substance_intake_as_amts_data_v2_0(intake=None, strict=True):
 
 	if not strict:
 		pass
@@ -2884,8 +3095,7 @@ def format_substance_intake_as_amts_data(intake=None, strict=True):
 	return u'|'.join(fields)
 
 #------------------------------------------------------------
-def calculate_amts_data_check_symbol(intakes=None):
-#def calculate_amts_data_check_symbol_v2_0(intakes=None):
+def calculate_amts_data_check_symbol_v2_0(intakes=None):
 
 	# first char of generic substance or brand name
 	first_chars = []
@@ -2916,8 +3126,7 @@ def calculate_amts_data_check_symbol(intakes=None):
 	return chr(remainder + 55)
 
 #------------------------------------------------------------
-def generate_amts_data_template_definition_file(work_dir=None, strict=True):
-#def generate_amts_data_template_definition_file_v2_0(work_dir=None, strict=True):
+def generate_amts_data_template_definition_file_v_2_0(work_dir=None, strict=True):
 
 	if not strict:
 		return __generate_enhanced_amts_data_template_definition_file(work_dir = work_dir)
@@ -2971,8 +3180,7 @@ def generate_amts_data_template_definition_file(work_dir=None, strict=True):
 	return amts_fname
 
 #------------------------------------------------------------
-def __generate_enhanced_amts_data_template_definition_file(work_dir=None):
-#def __generate_enhanced_amts_data_template_definition_file_v2_0(work_dir=None):
+def __generate_enhanced_amts_data_template_definition_file_v_2_0(work_dir=None):
 
 	amts_fields = [
 		u'MP',
@@ -3837,6 +4045,15 @@ if __name__ == "__main__":
 			gmTools.prompted_input()
 
 	#--------------------------------------------------------
+	def test_generate_amts_data_template_definition_file(work_dir=None, strict=True):
+		print 'file:', generate_amts_data_template_definition_file(strict = True)
+
+	#--------------------------------------------------------
+	def test_format_substance_intake_as_amts_data():
+		#print format_substance_intake_as_amts_data(cSubstanceIntakeEntry(1))
+		print cSubstanceIntakeEntry(1).as_amts_data
+
+	#--------------------------------------------------------
 	# MMI/Gelbe Liste
 	#test_MMI_interface()
 	#test_MMI_file()
@@ -3856,4 +4073,8 @@ if __name__ == "__main__":
 	#test_get_consumable_substances()
 
 	#test_drug2renal_insufficiency_url()
-	test_medically_formatted_start_end()
+	#test_medically_formatted_start_end()
+
+	# AMTS
+	#test_generate_amts_data_template_definition_file()
+	test_format_substance_intake_as_amts_data()
diff --git a/client/doc/schema/gnumed-entire_schema.html b/client/doc/schema/gnumed-entire_schema.html
index 3061072..967cdf5 100644
--- a/client/doc/schema/gnumed-entire_schema.html
+++ b/client/doc/schema/gnumed-entire_schema.html
@@ -112,7 +112,7 @@
   <body>
 
     <!-- Primary Index -->
-	<p><br><br>Dumped on 2016-08-01</p>
+	<p><br><br>Dumped on 2016-09-12</p>
 <h1><a name="index">Index of database - gnumed_v21</a></h1>
 <ul>
     
diff --git a/client/gnumed.py b/client/gnumed.py
index e68b5c6..135bee9 100644
--- a/client/gnumed.py
+++ b/client/gnumed.py
@@ -88,7 +88,7 @@ against. Please run GNUmed as a non-root user.
 	sys.exit(1)
 
 #----------------------------------------------------------
-current_client_version = u'1.6.8'
+current_client_version = u'1.6.9'
 current_client_branch = u'1.6'
 
 _log = None
diff --git a/client/po/ar-gnumed.mo b/client/po/ar-gnumed.mo
index 45c76ac..b73d875 100644
Binary files a/client/po/ar-gnumed.mo and b/client/po/ar-gnumed.mo differ
diff --git a/client/po/ar.po b/client/po/ar.po
index 34ef1b2..7bca7c1 100644
--- a/client/po/ar.po
+++ b/client/po/ar.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:55+0200\n"
+"POT-Creation-Date: 2016-08-18 21:21+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -1546,6 +1546,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 msgid "months"
 msgstr ""
 
@@ -1555,6 +1558,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1564,15 +1570,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -6655,36 +6676,54 @@ msgstr ""
 msgid "%s%s: %s ago (%s)"
 msgstr ""
 
+msgid "until today"
+msgstr ""
+
 #, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
 msgstr ""
 
 #, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid " [planned: %s]"
 msgstr ""
 
 #, python-format
-msgid "%s ago"
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr ""
+
+#, python-format
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr ""
+
+#, python-format
+msgid "%s%s%s (in %s%s)"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr "وصفة"
+
 #, python-format
-msgid "in %s"
+msgid "%s (plan)"
 msgstr ""
 
 #, python-format
-msgid ", until %s (%s)"
+msgid "%s ago, in %s"
 msgstr ""
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "in %s, %s"
 msgstr ""
 
 #, python-format
-msgid ", planned for %s%s"
+msgid "%s ago = %s"
 msgstr ""
 
 #, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
+msgid "in %s = %s"
+msgstr ""
+
+msgid "today"
 msgstr ""
 
 msgid "Additional notes"
@@ -7157,6 +7196,10 @@ msgstr ""
 msgid "Vaccinations"
 msgstr ""
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 msgid "Allergies/Intolerances"
 msgstr ""
 
@@ -8232,9 +8275,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr ""
 
-msgid "today"
-msgstr ""
-
 #, python-format
 msgid ""
 "\n"
@@ -9566,7 +9606,11 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr ""
+
+#, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr ""
 
 #, python-format
@@ -13022,6 +13066,10 @@ msgid "eGFR:"
 msgstr ""
 
 #, python-format
+msgid "%s%s%s (%s ago)"
+msgstr ""
+
+#, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
 
@@ -16409,6 +16457,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "خامل"
diff --git a/client/po/bg-gnumed.mo b/client/po/bg-gnumed.mo
index 8e554f4..67e01d0 100644
Binary files a/client/po/bg-gnumed.mo and b/client/po/bg-gnumed.mo differ
diff --git a/client/po/bg.po b/client/po/bg.po
index 1b962e1..8188996 100644
--- a/client/po/bg.po
+++ b/client/po/bg.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:55+0200\n"
+"POT-Creation-Date: 2016-08-18 21:21+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -1543,6 +1543,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 msgid "months"
 msgstr ""
 
@@ -1552,6 +1555,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1561,15 +1567,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -6651,36 +6672,54 @@ msgstr ""
 msgid "%s%s: %s ago (%s)"
 msgstr ""
 
+msgid "until today"
+msgstr ""
+
 #, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
 msgstr ""
 
 #, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid " [planned: %s]"
 msgstr ""
 
 #, python-format
-msgid "%s ago"
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr ""
+
+#, python-format
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr ""
+
+#, python-format
+msgid "%s%s%s (in %s%s)"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr " %s документи\n"
+
 #, python-format
-msgid "in %s"
+msgid "%s (plan)"
 msgstr ""
 
 #, python-format
-msgid ", until %s (%s)"
+msgid "%s ago, in %s"
 msgstr ""
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "in %s, %s"
 msgstr ""
 
 #, python-format
-msgid ", planned for %s%s"
+msgid "%s ago = %s"
 msgstr ""
 
 #, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
+msgid "in %s = %s"
+msgstr ""
+
+msgid "today"
 msgstr ""
 
 msgid "Additional notes"
@@ -7154,6 +7193,10 @@ msgstr ""
 msgid "Vaccinations"
 msgstr ""
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 msgid "Allergies/Intolerances"
 msgstr ""
 
@@ -8228,9 +8271,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr ""
 
-msgid "today"
-msgstr ""
-
 #, python-format
 msgid ""
 "\n"
@@ -9563,7 +9603,11 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr ""
+
+#, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr ""
 
 #, python-format
@@ -13011,6 +13055,10 @@ msgid "eGFR:"
 msgstr ""
 
 #, python-format
+msgid "%s%s%s (%s ago)"
+msgstr ""
+
+#, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
 
@@ -16399,6 +16447,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "активен"
diff --git a/client/po/ca-gnumed.mo b/client/po/ca-gnumed.mo
index 73f573a..81c88ef 100644
Binary files a/client/po/ca-gnumed.mo and b/client/po/ca-gnumed.mo differ
diff --git a/client/po/ca.po b/client/po/ca.po
index 478b908..74fd022 100644
--- a/client/po/ca.po
+++ b/client/po/ca.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:55+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2012-06-01 01:20+0000\n"
 "Last-Translator: ncq <Unknown>\n"
 "Language-Team: Catalan <ca at li.org>\n"
@@ -1654,6 +1654,10 @@ msgstr "o any:"
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+#, fuzzy
+msgid "0 years"
+msgstr "o any:"
+
 msgid "months"
 msgstr ""
 
@@ -1663,6 +1667,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1672,15 +1679,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr "y::abreviatura_any"
 
@@ -6961,37 +6983,57 @@ msgstr "Documents: %s"
 msgid "%s%s: %s ago (%s)"
 msgstr "%s la setmana passada (%s of %s)"
 
-#, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
-msgstr "%s la setmana passada (%s of %s)"
+#, fuzzy
+msgid "until today"
+msgstr "avui"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
-msgstr "%s la setmana passada (%s of %s)"
+msgid "until %s%s ago"
+msgstr "Pacient"
 
 #, python-format
-msgid "%s ago"
+msgid " [planned: %s]"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "in %s"
-msgstr "  risc: %s"
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr "%s la setmana passada (%s of %s)"
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr "Pacient"
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr "%s la setmana passada (%s of %s)"
 
-#, python-format
-msgid " (planned for %s%s)"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s%s%s (in %s%s)"
+msgstr "%s la setmana passada (%s of %s)"
+
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr " %s documents\n"
 
 #, python-format
-msgid ", planned for %s%s"
+msgid "%s (plan)"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr "Pacient:  , No:\n"
+msgid "%s ago, in %s"
+msgstr "%s la setmana passada (%s of %s)"
+
+#, fuzzy, python-format
+msgid "in %s, %s"
+msgstr "  risc: %s"
+
+#, fuzzy, python-format
+msgid "%s ago = %s"
+msgstr "%s la setmana passada (%s of %s)"
+
+#, fuzzy, python-format
+msgid "in %s = %s"
+msgstr "  risc: %s"
+
+#, fuzzy
+msgid "today"
+msgstr "avui"
 
 msgid "Additional notes"
 msgstr "Annotacions adicionals"
@@ -7486,6 +7528,10 @@ msgstr "Opcions"
 msgid "Vaccinations"
 msgstr "Vacunacions"
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 #, fuzzy
 msgid "Allergies/Intolerances"
 msgstr "al·lèrgies/intoleràncies"
@@ -8589,10 +8635,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr "Pacient:  , No:\n"
 
-#, fuzzy
-msgid "today"
-msgstr "avui"
-
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -9972,7 +10014,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr "Documents: %s"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "  risc: %s"
 
 #, fuzzy, python-format
@@ -13527,6 +13573,10 @@ msgstr "Documents: %s"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr "%s la setmana passada (%s of %s)"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -17037,6 +17087,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "Subjectiu"
@@ -18746,6 +18802,10 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr "Interromput  i no connectat a GNUmed"
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr "Pacient:  , No:\n"
+
+#, fuzzy
 #~ msgid "&Addresses"
 #~ msgstr "Direcció"
 
diff --git a/client/po/cs-gnumed.mo b/client/po/cs-gnumed.mo
index 2d51337..274d32b 100644
Binary files a/client/po/cs-gnumed.mo and b/client/po/cs-gnumed.mo differ
diff --git a/client/po/cs.po b/client/po/cs.po
index 2ed41ae..db6ccac 100644
--- a/client/po/cs.po
+++ b/client/po/cs.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:55+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -1681,6 +1681,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 #, fuzzy
 msgid "months"
 msgstr "Měsíc"
@@ -1692,6 +1695,10 @@ msgstr "Měsíc"
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+#, fuzzy
+msgid "0 months"
+msgstr "Měsíc"
+
 msgid "weeks"
 msgstr ""
 
@@ -1701,15 +1708,33 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+#, fuzzy
+msgid "0 days"
+msgstr "dny"
+
+#, fuzzy
+msgid "0 hours"
+msgstr "hodiny"
+
+#, fuzzy
+msgid "0 minutes"
+msgstr "minuty"
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -6840,37 +6865,56 @@ msgstr ""
 msgid "%s%s: %s ago (%s)"
 msgstr " Jméno souboru: %s\n"
 
+#, fuzzy
+msgid "until today"
+msgstr "Končí dnes"
+
+#, fuzzy, python-format
+msgid "until %s%s ago"
+msgstr " Jméno souboru: %s\n"
+
 #, python-format
-msgid "%s%s%s (%s ago)"
+msgid " [planned: %s]"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (%s%s ago, in %s)"
 msgstr " Trvání: %s (%s - %s)"
 
-#, python-format
-msgid "%s ago"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr " Trvání: %s (%s - %s)"
+
+#, fuzzy, python-format
+msgid "%s%s%s (in %s%s)"
+msgstr " Trvání: %s (%s - %s)"
+
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr " % dokumentů\n"
 
 #, python-format
-msgid "in %s"
+msgid "%s (plan)"
 msgstr ""
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr " Jméno souboru: %s\n"
+msgid "%s ago, in %s"
+msgstr " Trvání: %s (%s - %s)"
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "in %s, %s"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s ago = %s"
+msgstr " Jméno souboru: %s\n"
+
 #, python-format
-msgid ", planned for %s%s"
+msgid "in %s = %s"
 msgstr ""
 
-#, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr " Trvání: %s (%s - %s)"
+msgid "today"
+msgstr "dnes"
 
 msgid "Additional notes"
 msgstr ""
@@ -7356,6 +7400,10 @@ msgstr "Zaměstnání"
 msgid "Vaccinations"
 msgstr "Očkování"
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 msgid "Allergies/Intolerances"
 msgstr "Alergie/nesnášenlivost"
 
@@ -8445,9 +8493,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr " Trvání: %s (%s - %s)"
 
-msgid "today"
-msgstr "dnes"
-
 #, python-format
 msgid ""
 "\n"
@@ -9789,8 +9834,12 @@ msgid ""
 "Please check patient age, patient gender, time until/since EDC."
 msgstr ""
 
+#, python-format
+msgid " (entered %s ago)"
+msgstr ""
+
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr " Jméno souboru: %s\n"
 
 #, fuzzy, python-format
@@ -13271,6 +13320,10 @@ msgid "eGFR:"
 msgstr ""
 
 #, python-format
+msgid "%s%s%s (%s ago)"
+msgstr ""
+
+#, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
 
@@ -16694,6 +16747,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "Vybrat ikonu"
@@ -18367,6 +18426,10 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr ""
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr " Trvání: %s (%s - %s)"
+
+#, fuzzy
 #~ msgid "Or&Ganizations"
 #~ msgstr "Očkování"
 
diff --git a/client/po/da-gnumed.mo b/client/po/da-gnumed.mo
index 8dcf98b..f30f1b0 100644
Binary files a/client/po/da-gnumed.mo and b/client/po/da-gnumed.mo differ
diff --git a/client/po/da.po b/client/po/da.po
index 2fa2a7c..650c0fa 100644
--- a/client/po/da.po
+++ b/client/po/da.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:55+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -1543,6 +1543,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 msgid "months"
 msgstr ""
 
@@ -1552,6 +1555,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1561,15 +1567,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -6661,37 +6682,55 @@ msgstr "%s: tilfælde (%s)"
 msgid "%s%s: %s ago (%s)"
 msgstr "%s: tilfælde (%s)"
 
+msgid "until today"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "until %s%s ago"
+msgstr "Vaccinationer"
+
+#, python-format
+msgid " [planned: %s]"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr "%s: tilfælde (%s)"
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
+msgid "%s%s%s (%s%s ago, %s)"
 msgstr "%s: tilfælde (%s)"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (in %s%s)"
 msgstr "%s: tilfælde (%s)"
 
-#, python-format
-msgid "%s ago"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr "Dokumenter:"
 
 #, python-format
-msgid "in %s"
+msgid "%s (plan)"
 msgstr ""
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr "Vaccinationer"
+msgid "%s ago, in %s"
+msgstr "%s: tilfælde (%s)"
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "in %s, %s"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s ago = %s"
+msgstr "%s: tilfælde (%s)"
+
 #, python-format
-msgid ", planned for %s%s"
+msgid "in %s = %s"
 msgstr ""
 
-#, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr "%s: tilfælde (%s)"
+msgid "today"
+msgstr ""
 
 msgid "Additional notes"
 msgstr ""
@@ -7169,6 +7208,10 @@ msgstr ""
 msgid "Vaccinations"
 msgstr "Vaccinationer"
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 msgid "Allergies/Intolerances"
 msgstr ""
 
@@ -8251,9 +8294,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr "Vaccinationer"
 
-msgid "today"
-msgstr ""
-
 #, python-format
 msgid ""
 "\n"
@@ -9587,8 +9627,12 @@ msgid ""
 "Please check patient age, patient gender, time until/since EDC."
 msgstr ""
 
+#, python-format
+msgid " (entered %s ago)"
+msgstr ""
+
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "%s: tilfælde (%s)"
 
 #, python-format
@@ -13041,6 +13085,10 @@ msgstr ""
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr "%s: tilfælde (%s)"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -16438,6 +16486,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "aktiv"
@@ -18093,6 +18147,10 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr ""
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr "%s: tilfælde (%s)"
+
+#, fuzzy
 #~ msgid "Or&Ganizations"
 #~ msgstr "Vaccinationer"
 
diff --git a/client/po/de-gnumed.mo b/client/po/de-gnumed.mo
index eecbff6..185fc7f 100644
Binary files a/client/po/de-gnumed.mo and b/client/po/de-gnumed.mo differ
diff --git a/client/po/de.po b/client/po/de.po
index 3db9a4a..55e0396 100644
--- a/client/po/de.po
+++ b/client/po/de.po
@@ -5,8 +5,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:55+0200\n"
-"PO-Revision-Date: 2016-08-01 12:14+0200\n"
+"POT-Creation-Date: 2016-09-02 08:48+0200\n"
+"PO-Revision-Date: 2016-08-18 22:42+0200\n"
 "Last-Translator: Karsten Hilbert <Karsten.Hilbert at gmx.net>\n"
 "Language-Team: Deutsch\n"
 "Language: de_DE\n"
@@ -1750,6 +1750,9 @@ msgstr "Jahr"
 msgid "interval_format_tag::years::y"
 msgstr "interval_format_tag::years::J"
 
+msgid "0 years"
+msgstr "0 Jahre"
+
 msgid "months"
 msgstr "Monate"
 
@@ -1759,6 +1762,9 @@ msgstr "Monat"
 msgid "interval_format_tag::months::m"
 msgstr "interval_format_tag::months::M"
 
+msgid "0 months"
+msgstr "0 Monate"
+
 msgid "weeks"
 msgstr "Wochen"
 
@@ -1768,15 +1774,30 @@ msgstr "Woche"
 msgid "interval_format_tag::weeks::w"
 msgstr "interval_format_tag::weeks::W"
 
+msgid "0 weeks"
+msgstr "0 Wochen"
+
 msgid "interval_format_tag::days::d"
 msgstr "interval_format_tag::days::T"
 
+msgid "0 days"
+msgstr "0 Tage"
+
+msgid "0 hours"
+msgstr "0 Stunden"
+
+msgid "0 minutes"
+msgstr "0 Minuten"
+
 msgid "seconds"
 msgstr "Sekunden"
 
 msgid "second"
 msgstr "Sekunde"
 
+msgid "0 seconds"
+msgstr "0 Sekunden"
+
 msgid "y::year_abbreviation"
 msgstr "J::year_abbreviation"
 
@@ -7552,37 +7573,55 @@ msgstr "%s%s: vor %s%s"
 msgid "%s%s: %s ago (%s)"
 msgstr "%s%s: vor %s (%s)"
 
+msgid "until today"
+msgstr "bis heute"
+
 #, python-format
-msgid "%s%s%s (%s ago)"
-msgstr "%s%s%s (vor %s)"
+msgid "until %s%s ago"
+msgstr "bis vor %s%s"
 
 #, python-format
-msgid "%s%s%s (%s ago, %s)"
-msgstr "%s%s%s (vor %s, %s)"
+msgid " [planned: %s]"
+msgstr " [geplant: %s]"
 
 #, python-format
-msgid "%s ago"
-msgstr "vor %s"
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr "%s%s%s (vor %s%s, in %s)"
+
+#, python-format
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr "%s%s%s (vor %s%s, %s)"
+
+#, python-format
+msgid "%s%s%s (in %s%s)"
+msgstr "%s%s%s (in %s%s)"
+
+#, python-format
+msgid "%s (documented)"
+msgstr "%s (dokumentiert)"
 
 #, python-format
-msgid "in %s"
-msgstr "in %s"
+msgid "%s (plan)"
+msgstr "%s (Plan)"
 
 #, python-format
-msgid ", until %s (%s)"
-msgstr ", bis %s (%s)"
+msgid "%s ago, in %s"
+msgstr "vor %s, in %s"
 
 #, python-format
-msgid " (planned for %s%s)"
-msgstr " (geplant für %s%s)"
+msgid "in %s, %s"
+msgstr "in %s, %s"
 
 #, python-format
-msgid ", planned for %s%s"
-msgstr ", geplant für %s%s"
+msgid "%s ago = %s"
+msgstr "vor %s = %s"
 
 #, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr "%s vor %s (für %s: %s %s %s)"
+msgid "in %s = %s"
+msgstr "in %s = %s"
+
+msgid "today"
+msgstr "heute"
 
 msgid "Additional notes"
 msgstr "Zusätzliche Angaben"
@@ -8082,6 +8121,10 @@ msgstr "Berufe"
 msgid "Vaccinations"
 msgstr "Impfungen"
 
+#, python-format
+msgid "%s ago"
+msgstr "vor %s"
+
 msgid "Allergies/Intolerances"
 msgstr "Allergien/Unverträglichkeiten"
 
@@ -9206,9 +9249,6 @@ msgstr "Sommerzeit aktiv"
 msgid "Location: %s (%s)"
 msgstr "Ort: %s (%s)"
 
-msgid "today"
-msgstr "heute"
-
 #, python-format
 msgid ""
 "\n"
@@ -10753,8 +10793,12 @@ msgstr ""
 "Überprüfen Sie Alter, Geschlecht und Zeit seit/bis Termin."
 
 #, python-format
-msgid "%s Vacc: %s (latest of %s)"
-msgstr "%s Impfg: %s (jüngste von %s)"
+msgid " (entered %s ago)"
+msgstr " (eingegb vor %s)"
+
+#, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
+msgstr "%s Impfg: %s (jüngste von %s: vor %s)"
 
 #, python-format
 msgid "Hx of addiction: %s"
@@ -14779,6 +14823,10 @@ msgid "eGFR:"
 msgstr ""
 
 #, python-format
+msgid "%s%s%s (%s ago)"
+msgstr "%s%s%s (vor %s)"
+
+#, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr "eGFR: %.1f (%s)"
 
@@ -18777,6 +18825,12 @@ msgstr "Schlüsselwort e&xpandieren"
 msgid "Expand keyword / macro"
 msgstr "Schlüsselwort/Makro expandieren"
 
+msgid "Insert &Unicode"
+msgstr "&Zeichen/Symbol einfügen"
+
+msgid "Insert a unicode character"
+msgstr "Symbole/internationale Buchstaben einfügen"
+
 msgid "as &Subjective"
 msgstr "als &Anamnese"
 
@@ -20742,6 +20796,18 @@ msgstr "Abbrechen"
 msgid "Abort and do NOT connect to GNUmed."
 msgstr "Abbrechen und keine Verbindung zu GNUmed herstellen."
 
+#~ msgid " (planned for %s%s)"
+#~ msgstr " (geplant für %s%s)"
+
+#~ msgid " %s for %s%s"
+#~ msgstr " %s für %s%s"
+
+#~ msgid "until %s%s ago (for %s%s: %s %s %s)"
+#~ msgstr "bis vor %s%s (für %s%s: %s %s %s)"
+
+#~ msgid "%s%s%s (%s ago = %s)"
+#~ msgstr "%s%s%s (vor %s = %s)"
+
 #~ msgid "&Addresses"
 #~ msgstr "&Adressen"
 
diff --git a/client/po/el-gnumed.mo b/client/po/el-gnumed.mo
index cb35bfd..d7acaf4 100644
Binary files a/client/po/el-gnumed.mo and b/client/po/el-gnumed.mo differ
diff --git a/client/po/el.po b/client/po/el.po
index f503c0a..60556ea 100644
--- a/client/po/el.po
+++ b/client/po/el.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:55+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2012-06-01 01:24+0000\n"
 "Last-Translator: ncq <Unknown>\n"
 "Language-Team: Ελληνικά, Σύγχρονα <opensuse-translation-el at opensuse.org>\n"
@@ -1834,6 +1834,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 msgid "months"
 msgstr ""
 
@@ -1843,6 +1846,10 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+#, fuzzy
+msgid "0 months"
+msgstr "Μήνας"
+
 msgid "weeks"
 msgstr "εβδομάδες"
 
@@ -1852,15 +1859,34 @@ msgstr "εβδομάδα"
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+#, fuzzy
+msgid "0 weeks"
+msgstr "εβδομάδες"
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+#, fuzzy
+msgid "0 days"
+msgstr "ημέρες"
+
+#, fuzzy
+msgid "0 hours"
+msgstr "ώρες"
+
+#, fuzzy
+msgid "0 minutes"
+msgstr "λεπτά"
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr "y::έτος_συντομογραφία"
 
@@ -7309,41 +7335,63 @@ msgstr ""
 "%s: %s από  %.8s (v%s)\n"
 "%s"
 
+#, fuzzy
+msgid "until today"
+msgstr "σήμερα(%s)"
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
+msgstr "Εργαστήριο: %s\n"
+
+#, fuzzy, python-format
+msgid " [planned: %s]"
+msgstr " Έκλεισε: %s\n"
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
 msgstr ""
 "%s: %s από  %.8s (v%s)\n"
 "%s"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (%s%s ago, %s)"
 msgstr ""
 "%s: %s από  %.8s (v%s)\n"
 "%s"
 
-#, python-format
-msgid "%s ago"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "in %s"
-msgstr "σε %d μέρα(ες): %s"
+msgid "%s%s%s (in %s%s)"
+msgstr ""
+"%s: %s από  %.8s (v%s)\n"
+"%s"
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr "Εργαστήριο: %s\n"
+msgid "%s (documented)"
+msgstr " %s Αρχείο\n"
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "%s (plan)"
 msgstr ""
 
-#, python-format
-msgid ", planned for %s%s"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s ago, in %s"
+msgstr "%d μέρα(ες) πριν-%s"
 
 #, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr " Διάρκεια: %s (%s - %s)"
+msgid "in %s, %s"
+msgstr "σε %d μέρα(ες): %s"
+
+#, fuzzy, python-format
+msgid "%s ago = %s"
+msgstr "%d μέρα(ες) πριν-%s"
+
+#, fuzzy, python-format
+msgid "in %s = %s"
+msgstr "σε %d μέρα(ες): %s"
+
+#, fuzzy
+msgid "today"
+msgstr "σήμερα(%s)"
 
 msgid "Additional notes"
 msgstr "Επιπλέον σημειώσεις"
@@ -7897,6 +7945,10 @@ msgstr "Απασχολήσεις"
 msgid "Vaccinations"
 msgstr "Εμβολιασμοί"
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 #, fuzzy
 msgid "Allergies/Intolerances"
 msgstr "αλλεργίες/δυσανεξίες"
@@ -9017,10 +9069,6 @@ msgstr "αλλαγή θερινής - χειμερινής ώρας είναι 
 msgid "Location: %s (%s)"
 msgstr "Ογανισμός: %s (%s)"
 
-#, fuzzy
-msgid "today"
-msgstr "σήμερα(%s)"
-
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -10422,7 +10470,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr "Ημερομηνία: %s\n"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "μέρος %s: %s"
 
 #, fuzzy, python-format
@@ -14029,6 +14081,12 @@ msgstr "Ημερομηνία: %s\n"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr ""
+"%s: %s από  %.8s (v%s)\n"
+"%s"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -17571,6 +17629,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "Υποκειμενικό"
@@ -19334,6 +19398,10 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr "Ματαίωση και ΔΕΝ θα συνδεθείτε με το GNUmed."
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr " Διάρκεια: %s (%s - %s)"
+
+#, fuzzy
 #~ msgid "&Addresses"
 #~ msgstr "Διεύθυνση"
 
diff --git a/client/po/en_AU-gnumed.mo b/client/po/en_AU-gnumed.mo
index 74e3a6e..9ad1e71 100644
Binary files a/client/po/en_AU-gnumed.mo and b/client/po/en_AU-gnumed.mo differ
diff --git a/client/po/en_AU.po b/client/po/en_AU.po
index cbc8344..38d6450 100644
--- a/client/po/en_AU.po
+++ b/client/po/en_AU.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:55+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -1544,6 +1544,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 msgid "months"
 msgstr ""
 
@@ -1553,6 +1556,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1562,15 +1568,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -6659,38 +6680,56 @@ msgstr "%s: encounter (%s)"
 msgid "%s%s: %s ago (%s)"
 msgstr "%s: encounter (%s)"
 
-#, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
-msgstr "%s: encounter (%s)"
+msgid "until today"
+msgstr ""
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "until %s%s ago"
 msgstr "%s: encounter (%s)"
 
 #, python-format
-msgid "%s ago"
+msgid " [planned: %s]"
 msgstr ""
 
-#, python-format
-msgid "in %s"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr "%s: encounter (%s)"
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr "%s: encounter (%s)"
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
+msgid "%s%s%s (in %s%s)"
 msgstr "%s: encounter (%s)"
 
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr " %s documents\n"
+
 #, python-format
-msgid " (planned for %s%s)"
+msgid "%s (plan)"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s ago, in %s"
+msgstr "%s: encounter (%s)"
+
 #, python-format
-msgid ", planned for %s%s"
+msgid "in %s, %s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
+msgid "%s ago = %s"
 msgstr "%s: encounter (%s)"
 
+#, python-format
+msgid "in %s = %s"
+msgstr ""
+
+msgid "today"
+msgstr ""
+
 msgid "Additional notes"
 msgstr ""
 
@@ -7166,6 +7205,10 @@ msgstr ""
 msgid "Vaccinations"
 msgstr ""
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 msgid "Allergies/Intolerances"
 msgstr ""
 
@@ -8251,9 +8294,6 @@ msgstr "daylight savings time in effect"
 msgid "Location: %s (%s)"
 msgstr ""
 
-msgid "today"
-msgstr ""
-
 #, python-format
 msgid ""
 "\n"
@@ -9585,8 +9625,12 @@ msgid ""
 "Please check patient age, patient gender, time until/since EDC."
 msgstr ""
 
+#, python-format
+msgid " (entered %s ago)"
+msgstr ""
+
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "%s: encounter (%s)"
 
 #, python-format
@@ -13052,6 +13096,10 @@ msgstr ""
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr "%s: encounter (%s)"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -16444,6 +16492,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "soap_Subjective"
@@ -18102,6 +18156,10 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr ""
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr "%s: encounter (%s)"
+
+#, fuzzy
 #~ msgid ""
 #~ "Health issue: %s%s%s (%s versions)\n"
 #~ "\n"
diff --git a/client/po/en_CA-gnumed.mo b/client/po/en_CA-gnumed.mo
index a59274f..845964a 100644
Binary files a/client/po/en_CA-gnumed.mo and b/client/po/en_CA-gnumed.mo differ
diff --git a/client/po/en_CA.po b/client/po/en_CA.po
index ab13f3e..83ae2a3 100644
--- a/client/po/en_CA.po
+++ b/client/po/en_CA.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:55+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2010-02-09 16:17+0000\n"
 "Last-Translator: Brett Alton <brett.jr.alton at gmail.com>\n"
 "Language-Team: English (Canada) <en_CA at li.org>\n"
@@ -1588,6 +1588,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 msgid "months"
 msgstr ""
 
@@ -1597,6 +1600,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1606,15 +1612,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -6786,37 +6807,57 @@ msgstr "Documents: %s"
 msgid "%s%s: %s ago (%s)"
 msgstr "%s this week (%s of %s)"
 
+#, fuzzy
+msgid "until today"
+msgstr "today (%s)"
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
-msgstr "%s this week (%s of %s)"
+msgid "until %s%s ago"
+msgstr "Patient: %s (%s), No: %s\n"
+
+#, fuzzy, python-format
+msgid " [planned: %s]"
+msgstr "Exported: %s\n"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (%s%s ago, in %s)"
 msgstr "%s this week (%s of %s)"
 
-#, python-format
-msgid "%s ago"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr "%s this week (%s of %s)"
 
 #, fuzzy, python-format
-msgid "in %s"
-msgstr "Exported: %s\n"
+msgid "%s%s%s (in %s%s)"
+msgstr "%s this week (%s of %s)"
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr "Patient: %s (%s), No: %s\n"
+msgid "%s (documented)"
+msgstr " %s documents\n"
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "%s (plan)"
 msgstr ""
 
-#, python-format
-msgid ", planned for %s%s"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s ago, in %s"
+msgstr "%d day(s) ago - %s"
 
 #, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr "  your time: %s - %s  (@%s = %s%s)\n"
+msgid "in %s, %s"
+msgstr "Exported: %s\n"
+
+#, fuzzy, python-format
+msgid "%s ago = %s"
+msgstr "%d day(s) ago - %s"
+
+#, fuzzy, python-format
+msgid "in %s = %s"
+msgstr "Exported: %s\n"
+
+#, fuzzy
+msgid "today"
+msgstr "today (%s)"
 
 msgid "Additional notes"
 msgstr ""
@@ -7298,6 +7339,10 @@ msgstr ""
 msgid "Vaccinations"
 msgstr ""
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 #, fuzzy
 msgid "Allergies/Intolerances"
 msgstr "allergies/intolerances"
@@ -8403,10 +8448,6 @@ msgstr "daylight savings time in effect"
 msgid "Location: %s (%s)"
 msgstr "Patient: %s (%s), No: %s\n"
 
-#, fuzzy
-msgid "today"
-msgstr "today (%s)"
-
 #, python-format
 msgid ""
 "\n"
@@ -9774,7 +9815,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr "Documents: %s"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "Exported: %s\n"
 
 #, fuzzy, python-format
@@ -13272,6 +13317,10 @@ msgstr "Documents: %s"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr "%s this week (%s of %s)"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -16724,6 +16773,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "Subjective"
@@ -18416,6 +18471,10 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr "Abort and do NOT connect to GNUmed."
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr "  your time: %s - %s  (@%s = %s%s)\n"
+
+#, fuzzy
 #~ msgid "Or&Ganizations"
 #~ msgstr "Vaccination"
 
diff --git a/client/po/es-gnumed.mo b/client/po/es-gnumed.mo
index 5892afd..29ffee1 100644
Binary files a/client/po/es-gnumed.mo and b/client/po/es-gnumed.mo differ
diff --git a/client/po/es.po b/client/po/es.po
index aba5106..84d80e8 100644
--- a/client/po/es.po
+++ b/client/po/es.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: es\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:55+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2016-07-25 17:47-0400\n"
 "Last-Translator: Uwe Koch <uwe.koch at opticakoch.cl>\n"
 "Language-Team: colombiano <es at li.org>\n"
@@ -1782,6 +1782,10 @@ msgstr "año"
 msgid "interval_format_tag::years::y"
 msgstr "interval_format_tag::años::y"
 
+#, fuzzy
+msgid "0 years"
+msgstr "años"
+
 msgid "months"
 msgstr "meses"
 
@@ -1791,6 +1795,10 @@ msgstr "mes"
 msgid "interval_format_tag::months::m"
 msgstr "interval_format_tag::meses::m"
 
+#, fuzzy
+msgid "0 months"
+msgstr "meses"
+
 msgid "weeks"
 msgstr "semanas"
 
@@ -1800,15 +1808,35 @@ msgstr "semana"
 msgid "interval_format_tag::weeks::w"
 msgstr "interval_format_tag::semanas::w"
 
+#, fuzzy
+msgid "0 weeks"
+msgstr "semanas"
+
 msgid "interval_format_tag::days::d"
 msgstr "interval_format_tag::días::d"
 
+#, fuzzy
+msgid "0 days"
+msgstr "días"
+
+#, fuzzy
+msgid "0 hours"
+msgstr "horas"
+
+#, fuzzy
+msgid "0 minutes"
+msgstr "minutos"
+
 msgid "seconds"
 msgstr "segundos"
 
 msgid "second"
 msgstr "segundo"
 
+#, fuzzy
+msgid "0 seconds"
+msgstr "segundos"
+
 msgid "y::year_abbreviation"
 msgstr "a::year_abbreviation"
 
@@ -7683,37 +7711,56 @@ msgstr "%s%s: %s atrás%s"
 msgid "%s%s: %s ago (%s)"
 msgstr "%s%s: %s atrás (%s)"
 
-#, python-format
-msgid "%s%s%s (%s ago)"
-msgstr "%s%s%s (%s atrás)"
+#, fuzzy
+msgid "until today"
+msgstr "Termina hoy"
 
-#, python-format
-msgid "%s%s%s (%s ago, %s)"
+#, fuzzy, python-format
+msgid "until %s%s ago"
+msgstr ", hasta %s (%s)"
+
+#, fuzzy, python-format
+msgid " [planned: %s]"
+msgstr ", planeado para %s%s"
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
 msgstr "%s%s%s (%s atrás, %s)"
 
-#, python-format
-msgid "%s ago"
-msgstr "%s atrás"
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr "%s%s%s (%s atrás, %s)"
 
-#, python-format
-msgid "in %s"
-msgstr "en %s"
+#, fuzzy, python-format
+msgid "%s%s%s (in %s%s)"
+msgstr "%s%s%s (%s atrás, %s)"
 
-#, python-format
-msgid ", until %s (%s)"
-msgstr ", hasta %s (%s)"
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr " %s documentos\n"
 
 #, python-format
-msgid " (planned for %s%s)"
-msgstr " (planeado para %s%s)"
+msgid "%s (plan)"
+msgstr ""
 
-#, python-format
-msgid ", planned for %s%s"
-msgstr ", planeado para %s%s"
+#, fuzzy, python-format
+msgid "%s ago, in %s"
+msgstr "%d día(s) atrás - %s"
 
-#, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr "%s %s atrás (para %s: %s %s %s)"
+#, fuzzy, python-format
+msgid "in %s, %s"
+msgstr "en %s"
+
+#, fuzzy, python-format
+msgid "%s ago = %s"
+msgstr "%s atrás"
+
+#, fuzzy, python-format
+msgid "in %s = %s"
+msgstr "en %s"
+
+msgid "today"
+msgstr "hoy"
 
 msgid "Additional notes"
 msgstr "Notas adicionales"
@@ -8217,6 +8264,10 @@ msgstr "Ocupaciones"
 msgid "Vaccinations"
 msgstr "Vacunaciones"
 
+#, python-format
+msgid "%s ago"
+msgstr "%s atrás"
+
 msgid "Allergies/Intolerances"
 msgstr "Alergias/Intolerancias"
 
@@ -9355,9 +9406,6 @@ msgstr "horario de verano aplicado"
 msgid "Location: %s (%s)"
 msgstr "Localidad: %s (%s)"
 
-msgid "today"
-msgstr "hoy"
-
 #, python-format
 msgid ""
 "\n"
@@ -10900,8 +10948,12 @@ msgstr ""
 "\n"
 "Por favor, verifique la edad del paciente, su sexo, tiempo desde/hasta FEC."
 
-#, python-format
-msgid "%s Vacc: %s (latest of %s)"
+#, fuzzy, python-format
+msgid " (entered %s ago)"
+msgstr "%.1f (%s atrás)"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "%s Vac: %s (última de %s)"
 
 #, python-format
@@ -14933,6 +14985,10 @@ msgid "eGFR:"
 msgstr "TFGe"
 
 #, python-format
+msgid "%s%s%s (%s ago)"
+msgstr "%s%s%s (%s atrás)"
+
+#, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr "TFGe: %.1f (%s)"
 
@@ -18973,6 +19029,12 @@ msgstr "e&Xpando palabra clave"
 msgid "Expand keyword / macro"
 msgstr "Expando palabra clave / macro"
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 msgid "as &Subjective"
 msgstr "como &Subjectivo"
 
@@ -20950,6 +21012,12 @@ msgstr "Aborto"
 msgid "Abort and do NOT connect to GNUmed."
 msgstr "Aborto y NO conecto a GNUMed."
 
+#~ msgid " (planned for %s%s)"
+#~ msgstr " (planeado para %s%s)"
+
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr "%s %s atrás (para %s: %s %s %s)"
+
 #~ msgid "&Addresses"
 #~ msgstr "&Direcciones"
 
diff --git a/client/po/fr-gnumed.mo b/client/po/fr-gnumed.mo
index 0c5a634..3273f88 100644
Binary files a/client/po/fr-gnumed.mo and b/client/po/fr-gnumed.mo differ
diff --git a/client/po/fr.po b/client/po/fr.po
index 1c3e29b..a62d295 100644
--- a/client/po/fr.po
+++ b/client/po/fr.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed 0.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:55+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2012-06-01 01:16+0000\n"
 "Last-Translator: ncq <Unknown>\n"
 "Language-Team: FR <LL at li.org>\n"
@@ -1770,6 +1770,10 @@ msgid "interval_format_tag::years::y"
 msgstr "interval_format_tag::years::y"
 
 #, fuzzy
+msgid "0 years"
+msgstr "Ou année :"
+
+#, fuzzy
 msgid "months"
 msgstr "Mois"
 
@@ -1780,6 +1784,10 @@ msgstr "Mois"
 msgid "interval_format_tag::months::m"
 msgstr "interval_format_tag::months::m"
 
+#, fuzzy
+msgid "0 months"
+msgstr "Mois"
+
 msgid "weeks"
 msgstr "semaines"
 
@@ -1789,15 +1797,32 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr "interval_format_tag::weeks::w"
 
+#, fuzzy
+msgid "0 weeks"
+msgstr "semaines"
+
 msgid "interval_format_tag::days::d"
 msgstr "interval_format_tag::days::d"
 
+#, fuzzy
+msgid "0 days"
+msgstr "jours"
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr "y::year_abbreviation"
 
@@ -7651,37 +7676,56 @@ msgstr "Exporté: %s\n"
 msgid "%s%s: %s ago (%s)"
 msgstr "%s %s (%s aujourd'hui !)"
 
+#, fuzzy
+msgid "until today"
+msgstr "aujourd'hui"
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
-msgstr "%s %s (%s aujourd'hui !)"
+msgid "until %s%s ago"
+msgstr "Exporté: %s\n"
+
+#, fuzzy, python-format
+msgid " [planned: %s]"
+msgstr "Fermé"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (%s%s ago, in %s)"
 msgstr "%s %s (%s aujourd'hui !)"
 
-#, python-format
-msgid "%s ago"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr "%s %s (%s aujourd'hui !)"
 
 #, fuzzy, python-format
-msgid "in %s"
-msgstr "Commentaire (%s): %%s"
+msgid "%s%s%s (in %s%s)"
+msgstr "%s %s (%s aujourd'hui !)"
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr "Exporté: %s\n"
+msgid "%s (documented)"
+msgstr " %s documents\n"
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "%s (plan)"
 msgstr ""
 
-#, python-format
-msgid ", planned for %s%s"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s ago, in %s"
+msgstr "il y a %d jour(s) - %s"
 
 #, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr " Durée : %s (%s - %s)"
+msgid "in %s, %s"
+msgstr "Commentaire (%s): %%s"
+
+#, fuzzy, python-format
+msgid "%s ago = %s"
+msgstr "il y a %d jour(s) - %s"
+
+#, fuzzy, python-format
+msgid "in %s = %s"
+msgstr "Commentaire (%s): %%s"
+
+msgid "today"
+msgstr "aujourd'hui"
 
 msgid "Additional notes"
 msgstr "Notes additionnelles"
@@ -8230,6 +8274,10 @@ msgstr "Passe-temps"
 msgid "Vaccinations"
 msgstr "Vaccinations"
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 #, fuzzy
 msgid "Allergies/Intolerances"
 msgstr "allergies/intolérances"
@@ -9374,9 +9422,6 @@ msgstr "heure été/hiver activée"
 msgid "Location: %s (%s)"
 msgstr "Organisation: %s (%s)"
 
-msgid "today"
-msgstr "aujourd'hui"
-
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -10834,7 +10879,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr "Exporté: %s\n"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "Fermé"
 
 #, fuzzy, python-format
@@ -14513,6 +14562,10 @@ msgstr "Exporté: %s\n"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr "%s %s (%s aujourd'hui !)"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -18077,6 +18130,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "Subjectif"
@@ -19928,6 +19987,10 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr "Annuler et ne PAS se connecter a GNUmed."
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr " Durée : %s (%s - %s)"
+
+#, fuzzy
 #~ msgid "&Addresses"
 #~ msgstr "Adresse"
 
diff --git a/client/po/id-gnumed.mo b/client/po/id-gnumed.mo
index 082fa10..79aee5f 100644
Binary files a/client/po/id-gnumed.mo and b/client/po/id-gnumed.mo differ
diff --git a/client/po/id.po b/client/po/id.po
index 549a805..0cfd782 100644
--- a/client/po/id.po
+++ b/client/po/id.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -1569,6 +1569,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 #, fuzzy
 msgid "months"
 msgstr "Bulan"
@@ -1580,6 +1583,10 @@ msgstr "Bulan"
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+#, fuzzy
+msgid "0 months"
+msgstr "Bulan"
+
 msgid "weeks"
 msgstr ""
 
@@ -1589,15 +1596,33 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+#, fuzzy
+msgid "0 days"
+msgstr "hari"
+
+#, fuzzy
+msgid "0 hours"
+msgstr "jam"
+
+#, fuzzy
+msgid "0 minutes"
+msgstr "menit"
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -6693,36 +6718,54 @@ msgstr ""
 msgid "%s%s: %s ago (%s)"
 msgstr ""
 
+msgid "until today"
+msgstr ""
+
 #, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
 msgstr ""
 
 #, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid " [planned: %s]"
 msgstr ""
 
 #, python-format
-msgid "%s ago"
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr ""
+
+#, python-format
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr ""
+
+#, python-format
+msgid "%s%s%s (in %s%s)"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr "Deskripsi"
+
 #, python-format
-msgid "in %s"
+msgid "%s (plan)"
 msgstr ""
 
 #, python-format
-msgid ", until %s (%s)"
+msgid "%s ago, in %s"
 msgstr ""
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "in %s, %s"
 msgstr ""
 
 #, python-format
-msgid ", planned for %s%s"
+msgid "%s ago = %s"
 msgstr ""
 
 #, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
+msgid "in %s = %s"
+msgstr ""
+
+msgid "today"
 msgstr ""
 
 msgid "Additional notes"
@@ -7199,6 +7242,10 @@ msgstr ""
 msgid "Vaccinations"
 msgstr ""
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 msgid "Allergies/Intolerances"
 msgstr ""
 
@@ -8274,9 +8321,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr ""
 
-msgid "today"
-msgstr ""
-
 #, python-format
 msgid ""
 "\n"
@@ -9608,7 +9652,11 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr ""
+
+#, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr ""
 
 #, python-format
@@ -13072,6 +13120,10 @@ msgid "eGFR:"
 msgstr ""
 
 #, python-format
+msgid "%s%s%s (%s ago)"
+msgstr ""
+
+#, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
 
@@ -16468,6 +16520,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "soap_Subjek"
diff --git a/client/po/it-gnumed.mo b/client/po/it-gnumed.mo
index f582d7b..a89584c 100644
Binary files a/client/po/it-gnumed.mo and b/client/po/it-gnumed.mo differ
diff --git a/client/po/it.po b/client/po/it.po
index 998f388..0aa59f3 100644
--- a/client/po/it.po
+++ b/client/po/it.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2012-06-01 01:22+0000\n"
 "Last-Translator: ncq <Unknown>\n"
 "Language-Team: GNUmed\n"
@@ -1699,6 +1699,10 @@ msgstr "O anno:"
 msgid "interval_format_tag::years::y"
 msgstr "interval_format_tag::years::y"
 
+#, fuzzy
+msgid "0 years"
+msgstr "O anno:"
+
 msgid "months"
 msgstr ""
 
@@ -1708,6 +1712,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr "interval_format_tag::months::m"
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1717,15 +1724,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr "interval_format_tag::weeks::w"
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr "interval_format_tag::days::d"
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -7255,37 +7277,57 @@ msgstr "&Zona:"
 msgid "%s%s: %s ago (%s)"
 msgstr "%s%7s %s: %s (%s parte(i), %s)"
 
+#, fuzzy
+msgid "until today"
+msgstr "oggi (%s)"
+
+#, fuzzy, python-format
+msgid "until %s%s ago"
+msgstr "&Zona:"
+
+#, fuzzy, python-format
+msgid " [planned: %s]"
+msgstr "nessun paziente trovato per [%s]/%s"
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr "%s%7s %s: %s (%s parte(i), %s)"
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
+msgid "%s%s%s (%s%s ago, %s)"
 msgstr "%s%7s %s: %s (%s parte(i), %s)"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (in %s%s)"
 msgstr "%s%7s %s: %s (%s parte(i), %s)"
 
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr " %s documenti\n"
+
 #, python-format
-msgid "%s ago"
+msgid "%s (plan)"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "in %s"
-msgstr "Chiusa"
+msgid "%s ago, in %s"
+msgstr "%d giorno/i fa - %s"
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr "&Zona:"
+msgid "in %s, %s"
+msgstr "Chiusa"
 
 #, fuzzy, python-format
-msgid " (planned for %s%s)"
-msgstr "nessun paziente trovato per [%s]/%s"
+msgid "%s ago = %s"
+msgstr "%d giorno/i fa - %s"
 
 #, fuzzy, python-format
-msgid ", planned for %s%s"
-msgstr "nessun paziente trovato per [%s]/%s"
+msgid "in %s = %s"
+msgstr "Chiusa"
 
-#, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr " Durata: %s (%s - %s)"
+#, fuzzy
+msgid "today"
+msgstr "oggi (%s)"
 
 msgid "Additional notes"
 msgstr "Note aggiuntive"
@@ -7814,6 +7856,10 @@ msgstr "Occupazione"
 msgid "Vaccinations"
 msgstr "Vaccinazioni"
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 #, fuzzy
 msgid "Allergies/Intolerances"
 msgstr "allergie/intolleranze"
@@ -8942,10 +8988,6 @@ msgstr "ora legale in vigore"
 msgid "Location: %s (%s)"
 msgstr " Durata: %s (%s - %s)"
 
-#, fuzzy
-msgid "today"
-msgstr "oggi (%s)"
-
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -10358,7 +10400,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr "&Zona:"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "Chiusa"
 
 #, fuzzy, python-format
@@ -14038,6 +14084,10 @@ msgstr "&Zona:"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr "%s%7s %s: %s (%s parte(i), %s)"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -17632,6 +17682,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "Soggettivo"
@@ -19454,6 +19510,14 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr "Annulla e NON connetti a GNUmed"
 
 #, fuzzy
+#~ msgid " (planned for %s%s)"
+#~ msgstr "nessun paziente trovato per [%s]/%s"
+
+#, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr " Durata: %s (%s - %s)"
+
+#, fuzzy
 #~ msgid "&Addresses"
 #~ msgstr "Indirizzo"
 
diff --git a/client/po/ka-gnumed.mo b/client/po/ka-gnumed.mo
index 3369c64..071f74f 100644
Binary files a/client/po/ka-gnumed.mo and b/client/po/ka-gnumed.mo differ
diff --git a/client/po/ka.po b/client/po/ka.po
index 836aa54..cea57ca 100644
--- a/client/po/ka.po
+++ b/client/po/ka.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -1543,6 +1543,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 msgid "months"
 msgstr ""
 
@@ -1552,6 +1555,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1561,15 +1567,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -6662,44 +6683,66 @@ msgstr ""
 "%ს:%ს %.8ს (ვ%ს)\n"
 "%ს"
 
+msgid "until today"
+msgstr ""
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
+msgstr "ვაქცინაცია"
+
+#, python-format
+msgid " [planned: %s]"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
 msgstr ""
 "%ს:%ს %.8ს (ვ%ს)\n"
 "%ს"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (%s%s ago, %s)"
 msgstr ""
 "%ს:%ს %.8ს (ვ%ს)\n"
 "%ს"
 
-#, python-format
-msgid "%s ago"
+#, fuzzy, python-format
+msgid "%s%s%s (in %s%s)"
 msgstr ""
+"%ს:%ს %.8ს (ვ%ს)\n"
+"%ს"
+
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr " %ს საბუთები\n"
 
 #, python-format
-msgid "in %s"
+msgid "%s (plan)"
 msgstr ""
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr "ვაქცინაცია"
-
-#, python-format
-msgid " (planned for %s%s)"
+msgid "%s ago, in %s"
 msgstr ""
+"%ს:%ს %.8ს (ვ%ს)\n"
+"%ს"
 
 #, python-format
-msgid ", planned for %s%s"
+msgid "in %s, %s"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
+msgid "%s ago = %s"
 msgstr ""
 "%ს:%ს %.8ს (ვ%ს)\n"
 "%ს"
 
+#, python-format
+msgid "in %s = %s"
+msgstr ""
+
+msgid "today"
+msgstr ""
+
 msgid "Additional notes"
 msgstr ""
 
@@ -7178,6 +7221,10 @@ msgstr ""
 msgid "Vaccinations"
 msgstr "ვაქცინაცია"
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 msgid "Allergies/Intolerances"
 msgstr ""
 
@@ -8256,9 +8303,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr "ვაქცინაცია"
 
-msgid "today"
-msgstr ""
-
 #, python-format
 msgid ""
 "\n"
@@ -9595,8 +9639,12 @@ msgid ""
 "Please check patient age, patient gender, time until/since EDC."
 msgstr ""
 
+#, python-format
+msgid " (entered %s ago)"
+msgstr ""
+
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr ""
 "%ს:%ს %.8ს (ვ%ს)\n"
 "%ს"
@@ -13052,6 +13100,12 @@ msgstr ""
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr ""
+"%ს:%ს %.8ს (ვ%ს)\n"
+"%ს"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -16448,6 +16502,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "აქტიური"
@@ -18104,6 +18164,12 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr ""
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr ""
+#~ "%ს:%ს %.8ს (ვ%ს)\n"
+#~ "%ს"
+
+#, fuzzy
 #~ msgid "Or&Ganizations"
 #~ msgstr "ვაქცინაცია"
 
diff --git a/client/po/nb-gnumed.mo b/client/po/nb-gnumed.mo
index b00f7b9..bbf6e61 100644
Binary files a/client/po/nb-gnumed.mo and b/client/po/nb-gnumed.mo differ
diff --git a/client/po/nb.po b/client/po/nb.po
index 7a5f8b3..c407d37 100644
--- a/client/po/nb.po
+++ b/client/po/nb.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2009-02-12 20:47+0000\n"
 "Last-Translator: Leif Gunnar Erlandsen <Unknown>\n"
 "Language-Team: Norwegian Bokmal <nb at li.org>\n"
@@ -1592,6 +1592,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 msgid "months"
 msgstr ""
 
@@ -1601,6 +1604,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1610,15 +1616,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -6837,38 +6858,56 @@ msgstr "   Dok: %s"
 msgid "%s%s: %s ago (%s)"
 msgstr "   Dok: %s"
 
+msgid "until today"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "until %s%s ago"
+msgstr "   Dok: %s"
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
+msgid " [planned: %s]"
 msgstr "   Dok: %s"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr " Status: %s, %s"
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr " Status: %s, %s"
+
+#, fuzzy, python-format
+msgid "%s%s%s (in %s%s)"
 msgstr " Status: %s, %s"
 
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr "Dokumenter:"
+
 #, python-format
-msgid "%s ago"
+msgid "%s (plan)"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "in %s"
+msgid "%s ago, in %s"
+msgstr " Status: %s, %s"
+
+#, fuzzy, python-format
+msgid "in %s, %s"
 msgstr "Dokumenter: %s"
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
+msgid "%s ago = %s"
 msgstr "   Dok: %s"
 
-#, python-format
-msgid " (planned for %s%s)"
-msgstr ""
+#, fuzzy, python-format
+msgid "in %s = %s"
+msgstr "Dokumenter: %s"
 
-#, python-format
-msgid ", planned for %s%s"
+msgid "today"
 msgstr ""
 
-#, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr "Pasient: %s (%s), Nr: %s\n"
-
 msgid "Additional notes"
 msgstr ""
 
@@ -7361,6 +7400,10 @@ msgstr "Vaksinasjon"
 msgid "Vaccinations"
 msgstr ""
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 #, fuzzy
 msgid "Allergies/Intolerances"
 msgstr "allergier/intoleranser"
@@ -8461,9 +8504,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr "Vaksinasjon"
 
-msgid "today"
-msgstr ""
-
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -9829,7 +9869,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr "   Dok: %s"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr " Status: %s, %s"
 
 #, fuzzy, python-format
@@ -13346,6 +13390,10 @@ msgstr "   Dok: %s"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr "   Dok: %s"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -16802,6 +16850,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "Subjektiv"
@@ -18502,6 +18556,10 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr ""
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr "Pasient: %s (%s), Nr: %s\n"
+
+#, fuzzy
 #~ msgid "Or&Ganizations"
 #~ msgstr "Vaksinasjon"
 
diff --git a/client/po/nl-gnumed.mo b/client/po/nl-gnumed.mo
index 642c9b0..8e9920c 100644
Binary files a/client/po/nl-gnumed.mo and b/client/po/nl-gnumed.mo differ
diff --git a/client/po/nl.po b/client/po/nl.po
index 177aeda..a904dc1 100644
--- a/client/po/nl.po
+++ b/client/po/nl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2012-06-01 01:19+0000\n"
 "Last-Translator: Anik ten Have <anik at itchi-go.nl>\n"
 "Language-Team: Dutch <nl at li.org>\n"
@@ -1731,6 +1731,10 @@ msgstr "Of jaar:"
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+#, fuzzy
+msgid "0 years"
+msgstr "Of jaar:"
+
 msgid "months"
 msgstr ""
 
@@ -1740,6 +1744,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr "weken"
 
@@ -1749,15 +1756,32 @@ msgstr "week"
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+#, fuzzy
+msgid "0 weeks"
+msgstr "weken"
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+#, fuzzy
+msgid "0 days"
+msgstr "dagen"
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 #, fuzzy
 msgid "y::year_abbreviation"
 msgstr "Kalibreren"
@@ -7558,37 +7582,57 @@ msgstr "Geexporteerd: %s\n"
 msgid "%s%s: %s ago (%s)"
 msgstr "%s%7s %s: %s (%s part(s), %s)"
 
+#, fuzzy
+msgid "until today"
+msgstr "vandaag (%s)"
+
+#, fuzzy, python-format
+msgid "until %s%s ago"
+msgstr "SQL: %s"
+
+#, fuzzy, python-format
+msgid " [planned: %s]"
+msgstr "geen patiënt gevonden voor [%s]/%s"
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr "%s%7s %s: %s (%s part(s), %s)"
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
+msgid "%s%s%s (%s%s ago, %s)"
 msgstr "%s%7s %s: %s (%s part(s), %s)"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (in %s%s)"
 msgstr "%s%7s %s: %s (%s part(s), %s)"
 
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr " %s documenten\n"
+
 #, python-format
-msgid "%s ago"
+msgid "%s (plan)"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "in %s"
-msgstr "Documenten: %s"
+msgid "%s ago, in %s"
+msgstr "%d dag(en) geleden - %s"
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr "SQL: %s"
+msgid "in %s, %s"
+msgstr "Documenten: %s"
 
 #, fuzzy, python-format
-msgid " (planned for %s%s)"
-msgstr "geen patiënt gevonden voor [%s]/%s"
+msgid "%s ago = %s"
+msgstr "%d dag(en) geleden - %s"
 
 #, fuzzy, python-format
-msgid ", planned for %s%s"
-msgstr "geen patiënt gevonden voor [%s]/%s"
+msgid "in %s = %s"
+msgstr "Documenten: %s"
 
-#, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr "Ontmoetingen: %s (%s - %s):"
+#, fuzzy
+msgid "today"
+msgstr "vandaag (%s)"
 
 msgid "Additional notes"
 msgstr "Overige aantekeningen"
@@ -8108,6 +8152,10 @@ msgstr "Beroep"
 msgid "Vaccinations"
 msgstr "Vaccinaties"
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 #, fuzzy
 msgid "Allergies/Intolerances"
 msgstr "allergieën/ intolleranties"
@@ -9252,10 +9300,6 @@ msgstr "zomertijd ingegaan"
 msgid "Location: %s (%s)"
 msgstr "Ontmoetingen: %s (%s - %s):"
 
-#, fuzzy
-msgid "today"
-msgstr "vandaag (%s)"
-
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -10864,7 +10908,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr "Geexporteerd: %s\n"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "part %2s"
 
 #, fuzzy, python-format
@@ -14763,6 +14811,10 @@ msgstr "Geexporteerd: %s\n"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr "%s%7s %s: %s (%s part(s), %s)"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -18873,6 +18925,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "Anamnese"
@@ -20870,6 +20928,14 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr "Afbreken en GEEN verbinding maken met GNUmed."
 
 #, fuzzy
+#~ msgid " (planned for %s%s)"
+#~ msgstr "geen patiënt gevonden voor [%s]/%s"
+
+#, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr "Ontmoetingen: %s (%s - %s):"
+
+#, fuzzy
 #~ msgid "&Addresses"
 #~ msgstr "Adres"
 
diff --git a/client/po/pl-gnumed.mo b/client/po/pl-gnumed.mo
index 9e1bc74..29af396 100644
Binary files a/client/po/pl-gnumed.mo and b/client/po/pl-gnumed.mo differ
diff --git a/client/po/pl.po b/client/po/pl.po
index 07eef85..f5f91e1 100644
--- a/client/po/pl.po
+++ b/client/po/pl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2012-06-01 01:17+0000\n"
 "Last-Translator: J.Luszawski <jl at leksoft.com.pl>\n"
 "Language-Team: Polish <pl at li.org>\n"
@@ -1705,6 +1705,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 msgid "months"
 msgstr ""
 
@@ -1714,6 +1717,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1723,15 +1729,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -7115,41 +7136,67 @@ msgstr ""
 "%s:%s przez %.8s\n"
 "%s"
 
+#, fuzzy
+msgid "until today"
+msgstr "dzisiaj (%s)"
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
+msgstr "SQL: %s"
+
+#, fuzzy, python-format
+msgid " [planned: %s]"
+msgstr "Epizod"
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
 msgstr ""
 "%s:%s przez %.8s\n"
 "%s"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (%s%s ago, %s)"
 msgstr ""
 "%s:%s przez %.8s\n"
 "%s"
 
-#, python-format
-msgid "%s ago"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "in %s"
-msgstr "Epizod"
+msgid "%s%s%s (in %s%s)"
+msgstr ""
+"%s:%s przez %.8s\n"
+"%s"
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr "SQL: %s"
+msgid "%s (documented)"
+msgstr " %s dokumentów\n"
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "%s (plan)"
 msgstr ""
 
-#, python-format
-msgid ", planned for %s%s"
+#, fuzzy, python-format
+msgid "%s ago, in %s"
 msgstr ""
+"%s:%s przez %.8s\n"
+"%s"
 
 #, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr " Czas trwania: %s (%s - %s)"
+msgid "in %s, %s"
+msgstr "Epizod"
+
+#, fuzzy, python-format
+msgid "%s ago = %s"
+msgstr ""
+"%s:%s przez %.8s\n"
+"%s"
+
+#, fuzzy, python-format
+msgid "in %s = %s"
+msgstr "Epizod"
+
+#, fuzzy
+msgid "today"
+msgstr "dzisiaj (%s)"
 
 msgid "Additional notes"
 msgstr ""
@@ -7650,6 +7697,10 @@ msgstr "Zawody"
 msgid "Vaccinations"
 msgstr "Szczepienia"
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 #, fuzzy
 msgid "Allergies/Intolerances"
 msgstr "alergie/nietolerancje"
@@ -8772,10 +8823,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr " Czas trwania: %s (%s - %s)"
 
-#, fuzzy
-msgid "today"
-msgstr "dzisiaj (%s)"
-
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -10213,7 +10260,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr "Wystawca"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "Epizod"
 
 #, fuzzy, python-format
@@ -13830,6 +13881,12 @@ msgstr "Wystawca"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr ""
+"%s:%s przez %.8s\n"
+"%s"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -17383,6 +17440,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "Wywiad"
@@ -19146,6 +19209,10 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr "Przerwij i NIE łącz z GNUmed-em"
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr " Czas trwania: %s (%s - %s)"
+
+#, fuzzy
 #~ msgid "&Addresses"
 #~ msgstr "Adres"
 
diff --git a/client/po/pt-gnumed.mo b/client/po/pt-gnumed.mo
index 7c443ee..1929355 100644
Binary files a/client/po/pt-gnumed.mo and b/client/po/pt-gnumed.mo differ
diff --git a/client/po/pt.po b/client/po/pt.po
index 9ad6314..f364a7d 100644
--- a/client/po/pt.po
+++ b/client/po/pt.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2010-07-17 11:08+0000\n"
 "Last-Translator: Luis Mendonça <Unknown>\n"
 "Language-Team: Portuguese <pt at li.org>\n"
@@ -1691,6 +1691,10 @@ msgstr "ou Ano:"
 msgid "interval_format_tag::years::y"
 msgstr "interval_format_tag::years::y"
 
+#, fuzzy
+msgid "0 years"
+msgstr "ou Ano:"
+
 msgid "months"
 msgstr ""
 
@@ -1700,6 +1704,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr "interval_format_tag::months::m"
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1709,15 +1716,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr "interval_format_tag::weeks::w"
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr "interval_format_tag::days::d"
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr "y::year_abbreviation"
 
@@ -7315,41 +7337,63 @@ msgstr ""
 "%s: %s by %.8s\n"
 "%s"
 
+#, fuzzy
+msgid "until today"
+msgstr "hoje (%s)"
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
+msgstr "&Local"
+
+#, fuzzy, python-format
+msgid " [planned: %s]"
+msgstr "Fechado"
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
 msgstr ""
 "%s: %s by %.8s\n"
 "%s"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (%s%s ago, %s)"
 msgstr ""
 "%s: %s by %.8s\n"
 "%s"
 
-#, python-format
-msgid "%s ago"
-msgstr ""
-
 #, fuzzy, python-format
-msgid "in %s"
-msgstr "Comentário: %s"
+msgid "%s%s%s (in %s%s)"
+msgstr ""
+"%s: %s by %.8s\n"
+"%s"
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr "&Local"
+msgid "%s (documented)"
+msgstr " %s documentos\n"
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "%s (plan)"
 msgstr ""
 
-#, python-format
-msgid ", planned for %s%s"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s ago, in %s"
+msgstr "à %d dia(s) - %s"
 
 #, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr "Consultas: %s (%s - %s):"
+msgid "in %s, %s"
+msgstr "Comentário: %s"
+
+#, fuzzy, python-format
+msgid "%s ago = %s"
+msgstr "à %d dia(s) - %s"
+
+#, fuzzy, python-format
+msgid "in %s = %s"
+msgstr "Comentário: %s"
+
+#, fuzzy
+msgid "today"
+msgstr "hoje (%s)"
 
 msgid "Additional notes"
 msgstr "Notas adicionais"
@@ -7873,6 +7917,10 @@ msgstr "Profissão"
 msgid "Vaccinations"
 msgstr "Vacinas"
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 #, fuzzy
 msgid "Allergies/Intolerances"
 msgstr "alergias/intolerâncias"
@@ -9008,10 +9056,6 @@ msgstr "hora de verão activa"
 msgid "Location: %s (%s)"
 msgstr "Consultas: %s (%s - %s):"
 
-#, fuzzy
-msgid "today"
-msgstr "hoje (%s)"
-
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -10488,7 +10532,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr "&Local"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "Fechado"
 
 #, fuzzy, python-format
@@ -14177,6 +14225,12 @@ msgstr "&Local"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr ""
+"%s: %s by %.8s\n"
+"%s"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -17874,6 +17928,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "Subjectivo"
@@ -19744,6 +19804,10 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr "Imterromper e NÃO ligar ao GNUmed"
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr "Consultas: %s (%s - %s):"
+
+#, fuzzy
 #~ msgid "&Addresses"
 #~ msgstr "Endereço"
 
diff --git a/client/po/pt_BR-gnumed.mo b/client/po/pt_BR-gnumed.mo
index b8e2bb9..f7b1bd4 100644
Binary files a/client/po/pt_BR-gnumed.mo and b/client/po/pt_BR-gnumed.mo differ
diff --git a/client/po/pt_BR.po b/client/po/pt_BR.po
index d462b15..5b2676b 100644
--- a/client/po/pt_BR.po
+++ b/client/po/pt_BR.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2012-06-01 01:18+0000\n"
 "Last-Translator: Rogerio Luz Coelho <dr.rogerioluzcoelho at gmail.com>\n"
 "Language-Team: Brazilian Portuguese <pt_BR at li.org>\n"
@@ -1785,6 +1785,10 @@ msgstr "ou Ano:"
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+#, fuzzy
+msgid "0 years"
+msgstr "ou Ano:"
+
 msgid "months"
 msgstr ""
 
@@ -1794,6 +1798,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1803,15 +1810,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -7489,41 +7511,62 @@ msgstr ""
 "%s: %s by %.8s\n"
 "%s"
 
+#, fuzzy
+msgid "until today"
+msgstr "hoje"
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
+msgstr "Local"
+
+#, fuzzy, python-format
+msgid " [planned: %s]"
+msgstr " Fechada: %s\n"
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
 msgstr ""
 "%s: %s by %.8s\n"
 "%s"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (%s%s ago, %s)"
 msgstr ""
 "%s: %s by %.8s\n"
 "%s"
 
-#, python-format
-msgid "%s ago"
-msgstr "%s atrás"
-
 #, fuzzy, python-format
-msgid "in %s"
-msgstr "Comentário: %s"
+msgid "%s%s%s (in %s%s)"
+msgstr ""
+"%s: %s by %.8s\n"
+"%s"
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr "Local"
+msgid "%s (documented)"
+msgstr " %s documentos\n"
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "%s (plan)"
 msgstr ""
 
-#, python-format
-msgid ", planned for %s%s"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s ago, in %s"
+msgstr "%d dia(s) atrás - %s"
 
 #, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr " Duração: %s (%s - %s)"
+msgid "in %s, %s"
+msgstr "Comentário: %s"
+
+#, fuzzy, python-format
+msgid "%s ago = %s"
+msgstr "%s atrás"
+
+#, fuzzy, python-format
+msgid "in %s = %s"
+msgstr "Comentário: %s"
+
+msgid "today"
+msgstr "hoje"
 
 msgid "Additional notes"
 msgstr "Notas adicionais"
@@ -8053,6 +8096,10 @@ msgstr "Ocupações"
 msgid "Vaccinations"
 msgstr "Vacinas"
 
+#, python-format
+msgid "%s ago"
+msgstr "%s atrás"
+
 msgid "Allergies/Intolerances"
 msgstr "Alergias/Intolerâncias"
 
@@ -9186,9 +9233,6 @@ msgstr "Horário de Verão"
 msgid "Location: %s (%s)"
 msgstr "Consultas: %s (%s - %s):"
 
-msgid "today"
-msgstr "hoje"
-
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -10668,7 +10712,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr "Local"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "Fechado"
 
 #, fuzzy, python-format
@@ -14364,6 +14412,12 @@ msgstr "Local"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr ""
+"%s: %s by %.8s\n"
+"%s"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -18068,6 +18122,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "Subjetivo"
@@ -19932,6 +19992,10 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr "Cancelar e NÃO conectar ao GNUmed."
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr " Duração: %s (%s - %s)"
+
+#, fuzzy
 #~ msgid "&Addresses"
 #~ msgstr "Endereço"
 
diff --git a/client/po/ro-gnumed.mo b/client/po/ro-gnumed.mo
index 9dbfe54..c666289 100644
Binary files a/client/po/ro-gnumed.mo and b/client/po/ro-gnumed.mo differ
diff --git a/client/po/ro.po b/client/po/ro.po
index 9c2d0ce..30f4420 100644
--- a/client/po/ro.po
+++ b/client/po/ro.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -1542,6 +1542,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 msgid "months"
 msgstr ""
 
@@ -1551,6 +1554,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1560,15 +1566,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -6646,36 +6667,54 @@ msgstr ""
 msgid "%s%s: %s ago (%s)"
 msgstr ""
 
+msgid "until today"
+msgstr ""
+
 #, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
 msgstr ""
 
 #, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid " [planned: %s]"
 msgstr ""
 
 #, python-format
-msgid "%s ago"
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr ""
+
+#, python-format
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr ""
+
+#, python-format
+msgid "%s%s%s (in %s%s)"
 msgstr ""
 
 #, python-format
-msgid "in %s"
+msgid "%s (documented)"
 msgstr ""
 
 #, python-format
-msgid ", until %s (%s)"
+msgid "%s (plan)"
 msgstr ""
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "%s ago, in %s"
 msgstr ""
 
 #, python-format
-msgid ", planned for %s%s"
+msgid "in %s, %s"
 msgstr ""
 
 #, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
+msgid "%s ago = %s"
+msgstr ""
+
+#, python-format
+msgid "in %s = %s"
+msgstr ""
+
+msgid "today"
 msgstr ""
 
 msgid "Additional notes"
@@ -7149,6 +7188,10 @@ msgstr ""
 msgid "Vaccinations"
 msgstr ""
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 msgid "Allergies/Intolerances"
 msgstr ""
 
@@ -8223,9 +8266,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr ""
 
-msgid "today"
-msgstr ""
-
 #, python-format
 msgid ""
 "\n"
@@ -9557,7 +9597,11 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr ""
+
+#, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr ""
 
 #, python-format
@@ -13005,6 +13049,10 @@ msgid "eGFR:"
 msgstr ""
 
 #, python-format
+msgid "%s%s%s (%s ago)"
+msgstr ""
+
+#, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
 
@@ -16386,6 +16434,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 msgid "as &Subjective"
 msgstr ""
 
diff --git a/client/po/ru-gnumed.mo b/client/po/ru-gnumed.mo
index 74de07d..b0ab387 100644
Binary files a/client/po/ru-gnumed.mo and b/client/po/ru-gnumed.mo differ
diff --git a/client/po/ru.po b/client/po/ru.po
index e3926ef..c927f63 100644
--- a/client/po/ru.po
+++ b/client/po/ru.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2012-01-21 13:50+0000\n"
 "Last-Translator: YvLy <Unknown>\n"
 "Language-Team: Russian <ru at li.org>\n"
@@ -1815,6 +1815,10 @@ msgid "interval_format_tag::years::y"
 msgstr "interval_format_tag::years::y"
 
 #, fuzzy
+msgid "0 years"
+msgstr "Или год:"
+
+#, fuzzy
 msgid "months"
 msgstr "Месяц"
 
@@ -1825,6 +1829,10 @@ msgstr "Месяц"
 msgid "interval_format_tag::months::m"
 msgstr "interval_format_tag::months::m"
 
+#, fuzzy
+msgid "0 months"
+msgstr "Месяц"
+
 msgid "weeks"
 msgstr "недели"
 
@@ -1834,15 +1842,34 @@ msgstr "неделя"
 msgid "interval_format_tag::weeks::w"
 msgstr "interval_format_tag::weeks::w"
 
+#, fuzzy
+msgid "0 weeks"
+msgstr "недели"
+
 msgid "interval_format_tag::days::d"
 msgstr "interval_format_tag::days::d"
 
+#, fuzzy
+msgid "0 days"
+msgstr "дней"
+
+#, fuzzy
+msgid "0 hours"
+msgstr "часов"
+
+#, fuzzy
+msgid "0 minutes"
+msgstr "минут"
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr "y::year_abbreviation"
 
@@ -7785,37 +7812,56 @@ msgstr "%s тому назад"
 msgid "%s%s: %s ago (%s)"
 msgstr "%s%7s %s:%s (%s часть(и)%s)"
 
+#, fuzzy
+msgid "until today"
+msgstr "сегодня"
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
+msgstr "работа: %s"
+
+#, fuzzy, python-format
+msgid " [planned: %s]"
+msgstr "для [%s]/%s пациент не найден"
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
 msgstr "%s%7s %s:%s (%s часть(и)%s)"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (%s%s ago, %s)"
 msgstr "%s%7s %s:%s (%s часть(и)%s)"
 
-#, python-format
-msgid "%s ago"
-msgstr "%s тому назад"
+#, fuzzy, python-format
+msgid "%s%s%s (in %s%s)"
+msgstr "%s%7s %s:%s (%s часть(и)%s)"
 
 #, fuzzy, python-format
-msgid "in %s"
-msgstr "Комментарий (%s): %%s"
+msgid "%s (documented)"
+msgstr " %s документов\n"
+
+#, python-format
+msgid "%s (plan)"
+msgstr ""
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr "работа: %s"
+msgid "%s ago, in %s"
+msgstr "%d дней тому назад - %s"
 
 #, fuzzy, python-format
-msgid " (planned for %s%s)"
-msgstr "для [%s]/%s пациент не найден"
+msgid "in %s, %s"
+msgstr "Комментарий (%s): %%s"
 
 #, fuzzy, python-format
-msgid ", planned for %s%s"
-msgstr "для [%s]/%s пациент не найден"
+msgid "%s ago = %s"
+msgstr "%s тому назад"
 
 #, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr " Продолжительность: %s (%s - %s)"
+msgid "in %s = %s"
+msgstr "Комментарий (%s): %%s"
+
+msgid "today"
+msgstr "сегодня"
 
 msgid "Additional notes"
 msgstr "Дополнительные заметки"
@@ -8347,6 +8393,10 @@ msgstr "Род занятий"
 msgid "Vaccinations"
 msgstr "Прививки"
 
+#, python-format
+msgid "%s ago"
+msgstr "%s тому назад"
+
 #, fuzzy
 msgid "Allergies/Intolerances"
 msgstr "аллергия/непереносимость"
@@ -9505,9 +9555,6 @@ msgstr "переведено на летнее время"
 msgid "Location: %s (%s)"
 msgstr "Организация: %s (%s)"
 
-msgid "today"
-msgstr "сегодня"
-
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -11094,7 +11141,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr "Дата:%s\n"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "часть %s: %s"
 
 #, fuzzy, python-format
@@ -15215,6 +15266,10 @@ msgstr "Дата:%s\n"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr "%s%7s %s:%s (%s часть(и)%s)"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -19301,6 +19356,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "Субъективный"
@@ -21302,6 +21363,14 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr "Отменить и НЕ подключаться к GNUmed."
 
 #, fuzzy
+#~ msgid " (planned for %s%s)"
+#~ msgstr "для [%s]/%s пациент не найден"
+
+#, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr " Продолжительность: %s (%s - %s)"
+
+#, fuzzy
 #~ msgid "&Addresses"
 #~ msgstr "Адрес"
 
diff --git a/client/po/ru_RU-gnumed.mo b/client/po/ru_RU-gnumed.mo
index 76a9fe1..2770ff8 100644
Binary files a/client/po/ru_RU-gnumed.mo and b/client/po/ru_RU-gnumed.mo differ
diff --git a/client/po/ru_RU.po b/client/po/ru_RU.po
index 51ac645..3da39eb 100644
--- a/client/po/ru_RU.po
+++ b/client/po/ru_RU.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2012-05-30 18:43+0000\n"
 "Last-Translator: YvLy <Unknown>\n"
 "Language-Team: Russian <ru at li.org>\n"
@@ -1821,6 +1821,10 @@ msgid "interval_format_tag::years::y"
 msgstr "interval_format_tag::years::y"
 
 #, fuzzy
+msgid "0 years"
+msgstr "Или год:"
+
+#, fuzzy
 msgid "months"
 msgstr "Месяц"
 
@@ -1831,6 +1835,10 @@ msgstr "Месяц"
 msgid "interval_format_tag::months::m"
 msgstr "interval_format_tag::months::m"
 
+#, fuzzy
+msgid "0 months"
+msgstr "Месяц"
+
 msgid "weeks"
 msgstr "недели"
 
@@ -1840,15 +1848,34 @@ msgstr "неделя"
 msgid "interval_format_tag::weeks::w"
 msgstr "interval_format_tag::weeks::w"
 
+#, fuzzy
+msgid "0 weeks"
+msgstr "недели"
+
 msgid "interval_format_tag::days::d"
 msgstr "interval_format_tag::days::d"
 
+#, fuzzy
+msgid "0 days"
+msgstr "дней"
+
+#, fuzzy
+msgid "0 hours"
+msgstr "часов"
+
+#, fuzzy
+msgid "0 minutes"
+msgstr "минут"
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr "y::year_abbreviation"
 
@@ -7773,37 +7800,56 @@ msgstr "%s тому назад"
 msgid "%s%s: %s ago (%s)"
 msgstr "%s %s %s %s (%s тому назад, %s)"
 
+#, fuzzy
+msgid "until today"
+msgstr "сегодня"
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
+msgstr "работа: %s"
+
+#, fuzzy, python-format
+msgid " [planned: %s]"
+msgstr "для [%s]/%s пациент не найден"
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
 msgstr "%s %s %s %s (%s тому назад, %s)"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (%s%s ago, %s)"
 msgstr "%s %s %s %s (%s тому назад, %s)"
 
-#, python-format
-msgid "%s ago"
-msgstr "%s тому назад"
+#, fuzzy, python-format
+msgid "%s%s%s (in %s%s)"
+msgstr "%s %s %s %s (%s тому назад, %s)"
 
 #, fuzzy, python-format
-msgid "in %s"
-msgstr "подлежит %s: %s"
+msgid "%s (documented)"
+msgstr " %s документов\n"
+
+#, python-format
+msgid "%s (plan)"
+msgstr ""
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr "работа: %s"
+msgid "%s ago, in %s"
+msgstr "%d дней тому назад - %s"
 
 #, fuzzy, python-format
-msgid " (planned for %s%s)"
-msgstr "для [%s]/%s пациент не найден"
+msgid "in %s, %s"
+msgstr "подлежит %s: %s"
 
 #, fuzzy, python-format
-msgid ", planned for %s%s"
-msgstr "для [%s]/%s пациент не найден"
+msgid "%s ago = %s"
+msgstr "%s тому назад"
 
 #, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr " Продолжительность: %s (%s - %s)"
+msgid "in %s = %s"
+msgstr "подлежит %s: %s"
+
+msgid "today"
+msgstr "сегодня"
 
 msgid "Additional notes"
 msgstr "Дополнительные записи"
@@ -8334,6 +8380,10 @@ msgstr "Род занятий"
 msgid "Vaccinations"
 msgstr "Прививки"
 
+#, python-format
+msgid "%s ago"
+msgstr "%s тому назад"
+
 msgid "Allergies/Intolerances"
 msgstr "Аллергии/непереносимости"
 
@@ -9486,9 +9536,6 @@ msgstr "переведено на летнее время"
 msgid "Location: %s (%s)"
 msgstr "Организация: %s (%s)"
 
-msgid "today"
-msgstr "сегодня"
-
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -11058,7 +11105,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr "Подлежит: %s\n"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "%s Вакц: %s"
 
 #, fuzzy, python-format
@@ -15129,6 +15180,10 @@ msgstr "Подлежит: %s\n"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr "%s %s %s %s (%s тому назад, %s)"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -19189,6 +19244,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "Субъективный"
@@ -21185,6 +21246,14 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr "Отменить и НЕ подключаться к GNUmed."
 
 #, fuzzy
+#~ msgid " (planned for %s%s)"
+#~ msgstr "для [%s]/%s пациент не найден"
+
+#, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr " Продолжительность: %s (%s - %s)"
+
+#, fuzzy
 #~ msgid "&Addresses"
 #~ msgstr "Адрес"
 
diff --git a/client/po/sq-gnumed.mo b/client/po/sq-gnumed.mo
index e0f41f3..bcf7e17 100644
Binary files a/client/po/sq-gnumed.mo and b/client/po/sq-gnumed.mo differ
diff --git a/client/po/sq.po b/client/po/sq.po
index 09e5cbc..aa61ae1 100644
--- a/client/po/sq.po
+++ b/client/po/sq.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -1680,6 +1680,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 #, fuzzy
 msgid "months"
 msgstr "Muaj"
@@ -1691,6 +1694,10 @@ msgstr "Muaj"
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+#, fuzzy
+msgid "0 months"
+msgstr "Muaj"
+
 msgid "weeks"
 msgstr ""
 
@@ -1700,15 +1707,33 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+#, fuzzy
+msgid "0 days"
+msgstr "ditë"
+
+#, fuzzy
+msgid "0 hours"
+msgstr "orë"
+
+#, fuzzy
+msgid "0 minutes"
+msgstr "minuta"
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -6840,37 +6865,56 @@ msgstr ""
 "%s: %s by %.8s (v%s)\n"
 "%s"
 
+#, fuzzy
+msgid "until today"
+msgstr "Perfundon sot"
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
+msgstr "Njesi: %s (%s)"
+
+#, fuzzy, python-format
+msgid " [planned: %s]"
+msgstr " E mbyllur:%s\n"
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
 msgstr " Kohezgjatja: %s (%s - %s)"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (%s%s ago, %s)"
 msgstr " Kohezgjatja: %s (%s - %s)"
 
-#, python-format
-msgid "%s ago"
-msgstr "%s më parë"
+#, fuzzy, python-format
+msgid "%s%s%s (in %s%s)"
+msgstr " Kohezgjatja: %s (%s - %s)"
+
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr " %s dokumente\n"
 
 #, python-format
-msgid "in %s"
+msgid "%s (plan)"
 msgstr ""
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
-msgstr "Njesi: %s (%s)"
+msgid "%s ago, in %s"
+msgstr "%s më parë"
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "in %s, %s"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s ago = %s"
+msgstr "%s më parë"
+
 #, python-format
-msgid ", planned for %s%s"
+msgid "in %s = %s"
 msgstr ""
 
-#, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr " Kohezgjatja: %s (%s - %s)"
+msgid "today"
+msgstr "sot"
 
 msgid "Additional notes"
 msgstr "Shenime shtese"
@@ -7394,6 +7438,10 @@ msgstr "Profesionet"
 msgid "Vaccinations"
 msgstr "Vaksinimet"
 
+#, python-format
+msgid "%s ago"
+msgstr "%s më parë"
+
 msgid "Allergies/Intolerances"
 msgstr "Alergjite/intolerancat"
 
@@ -8497,9 +8545,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr "Organizate: %s (%s)"
 
-msgid "today"
-msgstr "sot"
-
 #, python-format
 msgid ""
 "\n"
@@ -9841,7 +9886,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr " Kohezgjatja: %s (%s - %s)"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "Njesi: %s (%s)"
 
 #, fuzzy, python-format
@@ -13340,6 +13389,10 @@ msgstr " Kohezgjatja: %s (%s - %s)"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr " Kohezgjatja: %s (%s - %s)"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -16768,6 +16821,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "sapun_Subjektiv"
@@ -18445,6 +18504,10 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr ""
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr " Kohezgjatja: %s (%s - %s)"
+
+#, fuzzy
 #~ msgid "Or&Ganizations"
 #~ msgstr "Organizate: %s (%s)"
 
diff --git a/client/po/sr-gnumed.mo b/client/po/sr-gnumed.mo
index 38b0133..75980a3 100644
Binary files a/client/po/sr-gnumed.mo and b/client/po/sr-gnumed.mo differ
diff --git a/client/po/sr.po b/client/po/sr.po
index e3ca325..320f52c 100644
--- a/client/po/sr.po
+++ b/client/po/sr.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2011-08-25 16:54+0000\n"
 "Last-Translator: Karolina Kalic <Unknown>\n"
 "Language-Team: Serbian <sr at li.org>\n"
@@ -1594,6 +1594,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr "interval_format_tag::years::y"
 
+msgid "0 years"
+msgstr ""
+
 msgid "months"
 msgstr ""
 
@@ -1603,6 +1606,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr "interval_format_tag::months::m"
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1612,15 +1618,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr "interval_format_tag::weeks::w"
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr "interval_format_tag::days::d"
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr "y::year_abbreviation"
 
@@ -6805,37 +6826,57 @@ msgstr "Документа: %s"
 msgid "%s%s: %s ago (%s)"
 msgstr "Документа: %s"
 
+#, fuzzy
+msgid "until today"
+msgstr "данас (%s)"
+
+#, fuzzy, python-format
+msgid "until %s%s ago"
+msgstr "Пацијент: %s (%s), Бр: %s\n"
+
+#, python-format
+msgid " [planned: %s]"
+msgstr ""
+
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr "Документа: %s"
+
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
+msgid "%s%s%s (%s%s ago, %s)"
 msgstr "Документа: %s"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "%s%s%s (in %s%s)"
 msgstr "Документа: %s"
 
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr " %s докумената\n"
+
 #, python-format
-msgid "%s ago"
+msgid "%s (plan)"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "in %s"
-msgstr "Пацијент: %s (%s), Бр: %s\n"
+msgid "%s ago, in %s"
+msgstr "Документа: %s"
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
+msgid "in %s, %s"
 msgstr "Пацијент: %s (%s), Бр: %s\n"
 
-#, python-format
-msgid " (planned for %s%s)"
-msgstr ""
-
-#, python-format
-msgid ", planned for %s%s"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s ago = %s"
+msgstr "Документа: %s"
 
 #, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr "  ваше време: %s - %s  (@%s = %s%s)\n"
+msgid "in %s = %s"
+msgstr "Пацијент: %s (%s), Бр: %s\n"
+
+#, fuzzy
+msgid "today"
+msgstr "данас (%s)"
 
 msgid "Additional notes"
 msgstr "Додатне белешке"
@@ -7325,6 +7366,10 @@ msgstr ""
 msgid "Vaccinations"
 msgstr "Вакцинације"
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 #, fuzzy
 msgid "Allergies/Intolerances"
 msgstr "алергије/нетолеранције"
@@ -8422,10 +8467,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr "Пацијент: %s (%s), Бр: %s\n"
 
-#, fuzzy
-msgid "today"
-msgstr "данас (%s)"
-
 #, python-format
 msgid ""
 "\n"
@@ -9800,7 +9841,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr "Документа: %s"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr "Пацијент: %s (%s), Бр: %s\n"
 
 #, fuzzy, python-format
@@ -13322,6 +13367,10 @@ msgstr "Документа: %s"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr "Документа: %s"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -16804,6 +16853,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "активан"
@@ -18519,6 +18574,10 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr ""
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr "  ваше време: %s - %s  (@%s = %s%s)\n"
+
+#, fuzzy
 #~ msgid "Or&Ganizations"
 #~ msgstr "&Вакцинације"
 
diff --git a/client/po/sv-gnumed.mo b/client/po/sv-gnumed.mo
index 2c40121..da11ec0 100644
Binary files a/client/po/sv-gnumed.mo and b/client/po/sv-gnumed.mo differ
diff --git a/client/po/sv.po b/client/po/sv.po
index 12da35a..4d996b5 100644
--- a/client/po/sv.po
+++ b/client/po/sv.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: gnumed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: 2012-04-07 10:15+0000\n"
 "Last-Translator: Rikard Edgren <Unknown>\n"
 "Language-Team: Swedish <kde-i18n-doc at kde.org>\n"
@@ -1725,6 +1725,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 #, fuzzy
 msgid "months"
 msgstr "Månad"
@@ -1736,6 +1739,10 @@ msgstr "Månad"
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+#, fuzzy
+msgid "0 months"
+msgstr "Månad"
+
 msgid "weeks"
 msgstr ""
 
@@ -1745,15 +1752,33 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+#, fuzzy
+msgid "0 days"
+msgstr "dagar"
+
+#, fuzzy
+msgid "0 hours"
+msgstr "timmar"
+
+#, fuzzy
+msgid "0 minutes"
+msgstr "minuter"
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -7041,37 +7066,56 @@ msgstr "Enhet: %s (%s)"
 msgid "%s%s: %s ago (%s)"
 msgstr "Enhet: %s (%s)"
 
-#, fuzzy, python-format
-msgid "%s%s%s (%s ago)"
-msgstr "Enhet: %s (%s)"
+#, fuzzy
+msgid "until today"
+msgstr "Slutar idag"
 
 #, fuzzy, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid "until %s%s ago"
 msgstr "Enhet: %s (%s)"
 
 #, python-format
-msgid "%s ago"
+msgid " [planned: %s]"
 msgstr ""
 
-#, python-format
-msgid "in %s"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr "Enhet: %s (%s)"
 
 #, fuzzy, python-format
-msgid ", until %s (%s)"
+msgid "%s%s%s (%s%s ago, %s)"
 msgstr "Enhet: %s (%s)"
 
-#, python-format
-msgid " (planned for %s%s)"
-msgstr ""
+#, fuzzy, python-format
+msgid "%s%s%s (in %s%s)"
+msgstr "Enhet: %s (%s)"
+
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr " %s dokument\n"
 
 #, python-format
-msgid ", planned for %s%s"
+msgid "%s (plan)"
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
-msgstr " Spann: %s (%s - %s)"
+msgid "%s ago, in %s"
+msgstr "för %d dagar sedan - %s"
+
+#, fuzzy, python-format
+msgid "in %s, %s"
+msgstr "Alldeles nu (%s, %s)"
+
+#, fuzzy, python-format
+msgid "%s ago = %s"
+msgstr "för %d dagar sedan - %s"
+
+#, fuzzy, python-format
+msgid "in %s = %s"
+msgstr "om %d dagar - %s"
+
+msgid "today"
+msgstr ""
 
 msgid "Additional notes"
 msgstr "Övriga anteckningar"
@@ -7599,6 +7643,10 @@ msgstr "Sysselsättning"
 msgid "Vaccinations"
 msgstr "Vaccinering"
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 msgid "Allergies/Intolerances"
 msgstr ""
 
@@ -8723,9 +8771,6 @@ msgstr "Effektiv besparing av tid i dagsljus"
 msgid "Location: %s (%s)"
 msgstr "Organisation: %s (%s)"
 
-msgid "today"
-msgstr ""
-
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -10102,7 +10147,11 @@ msgid ""
 msgstr ""
 
 #, fuzzy, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr "Enhet: %s (%s)"
+
+#, fuzzy, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr ""
 "\n"
 " Ta(inta): %s"
@@ -13617,6 +13666,10 @@ msgstr "Enhet: %s (%s)"
 msgid "eGFR:"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s%s%s (%s ago)"
+msgstr "Enhet: %s (%s)"
+
 #, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
@@ -17151,6 +17204,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "soap_Subjective"
@@ -18884,6 +18943,10 @@ msgid "Abort and do NOT connect to GNUmed."
 msgstr "Avbryt och anslut EJ till GNUmed."
 
 #, fuzzy
+#~ msgid "%s %s ago (for %s: %s %s %s)"
+#~ msgstr " Spann: %s (%s - %s)"
+
+#, fuzzy
 #~ msgid "Or&Ganizations"
 #~ msgstr "Organisation: %s (%s)"
 
diff --git a/client/po/tr-gnumed.mo b/client/po/tr-gnumed.mo
index 2e14d9f..3d42a82 100644
Binary files a/client/po/tr-gnumed.mo and b/client/po/tr-gnumed.mo differ
diff --git a/client/po/tr.po b/client/po/tr.po
index 2ad5528..7db46a5 100644
--- a/client/po/tr.po
+++ b/client/po/tr.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -1557,6 +1557,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 msgid "months"
 msgstr ""
 
@@ -1566,6 +1569,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1575,15 +1581,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -6669,36 +6690,54 @@ msgstr ""
 msgid "%s%s: %s ago (%s)"
 msgstr ""
 
+msgid "until today"
+msgstr ""
+
 #, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
 msgstr ""
 
 #, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid " [planned: %s]"
 msgstr ""
 
 #, python-format
-msgid "%s ago"
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr ""
+
+#, python-format
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr ""
+
+#, python-format
+msgid "%s%s%s (in %s%s)"
 msgstr ""
 
 #, python-format
-msgid "in %s"
+msgid "%s (documented)"
 msgstr ""
 
 #, python-format
-msgid ", until %s (%s)"
+msgid "%s (plan)"
 msgstr ""
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "%s ago, in %s"
 msgstr ""
 
 #, python-format
-msgid ", planned for %s%s"
+msgid "in %s, %s"
 msgstr ""
 
 #, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
+msgid "%s ago = %s"
+msgstr ""
+
+#, python-format
+msgid "in %s = %s"
+msgstr ""
+
+msgid "today"
 msgstr ""
 
 msgid "Additional notes"
@@ -7171,6 +7210,10 @@ msgstr ""
 msgid "Vaccinations"
 msgstr ""
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 msgid "Allergies/Intolerances"
 msgstr ""
 
@@ -8245,9 +8288,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr ""
 
-msgid "today"
-msgstr ""
-
 #, python-format
 msgid ""
 "\n"
@@ -9579,7 +9619,11 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr ""
+
+#, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr ""
 
 #, python-format
@@ -13031,6 +13075,10 @@ msgid "eGFR:"
 msgstr ""
 
 #, python-format
+msgid "%s%s%s (%s ago)"
+msgstr ""
+
+#, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
 
@@ -16419,6 +16467,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 #, fuzzy
 msgid "as &Subjective"
 msgstr "aktif"
diff --git a/client/po/uk-gnumed.mo b/client/po/uk-gnumed.mo
index d73b115..03c8db9 100644
Binary files a/client/po/uk-gnumed.mo and b/client/po/uk-gnumed.mo differ
diff --git a/client/po/uk.po b/client/po/uk.po
index d819152..68a73b6 100644
--- a/client/po/uk.po
+++ b/client/po/uk.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -1542,6 +1542,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 msgid "months"
 msgstr ""
 
@@ -1551,6 +1554,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1560,15 +1566,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -6645,36 +6666,54 @@ msgstr ""
 msgid "%s%s: %s ago (%s)"
 msgstr ""
 
+msgid "until today"
+msgstr ""
+
 #, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
 msgstr ""
 
 #, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid " [planned: %s]"
 msgstr ""
 
 #, python-format
-msgid "%s ago"
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr ""
+
+#, python-format
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr ""
+
+#, python-format
+msgid "%s%s%s (in %s%s)"
 msgstr ""
 
 #, python-format
-msgid "in %s"
+msgid "%s (documented)"
 msgstr ""
 
 #, python-format
-msgid ", until %s (%s)"
+msgid "%s (plan)"
 msgstr ""
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "%s ago, in %s"
 msgstr ""
 
 #, python-format
-msgid ", planned for %s%s"
+msgid "in %s, %s"
 msgstr ""
 
 #, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
+msgid "%s ago = %s"
+msgstr ""
+
+#, python-format
+msgid "in %s = %s"
+msgstr ""
+
+msgid "today"
 msgstr ""
 
 msgid "Additional notes"
@@ -7147,6 +7186,10 @@ msgstr ""
 msgid "Vaccinations"
 msgstr ""
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 msgid "Allergies/Intolerances"
 msgstr ""
 
@@ -8221,9 +8264,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr ""
 
-msgid "today"
-msgstr ""
-
 #, python-format
 msgid ""
 "\n"
@@ -9555,7 +9595,11 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr ""
+
+#, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr ""
 
 #, python-format
@@ -13003,6 +13047,10 @@ msgid "eGFR:"
 msgstr ""
 
 #, python-format
+msgid "%s%s%s (%s ago)"
+msgstr ""
+
+#, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
 
@@ -16384,6 +16432,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 msgid "as &Subjective"
 msgstr ""
 
diff --git a/client/po/zh_TW-gnumed.mo b/client/po/zh_TW-gnumed.mo
index a20c1ab..da53d80 100644
Binary files a/client/po/zh_TW-gnumed.mo and b/client/po/zh_TW-gnumed.mo differ
diff --git a/client/po/zh_TW.po b/client/po/zh_TW.po
index f1ff160..7c287e3 100644
--- a/client/po/zh_TW.po
+++ b/client/po/zh_TW.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GNUmed\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-08-01 11:56+0200\n"
+"POT-Creation-Date: 2016-08-18 21:22+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -1543,6 +1543,9 @@ msgstr ""
 msgid "interval_format_tag::years::y"
 msgstr ""
 
+msgid "0 years"
+msgstr ""
+
 msgid "months"
 msgstr ""
 
@@ -1552,6 +1555,9 @@ msgstr ""
 msgid "interval_format_tag::months::m"
 msgstr ""
 
+msgid "0 months"
+msgstr ""
+
 msgid "weeks"
 msgstr ""
 
@@ -1561,15 +1567,30 @@ msgstr ""
 msgid "interval_format_tag::weeks::w"
 msgstr ""
 
+msgid "0 weeks"
+msgstr ""
+
 msgid "interval_format_tag::days::d"
 msgstr ""
 
+msgid "0 days"
+msgstr ""
+
+msgid "0 hours"
+msgstr ""
+
+msgid "0 minutes"
+msgstr ""
+
 msgid "seconds"
 msgstr ""
 
 msgid "second"
 msgstr ""
 
+msgid "0 seconds"
+msgstr ""
+
 msgid "y::year_abbreviation"
 msgstr ""
 
@@ -6652,36 +6673,54 @@ msgstr ""
 msgid "%s%s: %s ago (%s)"
 msgstr ""
 
+msgid "until today"
+msgstr ""
+
 #, python-format
-msgid "%s%s%s (%s ago)"
+msgid "until %s%s ago"
 msgstr ""
 
 #, python-format
-msgid "%s%s%s (%s ago, %s)"
+msgid " [planned: %s]"
 msgstr ""
 
 #, python-format
-msgid "%s ago"
+msgid "%s%s%s (%s%s ago, in %s)"
+msgstr ""
+
+#, python-format
+msgid "%s%s%s (%s%s ago, %s)"
+msgstr ""
+
+#, python-format
+msgid "%s%s%s (in %s%s)"
 msgstr ""
 
+#, fuzzy, python-format
+msgid "%s (documented)"
+msgstr "註記"
+
 #, python-format
-msgid "in %s"
+msgid "%s (plan)"
 msgstr ""
 
 #, python-format
-msgid ", until %s (%s)"
+msgid "%s ago, in %s"
 msgstr ""
 
 #, python-format
-msgid " (planned for %s%s)"
+msgid "in %s, %s"
 msgstr ""
 
 #, python-format
-msgid ", planned for %s%s"
+msgid "%s ago = %s"
 msgstr ""
 
 #, python-format
-msgid "%s %s ago (for %s: %s %s %s)"
+msgid "in %s = %s"
+msgstr ""
+
+msgid "today"
 msgstr ""
 
 msgid "Additional notes"
@@ -7157,6 +7196,10 @@ msgstr ""
 msgid "Vaccinations"
 msgstr ""
 
+#, python-format
+msgid "%s ago"
+msgstr ""
+
 msgid "Allergies/Intolerances"
 msgstr ""
 
@@ -8234,9 +8277,6 @@ msgstr ""
 msgid "Location: %s (%s)"
 msgstr ""
 
-msgid "today"
-msgstr ""
-
 #, python-format
 msgid ""
 "\n"
@@ -9569,7 +9609,11 @@ msgid ""
 msgstr ""
 
 #, python-format
-msgid "%s Vacc: %s (latest of %s)"
+msgid " (entered %s ago)"
+msgstr ""
+
+#, python-format
+msgid "%s Vacc: %s (latest of %s: %s ago)"
 msgstr ""
 
 #, python-format
@@ -13019,6 +13063,10 @@ msgid "eGFR:"
 msgstr ""
 
 #, python-format
+msgid "%s%s%s (%s ago)"
+msgstr ""
+
+#, python-format
 msgid "eGFR: %.1f (%s)"
 msgstr ""
 
@@ -16404,6 +16452,12 @@ msgstr ""
 msgid "Expand keyword / macro"
 msgstr ""
 
+msgid "Insert &Unicode"
+msgstr ""
+
+msgid "Insert a unicode character"
+msgstr ""
+
 msgid "as &Subjective"
 msgstr ""
 
diff --git a/client/pycommon/gmDateTime.py b/client/pycommon/gmDateTime.py
index 37aed7c..191c3c4 100644
--- a/client/pycommon/gmDateTime.py
+++ b/client/pycommon/gmDateTime.py
@@ -343,6 +343,17 @@ def pydt_replace(dt=None, year=None, month=None, day=None, hour=None, minute=Non
 	return dt.replace(year = year, month = month, day = day, hour = hour, minute = minute, second = second, microsecond = microsecond, tzinfo = tzinfo)
 
 #---------------------------------------------------------------------------
+def pydt_is_today(dt):
+	now = pyDT.datetime.now(gmCurrentLocalTimezone)
+	if dt.day != now.day:
+		return False
+	if dt.month != now.month:
+		return False
+	if dt.year != now.year:
+		return False
+	return True
+
+#---------------------------------------------------------------------------
 def pydt_now_here():
 	"""Returns NOW @ HERE (IOW, in the local timezone."""
 	return pyDT.datetime.now(gmCurrentLocalTimezone)
@@ -429,8 +440,11 @@ def format_interval(interval=None, accuracy_wanted=None, none_string=None, verbo
 			tag = _('interval_format_tag::years::y')[-1:]
 		tmp += u'%s%s' % (int(years), tag)
 
-
 	if accuracy_wanted < acc_months:
+		if tmp == u'':
+			if verbose:
+				return _(u'0 years')
+			return u'0%s' % _('interval_format_tag::years::y')[-1:]
 		return tmp.strip()
 
 	if months > 0:
@@ -444,6 +458,10 @@ def format_interval(interval=None, accuracy_wanted=None, none_string=None, verbo
 		tmp += u' %s%s' % (int(months), tag)
 
 	if accuracy_wanted < acc_weeks:
+		if tmp == u'':
+			if verbose:
+				return _(u'0 months')
+			return u'0%s' % _('interval_format_tag::months::m')[-1:]
 		return tmp.strip()
 
 	if weeks > 0:
@@ -457,6 +475,10 @@ def format_interval(interval=None, accuracy_wanted=None, none_string=None, verbo
 		tmp += u' %s%s' % (int(weeks), tag)
 
 	if accuracy_wanted < acc_days:
+		if tmp == u'':
+			if verbose:
+				return _(u'0 weeks')
+			return u'0%s' % _('interval_format_tag::weeks::w')[-1:]
 		return tmp.strip()
 
 	if days > 0:
@@ -470,6 +492,10 @@ def format_interval(interval=None, accuracy_wanted=None, none_string=None, verbo
 		tmp += u' %s%s' % (int(days), tag)
 
 	if accuracy_wanted < acc_hours:
+		if tmp == u'':
+			if verbose:
+				return _(u'0 days')
+			return u'0%s' % _('interval_format_tag::days::d')[-1:]
 		return tmp.strip()
 
 	if hours > 0:
@@ -483,6 +509,10 @@ def format_interval(interval=None, accuracy_wanted=None, none_string=None, verbo
 		tmp += u' %s%s' % (int(hours), tag)
 
 	if accuracy_wanted < acc_minutes:
+		if tmp == u'':
+			if verbose:
+				return _(u'0 hours')
+			return u'0/24'
 		return tmp.strip()
 
 	if mins > 0:
@@ -496,6 +526,10 @@ def format_interval(interval=None, accuracy_wanted=None, none_string=None, verbo
 		tmp += u' %s%s' % (int(mins), tag)
 
 	if accuracy_wanted < acc_seconds:
+		if tmp == u'':
+			if verbose:
+				return _(u'0 minutes')
+			return u'0/60'
 		return tmp.strip()
 
 	if secs > 0:
@@ -508,7 +542,13 @@ def format_interval(interval=None, accuracy_wanted=None, none_string=None, verbo
 			tag = u's'
 		tmp += u' %s%s' % (int(mins), tag)
 
+	if tmp == u'':
+		if verbose:
+			return _(u'0 seconds')
+		return u'0s'
+
 	return tmp.strip()
+
 #---------------------------------------------------------------------------
 def format_interval_medically(interval=None):
 	"""Formats an interval.
diff --git a/client/pycommon/gmShellAPI.py b/client/pycommon/gmShellAPI.py
index 9b442c2..a21b2d4 100644
--- a/client/pycommon/gmShellAPI.py
+++ b/client/pycommon/gmShellAPI.py
@@ -139,6 +139,7 @@ def detect_external_binary(binary=None):
 		_log.debug('not running under Windows, not testing .exe/.bat')
 
 	return (False, None)
+
 #===========================================================================
 def find_first_binary(binaries=None):
 	found = False
@@ -153,6 +154,7 @@ def find_first_binary(binaries=None):
 			break
 
 	return (found, binary)
+
 #===========================================================================
 def run_command_in_shell(command=None, blocking=False, acceptable_return_codes=None):
 	"""Runs a command in a subshell via standard-C system().
diff --git a/client/pycommon/gmTools.py b/client/pycommon/gmTools.py
index 781f5b1..79def17 100644
--- a/client/pycommon/gmTools.py
+++ b/client/pycommon/gmTools.py
@@ -77,6 +77,7 @@ u_up_arrow = u'\u2191'
 u_arrow2right = u'\u2192'						# -->
 u_down_arrow = u'\u2193'
 u_left_arrow_with_tail = u'\u21a2'				# <--<
+u_arrow2right_from_bar = u'\u21a6'				# |->
 u_arrow2right_until_vertical_bar = u'\u21e5'	# -->|
 u_sum = u'\u2211'								# sigma
 u_almost_equal_to = u'\u2248'					# approximately / nearly / roughly
@@ -112,12 +113,14 @@ u_male = u'\u2642'
 u_male_female = u'\u26a5'
 u_checkmark_thin = u'\u2713'
 u_checkmark_thick = u'\u2714'
+u_arrow2right_thick = u'\u2794'
 u_writing_hand = u'\u270d'
 u_pencil_1 = u'\u270e'
 u_pencil_2 = u'\u270f'
 u_pencil_3 = u'\u2710'
 u_latin_cross = u'\u271d'
-u_kanji_yen = u'\u5186'						# Yen kanji
+u_arrow2right_until_black_diamond = u'\u291e'	# ->*
+u_kanji_yen = u'\u5186'							# Yen kanji
 u_replacement_character = u'\ufffd'
 u_link_symbol = u'\u1f517'
 
diff --git a/client/wxpython/gmAutoHintWidgets.py b/client/wxpython/gmAutoHintWidgets.py
index 0271fb1..1bcac5c 100644
--- a/client/wxpython/gmAutoHintWidgets.py
+++ b/client/wxpython/gmAutoHintWidgets.py
@@ -74,7 +74,6 @@ def _display_clinical_reminders():
 		if hint['rationale4suppression'] == u'magic_tag::please_invalidate_suppression':
 			_log.debug('database asks for invalidation of suppression of hint [%s]', hint)
 			hint.invalidate_suppression(pk_encounter = pat.emr.current_encounter['pk_encounter'])
-			continue
 		hint_dlg.hint = hint
 		if hint_dlg.ShowModal() == wx.ID_APPLY:
 			hint.suppress (
diff --git a/client/wxpython/gmEncounterWidgets.py b/client/wxpython/gmEncounterWidgets.py
index 534b427..69d55b2 100644
--- a/client/wxpython/gmEncounterWidgets.py
+++ b/client/wxpython/gmEncounterWidgets.py
@@ -73,7 +73,7 @@ def sanity_check_encounter_of_active_patient(parent=None, msg=None):
 	if not check_enc:
 		return True
 
-	emr = pat.get_emr()
+	emr = pat.get_emr(allow_user_interaction = False)
 	enc = emr.active_encounter
 
 	# did we add anything to the EMR ?
@@ -179,7 +179,7 @@ def select_encounters(parent=None, patient=None, single_selection=True, encounte
 	if parent is None:
 		parent = wx.GetApp().GetTopWindow()
 
-	emr = patient.get_emr()
+	emr = patient.get_emr(allow_user_interaction = False)
 
 	#--------------------
 	def new():
@@ -631,7 +631,7 @@ class cActiveEncounterPnl(wxgActiveEncounterPnl.wxgActiveEncounterPnl):
 
 	#------------------------------------------------------------
 	def __refresh(self):
-		enc = gmPerson.gmCurrentPatient().get_emr().active_encounter
+		enc = gmPerson.gmCurrentPatient().get_emr(allow_user_interaction = False).active_encounter
 		self._TCTRL_encounter.SetValue(enc.format (
 			with_docs = False,
 			with_tests = False,
diff --git a/client/wxpython/gmFormWidgets.py b/client/wxpython/gmFormWidgets.py
index 4f29041..5018368 100644
--- a/client/wxpython/gmFormWidgets.py
+++ b/client/wxpython/gmFormWidgets.py
@@ -998,10 +998,7 @@ class cReceiverSelectionDlg(wxgReceiverSelectionDlg.wxgReceiverSelectionDlg):
 	def _on_address_activated_in_list(self, evt):
 		evt.Skip()
 		adr = self._LCTRL_addresses.get_selected_item_data(only_one = True)
-		if adr is None:
-			self._PRW_other_address.SetText(value = u'', data = None)
-		else:
-			self._PRW_other_address.SetData(data = adr[u'pk_address'])
+		self._PRW_other_address.address = adr
 		self.__update_address_info(adr)
 
 	#------------------------------------------------------------
diff --git a/client/wxpython/gmMacro.py b/client/wxpython/gmMacro.py
index 081f3ba..bed61f4 100644
--- a/client/wxpython/gmMacro.py
+++ b/client/wxpython/gmMacro.py
@@ -97,9 +97,13 @@ __known_variant_placeholders = {
 		target extension: target file name extension, derived from target mime type if not given
 	""",
 
+	# text manipulation
 	u'range_of': u"""select range of enclosed text (note that this cannot take into account non-length characters such as enclosed LaTeX code
 		args: <enclosed text>
 	""",
+	u'if_not_empty': u"""format text based on template if not empty
+		args: <possibly-empty-text>//<template-if-not-empty>//<alternative-text-if-empty>
+	""",
 
 	u'ph_cfg': u"""Set placeholder handler options.
 		args: option name//option value//macro return string
@@ -831,7 +835,7 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 		template = _('due %(due_date)s: %(comment)s (%(interval_due)s)')
 		date_format = '%Y %b %d'
 
-		data_parts = data.split('//')
+		data_parts = data.split(self.__args_divider)
 
 		if len(data_parts) > 0:
 			if data_parts[0].strip() != u'':
@@ -877,7 +881,7 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 		path_template = None
 		export_path = None
 
-		data_parts = data.split('//')
+		data_parts = data.split(self.__args_divider)
 
 		if u'select' in data_parts:
 			select = True
@@ -952,7 +956,7 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 		date_format = None
 
 		if data is not None:
-			data_parts = data.split('//')
+			data_parts = data.split(self.__args_divider)
 
 			# part[0]: categories
 			if len(data_parts[0]) > 0:
@@ -991,7 +995,7 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 		time_range = None
 
 		if data is not None:
-			data_parts = data.split('//')
+			data_parts = data.split(self.__args_divider)
 
 			# part[0]: categories
 			cats = []
@@ -1062,7 +1066,7 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 		template = u'%s'
 
 		if data is not None:
-			data_parts = data.split('//')
+			data_parts = data.split(self.__args_divider)
 
 			# part[0]: categories
 			if len(data_parts[0]) > 0:
@@ -1128,7 +1132,7 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 		template = u'%(narrative)s'
 
 		if data is not None:
-			data_parts = data.split('//')
+			data_parts = data.split(self.__args_divider)
 
 			# part[0]: categories
 			cats = []
@@ -1843,31 +1847,11 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 
 		# setup dummy files
 		for idx in [1,2,3]:
-			self.set_placeholder (
-				key = u'amts_data_file_%s' % idx,
-				value = './missing-file.txt',
-				known_only = False
-			)
-			self.set_placeholder (
-				key = u'amts_png_file_%s' % idx,
-				value = './missing-file.png',
-				known_only = False
-			)
-		self.set_placeholder (
-			key = u'amts_png_file_current_page',
-			value = './missing-file-current-page.png',
-			known_only = False
-		)
-		self.set_placeholder (
-			key = u'amts_png_file_utf8',
-			value = './missing-file-utf8.png',
-			known_only = False
-		)
-		self.set_placeholder (
-			key = u'amts_data_file_utf8',
-			value = './missing-file-utf8.txt',
-			known_only = False
-		)
+			self.set_placeholder(key = u'amts_data_file_%s' % idx, value = './missing-file.txt', known_only = False)
+			self.set_placeholder(key = u'amts_png_file_%s' % idx, value = './missing-file.png', known_only = False)
+		self.set_placeholder(key = u'amts_png_file_current_page', value = './missing-file-current-page.png', known_only = False)
+		self.set_placeholder(key = u'amts_png_file_utf8', value = './missing-file-utf8.png', known_only = False)
+		self.set_placeholder(key = u'amts_data_file_utf8', value = './missing-file-utf8.txt', known_only = False)
 
 		# find processor
 		found, dmtx_creator = gmShellAPI.detect_external_binary(binary = u'gm-create_datamatrix')
@@ -1886,26 +1870,22 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 		amts_data_template_def_file = gmMedication.generate_amts_data_template_definition_file(strict = False)
 		_log.debug('amts data template definition file: %s', amts_data_template_def_file)
 		form = gmForms.cTextForm(template_file = amts_data_template_def_file)
-		intakes_as_amts_data = []
-		for intake in intakes:
-			intakes_as_amts_data.append(intake._get_as_amts_data(strict = False))
+		# <S>ection with intakes</S>
+		amts_sections = u'<S>%s</S>' % u''.join ([
+			i._get_as_amts_data(strict = False) for i in intakes
+		])
+		# <S>ection with allergy data</S>
 		emr = self.pat.get_emr()
-		intakes_as_amts_data.extend(emr.allergy_state._get_as_amts_data(strict = False))
-		for allg in emr.get_allergies():
-			intakes_as_amts_data.append(allg._get_as_amts_data(strict = False))
-		self.set_placeholder (
-			key = u'amts_intakes_as_data_enhanced',
-			value = u'|'.join(intakes_as_amts_data),
-			known_only = False
-		)
-		self.set_placeholder (
-			key = u'amts_check_symbol',
-			value = gmMedication.calculate_amts_data_check_symbol(intakes = intakes),
-			known_only = False
-		)
+		amts_sections += emr.allergy_state._get_as_amts_data(strict = False) % u''.join ([
+			a._get_as_amts_data(strict = False) for a in emr.get_allergies()
+		])
+		self.set_placeholder(key = u'amts_intakes_as_data_enhanced', value = amts_sections, known_only = False)
+#		self.set_placeholder(key = u'amts_check_symbol', value = gmMedication.calculate_amts_data_check_symbol(intakes = intakes), known_only = False)
+		self.set_placeholder(key = u'amts_total_pages', value = u'1', known_only = False)
 		success = form.substitute_placeholders(data_source = self)
 		self.unset_placeholder(key = u'amts_intakes_as_data_enhanced')
-		self.unset_placeholder(key = u'amts_check_symbol')
+#		self.unset_placeholder(key = u'amts_check_symbol')
+		self.unset_placeholder(key = u'amts_total_pages')
 		if not success:
 			_log.error(u'cannot substitute into amts data file form template')
 			return
@@ -1916,16 +1896,8 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 		if not success:
 			_log.error(u'error running [%s]' % cmd)
 			return
-		self.set_placeholder (
-			key = u'amts_data_file_utf8',
-			value = data_file,
-			known_only = False
-		)
-		self.set_placeholder (
-			key = u'amts_png_file_utf8',
-			value = png_file,
-			known_only = False
-		)
+		self.set_placeholder(key = u'amts_data_file_utf8', value = data_file, known_only = False)
+		self.set_placeholder(key = u'amts_png_file_utf8', value = png_file, known_only = False)
 
 		# generate conformant per-page files:
 		total_pages = (len(intakes) / 15.0)
@@ -1940,36 +1912,27 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 			amts_data_template_def_file = gmMedication.generate_amts_data_template_definition_file(strict = True)
 			_log.debug('amts data template definition file: %s', amts_data_template_def_file)
 			form = gmForms.cTextForm(template_file = amts_data_template_def_file)
-			intakes_as_amts_data = []
-			for intake in intakes_this_page:
-				intakes_as_amts_data.append(intake.as_amts_data)
+			# <S>ection with intakes</S>
+			amts_sections = u'<S>%s</S>' % u''.join ([
+				i._get_as_amts_data(strict = False) for i in intakes_this_page
+			])
 			if this_page == total_pages:
-				intakes_as_amts_data.extend(emr.allergy_state._get_as_amts_data(strict = True))
-				for allg in emr.get_allergies():
-					intakes_as_amts_data.append(allg._get_as_amts_data(strict = True))
-			self.set_placeholder (
-				key = u'amts_intakes_as_data',
-				value = u'|'.join(intakes_as_amts_data),
-				known_only = False
-			)
-			self.set_placeholder (
-				key = u'amts_check_symbol',
-				value = gmMedication.calculate_amts_data_check_symbol(intakes = intakes_this_page),
-				known_only = False
-			)
-			self.set_placeholder (
-				key = u'amts_page_idx',
-				value = u'%s' % this_page,
-				known_only = False
-			)
-			self.set_placeholder (
-				key = u'amts_total_pages',
-				value = u'%s' % total_pages,
-				known_only = False
-			)
+				# <S>ection with allergy data</S>
+				emr = self.pat.get_emr()
+				amts_sections += emr.allergy_state._get_as_amts_data(strict = False) % u''.join ([
+					a._get_as_amts_data(strict = False) for a in emr.get_allergies()
+				])
+			self.set_placeholder(key = u'amts_intakes_as_data', value = amts_sections, known_only = False)
+#			self.set_placeholder(key = u'amts_check_symbol', value = gmMedication.calculate_amts_data_check_symbol(intakes = intakes_this_page), known_only = False)
+			if total_pages == 1:
+				pg_idx = u''
+			else:
+				pg_idx = u'%s' % this_page
+			self.set_placeholder(key = u'amts_page_idx', value = pg_idx, known_only = False)
+			self.set_placeholder(key = u'amts_total_pages', value = u'%s' % total_pages, known_only = False)
 			success = form.substitute_placeholders(data_source = self)
 			self.unset_placeholder(key = u'amts_intakes_as_data')
-			self.unset_placeholder(key = u'amts_check_symbol')
+#			self.unset_placeholder(key = u'amts_check_symbol')
 			self.unset_placeholder(key = u'amts_page_idx')
 			self.unset_placeholder(key = u'amts_total_pages')
 			if not success:
@@ -1991,24 +1954,11 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 				return
 
 			# cache file names for later use in \embedfile
-			self.set_placeholder (
-				key = u'amts_data_file_%s' % this_page,
-				value = latin1_data_file,
-				known_only = False
-			)
-			self.set_placeholder (
-				key = u'amts_png_file_%s' % this_page,
-				value = png_file,
-				known_only = False
-			)
+			self.set_placeholder(key = u'amts_data_file_%s' % this_page, value = latin1_data_file, known_only = False)
+			self.set_placeholder(key = u'amts_png_file_%s' % this_page, value = png_file, known_only = False)
 
-		self.set_placeholder (
-			key = u'amts_png_file_current_page',
-			value = png_file_base + u'\\thepage',
-			known_only = False
-		)
+		self.set_placeholder(key = u'amts_png_file_current_page', value = png_file_base + u'\\thepage', known_only = False)
 
-		return
 	#--------------------------------------------------------
 	def _get_variant_current_meds_for_rx(self, data=None):
 		if data is None:
@@ -2154,7 +2104,7 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 		)
 	#--------------------------------------------------------
 	def _get_variant_vaccination_history(self, data=None):
-		options = data.split('//')
+		options = data.split(self.__args_divider)
 		template = options[0]
 		if len(options) > 1:
 			date_format = options[1]
@@ -2295,6 +2245,7 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 			return template % filename
 
 		return template % target_fname
+
 	#--------------------------------------------------------
 	def _get_variant_range_of(self, data=None):
 		if data is None:
@@ -2303,6 +2254,23 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 		# selecting the range so all we need to do here
 		# is to return the data itself
 		return data
+
+	#--------------------------------------------------------
+	def _get_variant_if_not_empty(self, data=None):
+		if data is None:
+			return None
+
+		parts = data.split(self.__args_divider)
+		txt = parts[0]
+		template = parts[1]
+		instead = parts[2]
+
+		if txt.strip() == u'':
+			return instead
+		if u'%s' in template:
+			return template % txt
+		return template
+
 	#--------------------------------------------------------
 	def _get_variant_free_text(self, data=None):
 
@@ -2339,6 +2307,7 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 			self.__cache[cache_key] = text
 
 		return text
+
 	#--------------------------------------------------------
 	def _get_variant_bill(self, data=None):
 		try:
@@ -2352,7 +2321,7 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 				return u''
 			self.__cache['bill'] = bill
 
-		parts = data.split('//')
+		parts = data.split(self.__args_divider)
 		template = parts[0]
 		if len(parts) > 1:
 			date_format = parts[1]
@@ -2373,7 +2342,7 @@ class gmPlaceholderHandler(gmBorg.cBorg):
 				return u''
 			self.__cache['bill'] = bill
 
-		parts = data.split('//')
+		parts = data.split(self.__args_divider)
 		template = parts[0]
 		if len(parts) > 1:
 			date_format = parts[1]
diff --git a/client/wxpython/gmMeasurementWidgets.py b/client/wxpython/gmMeasurementWidgets.py
index 41bcac7..2edbf03 100644
--- a/client/wxpython/gmMeasurementWidgets.py
+++ b/client/wxpython/gmMeasurementWidgets.py
@@ -666,6 +666,7 @@ class cMeasurementsAsListPnl(wxgMeasurementsAsListPnl.wxgMeasurementsAsListPnl,
 	#------------------------------------------------------------
 	def __init_ui(self):
 		self._LCTRL_results.set_columns([_('When'), _('Test'), _('Result'), _('Reference')])
+		self._LCTRL_results.edit_callback = self._on_edit
 
 	#------------------------------------------------------------
 	def __register_events(self):
@@ -714,6 +715,14 @@ class cMeasurementsAsListPnl(wxgMeasurementsAsListPnl.wxgMeasurementsAsListPnl,
 		self._LCTRL_results.SetFocus()
 
 	#------------------------------------------------------------
+	def _on_edit(self):
+		item_data = self._LCTRL_results.get_selected_item_data(only_one = True)
+		if item_data is None:
+			return
+		if edit_measurement(parent = self, measurement = item_data['data'], single_entry = True):
+			self.__repopulate_ui()
+
+	#------------------------------------------------------------
 	# event handlers
 	#------------------------------------------------------------
 	def _on_database_signal(self, **kwds):
@@ -788,6 +797,7 @@ class cMeasurementsByDayPnl(wxgMeasurementsByDayPnl.wxgMeasurementsByDayPnl, gmR
 	def __init_ui(self):
 		self._LCTRL_days.set_columns([_('Day')])
 		self._LCTRL_results.set_columns([_('Time'), _('Test'), _('Result'), _('Reference')])
+		self._LCTRL_results.edit_callback = self._on_edit
 
 	#------------------------------------------------------------
 	def __register_events(self):
@@ -797,6 +807,7 @@ class cMeasurementsByDayPnl(wxgMeasurementsByDayPnl.wxgMeasurementsByDayPnl, gmR
 	def __repopulate_ui(self):
 		if self.__patient is None:
 			self._LCTRL_days.set_string_items()
+			self._LCTRL_results.set_string_items()
 			self._TCTRL_measurements.SetValue(u'')
 			return
 
@@ -810,6 +821,14 @@ class cMeasurementsByDayPnl(wxgMeasurementsByDayPnl.wxgMeasurementsByDayPnl, gmR
 			self._LCTRL_days.SetFocus()
 
 	#------------------------------------------------------------
+	def _on_edit(self):
+		item_data = self._LCTRL_results.get_selected_item_data(only_one = True)
+		if item_data is None:
+			return
+		if edit_measurement(parent = self, measurement = item_data['data'], single_entry = True):
+			self.__repopulate_ui()
+
+	#------------------------------------------------------------
 	# event handlers
 	#------------------------------------------------------------
 	def _on_database_signal(self, **kwds):
diff --git a/client/wxpython/gmPatOverviewWidgets.py b/client/wxpython/gmPatOverviewWidgets.py
index 1fd2695..bb54968 100644
--- a/client/wxpython/gmPatOverviewWidgets.py
+++ b/client/wxpython/gmPatOverviewWidgets.py
@@ -168,20 +168,22 @@ class cPatientOverviewPnl(wxgPatientOverviewPnl.wxgPatientOverviewPnl, gmRegetMi
 				return True
 
 		if kwds['table'] in [
-			u'dem.identity',
-			u'dem.names',
-			u'dem.lnk_identity2comm',
-			u'dem.lnk_job2person',
+			u'blobs.doc_med',
+			u'clin.episode',
+			u'clin.health_issue',
+			u'clin.suppressed_hint',
 			u'clin.substance_intake',
 			u'clin.hospital_stay',
 			u'clin.procedure',
 			u'clin.vaccination',
 			u'clin.family_history',
 			u'clin.test_result',
-			u'blobs.doc_med',
+			u'dem.identity',
+			u'dem.names',
+			u'dem.lnk_identity2comm',
+			u'dem.lnk_job2person',
 			u'dem.message_inbox',
-			u'clin.episode',
-			u'clin.health_issue'
+			u'ref.auto_hint'		# no signal triggers in v21 just yet, however ...
 		]:
 			self._schedule_data_reget()
 			return True
@@ -265,9 +267,11 @@ class cPatientOverviewPnl(wxgPatientOverviewPnl.wxgPatientOverviewPnl, gmRegetMi
 		if no_of_reds > 0:
 			for idx in range(1, no_of_reds + 1):
 				self._LCTRL_results.SetItemTextColour(idx, wx.NamedColour('RED'))
+
 	#-----------------------------------------------------
 	def _calc_results_list_item_tooltip(self, data):
 		return data.format()
+
 	#-----------------------------------------------------
 	def _on_result_activated(self, event):
 #		data = self._LCTRL_inbox.get_selected_item_data(only_one = True)
@@ -279,6 +283,7 @@ class cPatientOverviewPnl(wxgPatientOverviewPnl.wxgPatientOverviewPnl, gmRegetMi
 #					xxxxxxxxx
 		gmDispatcher.send(signal = 'display_widget', name = 'gmMeasurementsGridPlugin')
 		return
+
 	#-----------------------------------------------------
 	#-----------------------------------------------------
 	def __refresh_inbox(self, patient=None):
@@ -593,6 +598,7 @@ class cPatientOverviewPnl(wxgPatientOverviewPnl.wxgPatientOverviewPnl, gmRegetMi
 				return
 
 		wx.CallAfter(gmEncounterWidgets.manage_encounters, parent = self, ignore_OK_button = False)
+
 	#-----------------------------------------------------
 	#-----------------------------------------------------
 	def __refresh_history(self, patient=None):
@@ -600,6 +606,7 @@ class cPatientOverviewPnl(wxgPatientOverviewPnl.wxgPatientOverviewPnl, gmRegetMi
 
 		sort_key_list = []
 		date_format4sorting = '%Y %m %d %H %M %S'
+		now = gmDateTime.pydt_now_here()
 		data = {}
 
 		# undated entries
@@ -624,13 +631,9 @@ class cPatientOverviewPnl(wxgPatientOverviewPnl.wxgPatientOverviewPnl, gmRegetMi
 		fhxs = emr.get_family_history()
 		for fhx in fhxs:
 			sort_key = u'99998 %s::%s' % (fhx['l10n_relation'], fhx['pk_family_history'])
-			#gmDateTime.pydt_strftime(fhx['when_known_to_patient'], format = '%Y %m %d %H %M %S')
-			label = u'%s: %s%s' % (
-				fhx['l10n_relation'],
-				fhx['condition'],
-				gmTools.coalesce(fhx['age_noted'], u'', u' (@ %s)')
-			)
 			sort_key_list.append(sort_key)
+			#gmDateTime.pydt_strftime(fhx['when_known_to_patient'], format = '%Y %m %d %H %M %S')
+			label = u'%s%s: %s' % (fhx['l10n_relation'], gmTools.coalesce(fhx['age_noted'], u'', u' (@ %s)'), fhx['condition'])
 			data[sort_key] = [label, fhx]
 		del fhxs
 
@@ -648,16 +651,22 @@ class cPatientOverviewPnl(wxgPatientOverviewPnl.wxgPatientOverviewPnl, gmRegetMi
 				last = gmDateTime.pydt_strftime(last_encounter['last_affirmed'], format = '%Y %b')
 				sort_key = u'%s::%s' % (gmDateTime.pydt_strftime(last_encounter['last_affirmed'], format = date_format4sorting), issue['pk_health_issue'])
 			sort_key_list.append(sort_key)
-			data[sort_key] = [u'%s %s' % (last, issue['description']), issue]
+			if issue['age_noted'] is None:
+				encounter = gmEMRStructItems.cEncounter(issue['pk_encounter'])
+				age = _(u' (entered %s ago)') % gmDateTime.format_interval_medically(now - encounter['started'])
+			else:
+				age = u' (@ %s)' % gmDateTime.format_interval_medically(issue['age_noted'])
+			data[sort_key] = [u'%s %s%s' % (last, issue['description'], age), issue]
 		del issues
 
 		stays = emr.get_hospital_stays()
 		for stay in stays:
 			sort_key = u'%s::%s' % (gmDateTime.pydt_strftime(stay['admission'], format = date_format4sorting), stay['pk_hospital_stay'])
-			label = u'%s %s: %s' % (
+			label = u'%s %s: %s (%s)' % (
 				gmDateTime.pydt_strftime(stay['admission'], format = '%Y %b'),
 				stay['hospital'],
-				stay['episode']
+				stay['episode'],
+				_(u'%s ago') % gmDateTime.format_interval_medically(now - stay['admission'])
 			)
 			sort_key_list.append(sort_key)
 			data[sort_key] = [label, stay]
@@ -666,10 +675,12 @@ class cPatientOverviewPnl(wxgPatientOverviewPnl.wxgPatientOverviewPnl, gmRegetMi
 		procs = emr.get_performed_procedures()
 		for proc in procs:
 			sort_key = u'%s::%s' % (gmDateTime.pydt_strftime(proc['clin_when'], format = date_format4sorting), proc['pk_procedure'])
-			label = u'%s%s %s' % (
+			label = u'%s%s %s (%s @ %s)' % (
 				gmDateTime.pydt_strftime(proc['clin_when'], format = '%Y %b'),
 				gmTools.bool2subst(proc['is_ongoing'], gmTools.u_ellipsis, u'', u''),
-				proc['performed_procedure']
+				proc['performed_procedure'],
+				_(u'%s ago') % gmDateTime.format_interval_medically(now - proc['clin_when']),
+				gmDateTime.format_interval_medically(proc['clin_when'] - patient['dob'])
 			)
 			sort_key_list.append(sort_key)
 			data[sort_key] = [label, proc]
@@ -679,10 +690,11 @@ class cPatientOverviewPnl(wxgPatientOverviewPnl.wxgPatientOverviewPnl, gmRegetMi
 		for ind, tmp in vaccs.items():
 			no_of_shots, vacc = tmp
 			sort_key = u'%s::%s::%s' % (gmDateTime.pydt_strftime(vacc['date_given'], format = date_format4sorting), vacc['pk_vaccination'], ind)
-			label = _('%s Vacc: %s (latest of %s)') % (
+			label = _('%s Vacc: %s (latest of %s: %s ago)') % (
 				gmDateTime.pydt_strftime(vacc['date_given'], format = '%Y %b'),
 				ind,
-				no_of_shots
+				no_of_shots,
+				gmDateTime.format_interval_medically(now - vacc['date_given'])
 			)
 			sort_key_list.append(sort_key)
 			data[sort_key] = [label, vacc]
@@ -705,6 +717,7 @@ class cPatientOverviewPnl(wxgPatientOverviewPnl.wxgPatientOverviewPnl, gmRegetMi
 
 		self._LCTRL_history.set_string_items(items = list_items)
 		self._LCTRL_history.set_data(data = list_data)
+
 	#-----------------------------------------------------
 	def _calc_history_list_item_tooltip(self, data):
 
diff --git a/client/wxpython/gmSoapSTCWidgets.py b/client/wxpython/gmSoapSTCWidgets.py
index ae74953..bb1c278 100644
--- a/client/wxpython/gmSoapSTCWidgets.py
+++ b/client/wxpython/gmSoapSTCWidgets.py
@@ -18,6 +18,7 @@ if __name__ == '__main__':
 	sys.path.insert(0, '../../')
 from Gnumed.business import gmSoapDefs
 from Gnumed.wxpython import gmKeywordExpansionWidgets
+from Gnumed.wxpython.gmTextCtrl import cUnicodeInsertion_TextCtrlMixin
 
 
 _log = logging.getLogger('gm.stc')
@@ -42,6 +43,10 @@ class cWxTextCtrlCompatibility_StcMixin():
 		return self.SetText(value)
 
 	#--------------------------------------------------
+	def WriteText(self, value):
+		return self.InsertText(self.CurrentPos, value)
+
+	#--------------------------------------------------
 	def GetLastPosition(self):
 		return self.Length
 
@@ -91,7 +96,7 @@ class cWxTextCtrlCompatibility_StcMixin():
 		wx.CallAfter(self.SetSelection, 0, 0)
 
 #----------------------------------------------------------------------
-class cSoapSTC(cWxTextCtrlCompatibility_StcMixin, gmKeywordExpansionWidgets.cKeywordExpansion_TextCtrlMixin, wx.stc.StyledTextCtrl):
+class cSoapSTC(cUnicodeInsertion_TextCtrlMixin, gmKeywordExpansionWidgets.cKeywordExpansion_TextCtrlMixin, cWxTextCtrlCompatibility_StcMixin, wx.stc.StyledTextCtrl):
 
 	_MARKER_ADM = 0
 	_MARKER_S = 1
@@ -176,6 +181,7 @@ class cSoapSTC(cWxTextCtrlCompatibility_StcMixin, gmKeywordExpansionWidgets.cKey
 		wx.stc.StyledTextCtrl.__init__(self, *args, **kwargs)
 		cWxTextCtrlCompatibility_StcMixin.__init__(self)
 		gmKeywordExpansionWidgets.cKeywordExpansion_TextCtrlMixin.__init__(self)
+		cUnicodeInsertion_TextCtrlMixin.__init__(self)
 
 		# wrapping and overflow
 		self.SetWrapMode(wx.stc.STC_WRAP_NONE)
@@ -197,7 +203,8 @@ class cSoapSTC(cWxTextCtrlCompatibility_StcMixin, gmKeywordExpansionWidgets.cKey
 		#self.SetWhitespaceForeground(1, a_color)					# 1 = override lexer
 
 		# caret handling
-		self.SetCaretLineBack('light goldenrod yellow')
+		#self.SetCaretLineBack('light goldenrod yellow')
+		self.SetCaretLineBack('khaki')
 		self.SetCaretLineVisible(1)
 
 		# margins
@@ -413,6 +420,10 @@ class cSoapSTC(cWxTextCtrlCompatibility_StcMixin, gmKeywordExpansionWidgets.cKey
 		item = self.__popup_menu.Append(-1, _('e&Xpand keyword'), _('Expand keyword / macro'))
 		self.Bind(wx.EVT_MENU, self.__on_expand_keyword, item)
 
+		# insert unicode
+		item = self.__popup_menu.Append(-1, _('Insert &Unicode'), _('Insert a unicode character'))
+		self.Bind(wx.EVT_MENU, self.__on_insert_unicode, item)
+
 		self.__popup_menu.AppendSeparator()
 
 		# undo
@@ -498,6 +509,10 @@ class cSoapSTC(cWxTextCtrlCompatibility_StcMixin, gmKeywordExpansionWidgets.cKey
 		self.attempt_expansion(show_list_if_needed = True)
 
 	#-------------------------------------------------------
+	def __on_insert_unicode(self, evt):
+		self.mixin_insert_unicode_character()
+
+	#-------------------------------------------------------
 	def __on_content2clipboard(self, evt):
 		txt = self.GetText().strip()
 		if txt == u'':
@@ -1193,8 +1208,8 @@ if __name__ == '__main__':
 	def test_stc():
 		app = wx.PyWidgetTester(size = (600, 600))
 		wx.lib.colourdb.updateColourDB()
-		print wx.lib.colourdb.getColourList()
-		app.SetWidget(cSoapSTC, -1)
+		#print wx.lib.colourdb.getColourList()
+		app.SetWidget(cSoapSTC, -1, (100,50))
 		app.MainLoop()
 		return True
 
diff --git a/client/wxpython/gmTextCtrl.py b/client/wxpython/gmTextCtrl.py
index 99361ab..de9c2e2 100644
--- a/client/wxpython/gmTextCtrl.py
+++ b/client/wxpython/gmTextCtrl.py
@@ -14,6 +14,7 @@ import wx.lib.expando
 if __name__ == '__main__':
 	sys.path.insert(0, '../../')
 
+from Gnumed.pycommon import gmShellAPI
 from Gnumed.wxpython import gmKeywordExpansionWidgets
 
 
@@ -97,6 +98,57 @@ class cColoredStatus_TextCtrlMixin():
 		self.Refresh()
 
 #============================================================
+class cUnicodeInsertion_TextCtrlMixin():
+	"""Mixin for inserting unicode characters via selection tool."""
+	def __init__(self, *args, **kwargs):
+		if not isinstance(self, (wx.TextCtrl, wx.stc.StyledTextCtrl)):
+			raise TypeError('[%s]: can only be applied to wx.TextCtrl or wx.stc.StyledTextCtrl, not [%s]' % (cUnicodeInsertion_TextCtrlMixin, self.__class__.__name__))
+
+		found, self.__unicode_selector = gmShellAPI.find_first_binary(binaries = ['kcharselect', 'gucharmap', 'charmap.exe', 'gm-unicode2clipboard'])
+		if not found:
+			_log.error('no unicode character selection tool found')
+			return
+
+	#--------------------------------------------------------
+	def mixin_insert_unicode_character(self):
+		if self.__unicode_selector is None:
+			return False
+
+		# read clipboard
+		if wx.TheClipboard.IsOpened():
+			_log.error('clipboard already open')
+			return False
+		if not wx.TheClipboard.Open():
+			_log.error('cannot open clipboard')
+			return False
+		data_obj = wx.TextDataObject()
+		prev_clip = None
+		got_it = wx.TheClipboard.GetData(data_obj)
+		if got_it:
+			prev_clip = data_obj.Text
+
+		# run selector
+		if not gmShellAPI.run_command_in_shell(command = self.__unicode_selector, blocking = True):
+			wx.TheClipboard.Close()
+			return False
+
+		# read clipboard again
+		got_it = wx.TheClipboard.GetData(data_obj)
+		wx.TheClipboard.Close()
+		if not got_it:
+			_log.debug('clipboard does not contain text')
+			return False
+		curr_clip = data_obj.Text
+
+		# insert clip if so
+		if curr_clip == prev_clip:
+			# nothing put into clipboard (that is, clipboard still the same)
+			return False
+
+		self.WriteText(curr_clip)
+		return True
+
+#============================================================
 class cTextSearch_TextCtrlMixin():
 	"""Code using classes with this mixin must call
 	   show_find_dialog() at appropriate times. Everything
@@ -198,7 +250,7 @@ class cTextSearch_TextCtrlMixin():
 		self.__mixin_find_replace_last_match_end = 0
 
 #============================================================
-class cTextCtrl(gmKeywordExpansionWidgets.cKeywordExpansion_TextCtrlMixin, cTextSearch_TextCtrlMixin, cColoredStatus_TextCtrlMixin, wx.TextCtrl):
+class cTextCtrl(gmKeywordExpansionWidgets.cKeywordExpansion_TextCtrlMixin, cTextSearch_TextCtrlMixin, cColoredStatus_TextCtrlMixin, cUnicodeInsertion_TextCtrlMixin, wx.TextCtrl):
 
 	def __init__(self, *args, **kwargs):
 
@@ -210,8 +262,10 @@ class cTextCtrl(gmKeywordExpansionWidgets.cKeywordExpansion_TextCtrlMixin, cText
 		gmKeywordExpansionWidgets.cKeywordExpansion_TextCtrlMixin.__init__(self)
 		cTextSearch_TextCtrlMixin.__init__(self)
 		cColoredStatus_TextCtrlMixin.__init__(self)
+		cUnicodeInsertion_TextCtrlMixin.__init__(self)
 
 		self.enable_keyword_expansions()
+
 	#--------------------------------------------------------
 	# callback API
 	#--------------------------------------------------------
@@ -438,7 +492,7 @@ if __name__ == '__main__':
 		app = wx.PyWidgetTester(size = (200, 50))
 		tc = cTextCtrl(parent = app.frame, id = -1)
 		#tc.enable_keyword_expansions()
-		tc.Enable(False)
+		#tc.Enable(False)
 		app.frame.Show(True)
 		app.MainLoop()
 		return True

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/gnumed-client.git



More information about the debian-med-commit mailing list