← Back to team overview

dhis2-devs team mailing list archive

[Merge] lp:dhis2 into lp:~tw-msf/dhis2/dhis2

 

Mahendra Kariya has proposed merging lp:dhis2 into lp:~tw-msf/dhis2/dhis2.

Requested reviews:
  Lars Helge Øverland (larshelge)
Related bugs:
  Bug #338615 in DHIS: "DXF Import tries importing when no file is selected"
  https://bugs.launchpad.net/dhis2/+bug/338615
  Bug #339272 in DHIS: "i18n resource editor not working with Indic scripts"
  https://bugs.launchpad.net/dhis2/+bug/339272
  Bug #339807 in DHIS: "Menu crashes with WebKit"
  https://bugs.launchpad.net/dhis2/+bug/339807
  Bug #340918 in DHIS: "The english help page contains errors"
  https://bugs.launchpad.net/dhis2/+bug/340918
  Bug #341630 in DHIS: "The login screen does not focus on field when page loads"
  https://bugs.launchpad.net/dhis2/+bug/341630
  Bug #344152 in DHIS: "ANM Indian mobile application - exiting midway"
  https://bugs.launchpad.net/dhis2/+bug/344152
  Bug #363292 in DHIS: "SMS Listener Does Not Remember COM Port"
  https://bugs.launchpad.net/dhis2/+bug/363292
  Bug #363645 in DHIS: "Data Element Group Editor does not show any group members"
  https://bugs.launchpad.net/dhis2/+bug/363645
  Bug #418065 in DHIS: "IE7 selection lists not working"
  https://bugs.launchpad.net/dhis2/+bug/418065
  Bug #421110 in DHIS: "SMSListener throws ArithmeticException while Decompression"
  https://bugs.launchpad.net/dhis2/+bug/421110
  Bug #421111 in DHIS: "SMS Listener does not show version or branding"
  https://bugs.launchpad.net/dhis2/+bug/421111
  Bug #423727 in DHIS: "Data Browser: Browse by orgunit does not show orgunit tree and fails"
  https://bugs.launchpad.net/dhis2/+bug/423727
  Bug #426160 in DHIS: "Prune periods fails on a foreign key constraint"
  https://bugs.launchpad.net/dhis2/+bug/426160
  Bug #496938 in DHIS: "Sorting should be ignore case for all lists"
  https://bugs.launchpad.net/dhis2/+bug/496938
  Bug #525787 in DHIS: "Division by zero error when loading data entry form"
  https://bugs.launchpad.net/dhis2/+bug/525787
  Bug #537522 in DHIS: "Build fails if bzr is not found on PATH or not installed"
  https://bugs.launchpad.net/dhis2/+bug/537522
  Bug #537672 in DHIS: "Filtering elements in list doesn't work in other browsers, only FF"
  https://bugs.launchpad.net/dhis2/+bug/537672
  Bug #540908 in DHIS: "Data Element Groups: both available and selected DE lists are empty in the edit data element group window"
  https://bugs.launchpad.net/dhis2/+bug/540908
  Bug #664390 in dhis-mobile: "Data elements in program stage are not arranged in order"
  https://bugs.launchpad.net/dhis-mobile/+bug/664390
  Bug #675872 in dhis-mobile: "Activity plan lacks sorting "
  https://bugs.launchpad.net/dhis-mobile/+bug/675872
  Bug #987316 in DHIS: "ouwt: should always reload from server when organisationUnit.size == 0"
  https://bugs.launchpad.net/dhis2/+bug/987316
  Bug #994079 in DHIS: "Wrong column names in Data Browser"
  https://bugs.launchpad.net/dhis2/+bug/994079

For more details, see:
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+merge/219164

- Changed Translation to have uid of the translated object rather than the database id.
- Added an API for Translations. (Get all / Post )
- Making pwd validation optional for update user api
- Adding get user preference web api
-- 
The attached diff has been truncated due to its size.
https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+merge/219164
Your team DHIS 2 developers is subscribed to branch lp:dhis2.
=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/AbstractCalendar.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/AbstractCalendar.java	2014-04-29 07:28:26 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/AbstractCalendar.java	2014-05-12 09:56:39 +0000
@@ -144,6 +144,24 @@
     }
 
     @Override
+    public DateInterval toInterval( DateIntervalType type )
+    {
+        return toInterval( today(), type );
+    }
+
+    @Override
+    public DateInterval toInterval( DateUnit dateUnit, DateIntervalType type )
+    {
+        return toInterval( dateUnit, type, 0, 1 );
+    }
+
+    @Override
+    public DateInterval toInterval( DateIntervalType type, int offset, int length )
+    {
+        return toInterval( today(), type, offset, length );
+    }
+
+    @Override
     public DateUnit today()
     {
         DateTime dateTime = DateTime.now( ISOChronology.getInstance() );

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/Calendar.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/Calendar.java	2014-04-29 07:28:26 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/Calendar.java	2014-05-12 09:56:39 +0000
@@ -118,12 +118,42 @@
     /**
      * Gets interval of type based on DateUnit
      * @param dateUnit DateUnit representing local year, month, day
+     * @param type     Interval type to get
+     * @param offset   Offset to start at, can be negative of positive
+     * @param length   How many periods to asks for, i.e. type = MONTH, length = 2, two months
+     * @return Interval for interval type based on dateUnit
+     * @see DateIntervalType
+     */
+    DateInterval toInterval( DateUnit dateUnit, DateIntervalType type, int offset, int length );
+
+    /**
+     * Gets interval of type based on DateUnit using default options, 0 for offset, 1 for length
+     * @param dateUnit DateUnit representing local year, month, day
+     * @param type     Interval type to get
      * @return Interval for interval type based on dateUnit
      * @see DateIntervalType
      */
     DateInterval toInterval( DateUnit dateUnit, DateIntervalType type );
 
     /**
+     * Gets interval of type based on today's date
+     * @param type Interval type to get
+     * @return Interval for interval type based on dateUnit
+     * @see DateIntervalType
+     */
+    DateInterval toInterval( DateIntervalType type );
+
+    /**
+     * Gets interval of type based on today's date
+     * @param type   Interval type to get
+     * @param offset Offset to start at, can be negative of positive
+     * @param length How many periods to asks for, i.e. type = MONTH, length = 2, two months
+     * @return Interval for interval type based on dateUnit
+     * @see DateIntervalType
+     */
+    DateInterval toInterval( DateIntervalType type, int offset, int length );
+
+    /**
      * Gets current date as local DateUnit
      * @return Today date as local DateUnit
      */
@@ -221,4 +251,68 @@
      * @see <a href="http://en.wikipedia.org/wiki/Internationalization_and_localization";>http://en.wikipedia.org/wiki/Internationalization_and_localization</a>
      */
     String shortNameOfDay( int day );
+
+    /**
+     * Returns a new dateUnit with specified number of days added
+     * @param dateUnit DateUnit representing local year, month, day
+     * @param days     Days to add
+     * @return dateUnit + days
+     */
+    DateUnit plusDays( DateUnit dateUnit, int days );
+
+    /**
+     * Returns a new dateUnit with specified number of days subtracted
+     * @param dateUnit DateUnit representing local year, month, day
+     * @param days     Days to subtract
+     * @return dateUnit - days
+     */
+    DateUnit minusDays( DateUnit dateUnit, int days );
+
+    /**
+     * Returns a new dateUnit with specified number of weeks added
+     * @param dateUnit DateUnit representing local year, month, day
+     * @param weeks    Weeks to add
+     * @return dateUnit + weeks
+     */
+    DateUnit plusWeeks( DateUnit dateUnit, int weeks );
+
+    /**
+     * Returns a new dateUnit with specified number of weeks subtracted
+     * @param dateUnit DateUnit representing local year, month, day
+     * @param weeks    Weeks to subtract
+     * @return dateUnit - weeks
+     */
+    DateUnit minusWeeks( DateUnit dateUnit, int weeks );
+
+    /**
+     * Returns a new dateUnit with specified number of months added
+     * @param dateUnit DateUnit representing local year, month, day
+     * @param months   Months to add
+     * @return dateUnit + months
+     */
+    DateUnit plusMonths( DateUnit dateUnit, int months );
+
+    /**
+     * Returns a new dateUnit with specified number of months subtracted
+     * @param dateUnit DateUnit representing local year, month, day
+     * @param months   Months to subtract
+     * @return dateUnit - months
+     */
+    DateUnit minusMonths( DateUnit dateUnit, int months );
+
+    /**
+     * Returns a new dateUnit with specified number of years added
+     * @param dateUnit DateUnit representing local year, month, day
+     * @param years    Years to add
+     * @return dateUnit + years
+     */
+    DateUnit plusYears( DateUnit dateUnit, int years );
+
+    /**
+     * Returns a new dateUnit with specified number of years subtracted
+     * @param dateUnit DateUnit representing local year, month, day
+     * @param years    Years to subtract
+     * @return dateUnit - years
+     */
+    DateUnit minusYears( DateUnit dateUnit, int years );
 }

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/ChronologyBasedCalendar.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/ChronologyBasedCalendar.java	2014-04-27 02:45:02 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/ChronologyBasedCalendar.java	2014-05-12 09:56:39 +0000
@@ -62,51 +62,121 @@
     }
 
     @Override
-    public DateInterval toInterval( DateUnit dateUnit, DateIntervalType type )
+    public DateInterval toInterval( DateUnit dateUnit, DateIntervalType type, int offset, int length )
     {
         switch ( type )
         {
             case ISO8601_YEAR:
-                return toYearIsoInterval( dateUnit );
+                return toYearIsoInterval( dateUnit, offset, length );
             case ISO8601_MONTH:
-                return toMonthIsoInterval( dateUnit );
+                return toMonthIsoInterval( dateUnit, offset, length );
             case ISO8601_WEEK:
-                return toWeekIsoInterval( dateUnit );
+                return toWeekIsoInterval( dateUnit, offset, length );
+            case ISO8601_DAY:
+                return toDayIsoInterval( dateUnit, offset, length );
         }
 
         return null;
     }
 
-    private DateInterval toYearIsoInterval( DateUnit dateUnit )
-    {
-        DateUnit from = new DateUnit( dateUnit.getYear(), 1, 1 );
-        DateUnit to = new DateUnit( dateUnit.getYear(), monthsInYear(), daysInMonth( dateUnit.getYear(), monthsInYear() ) );
-
-        from.setDayOfWeek( isoWeekday( from ) );
-        to.setDayOfWeek( isoWeekday( to ) );
-
-        return new DateInterval( from, to, DateIntervalType.ISO8601_YEAR );
-    }
-
-    private DateInterval toMonthIsoInterval( DateUnit dateUnit )
-    {
-        DateUnit from = new DateUnit( dateUnit.getYear(), dateUnit.getMonth(), 1 );
-        DateUnit to = new DateUnit( dateUnit.getYear(), dateUnit.getMonth(), daysInMonth( dateUnit.getYear(), dateUnit.getMonth() ) );
-
-        from.setDayOfWeek( isoWeekday( from ) );
-        to.setDayOfWeek( isoWeekday( to ) );
-
-        return new DateInterval( from, to, DateIntervalType.ISO8601_MONTH );
-    }
-
-    private DateInterval toWeekIsoInterval( DateUnit dateUnit )
-    {
-        DateTime dateTime = new DateTime( dateUnit.getYear(), dateUnit.getMonth(), dateUnit.getDay(), 0, 0, chronology );
-
-        DateTime from = dateTime.weekOfWeekyear().toInterval().getStart();
-        DateTime to = dateTime.weekOfWeekyear().toInterval().getEnd().minusDays( 1 );
-
-        return new DateInterval( DateUnit.fromDateTime( from ), DateUnit.fromDateTime( to ), DateIntervalType.ISO8601_WEEK );
+    private DateInterval toYearIsoInterval( DateUnit dateUnit, int offset, int length )
+    {
+        DateTime from = dateUnit.toDateTime( chronology );
+
+        if ( offset > 0 )
+        {
+            from = from.plusYears( offset );
+        }
+        else if ( offset < 0 )
+        {
+            from = from.minusYears( -offset );
+        }
+
+        DateTime to = new DateTime( from ).plusYears( length ).minusDays( 1 );
+
+        DateUnit fromDateUnit = DateUnit.fromDateTime( from );
+        DateUnit toDateUnit = DateUnit.fromDateTime( to );
+
+        fromDateUnit.setDayOfWeek( isoWeekday( fromDateUnit ) );
+        toDateUnit.setDayOfWeek( isoWeekday( toDateUnit ) );
+
+        return new DateInterval( toIso( fromDateUnit ), toIso( toDateUnit ),
+            DateIntervalType.ISO8601_YEAR );
+    }
+
+    private DateInterval toMonthIsoInterval( DateUnit dateUnit, int offset, int length )
+    {
+        DateTime from = dateUnit.toDateTime( chronology );
+
+        if ( offset > 0 )
+        {
+            from = from.plusMonths( offset );
+        }
+        else if ( offset < 0 )
+        {
+            from = from.minusMonths( -offset );
+        }
+
+        DateTime to = new DateTime( from ).plusMonths( length ).minusDays( 1 );
+
+        DateUnit fromDateUnit = DateUnit.fromDateTime( from );
+        DateUnit toDateUnit = DateUnit.fromDateTime( to );
+
+        fromDateUnit.setDayOfWeek( isoWeekday( fromDateUnit ) );
+        toDateUnit.setDayOfWeek( isoWeekday( toDateUnit ) );
+
+        return new DateInterval( toIso( fromDateUnit ), toIso( toDateUnit ),
+            DateIntervalType.ISO8601_MONTH );
+    }
+
+    private DateInterval toWeekIsoInterval( DateUnit dateUnit, int offset, int length )
+    {
+        DateTime from = dateUnit.toDateTime( chronology );
+
+        if ( offset > 0 )
+        {
+            from = from.plusWeeks( offset );
+        }
+        else if ( offset < 0 )
+        {
+            from = from.minusWeeks( -offset );
+        }
+
+        DateTime to = new DateTime( from ).plusWeeks( length ).minusDays( 1 );
+
+        DateUnit fromDateUnit = DateUnit.fromDateTime( from );
+        DateUnit toDateUnit = DateUnit.fromDateTime( to );
+
+        fromDateUnit.setDayOfWeek( isoWeekday( fromDateUnit ) );
+        toDateUnit.setDayOfWeek( isoWeekday( toDateUnit ) );
+
+        return new DateInterval( toIso( fromDateUnit ), toIso( toDateUnit ),
+            DateIntervalType.ISO8601_WEEK );
+    }
+
+    private DateInterval toDayIsoInterval( DateUnit dateUnit, int offset, int length )
+    {
+        DateTime from = dateUnit.toDateTime( chronology );
+
+        if ( offset > 0 )
+        {
+            from = from.plusDays( offset );
+        }
+        else if ( offset < 0 )
+        {
+            from = from.minusDays( -offset );
+        }
+
+        DateTime to = new DateTime( from ).plusDays( length );
+
+        DateUnit fromDateUnit = DateUnit.fromDateTime( from );
+        DateUnit toDateUnit = DateUnit.fromDateTime( to );
+
+        fromDateUnit.setDayOfWeek( isoWeekday( fromDateUnit ) );
+        toDateUnit.setDayOfWeek( isoWeekday( toDateUnit ) );
+
+        return new DateInterval( toIso( fromDateUnit ), toIso( toDateUnit ),
+            DateIntervalType.ISO8601_DAY );
     }
 
     @Override
@@ -164,4 +234,60 @@
         DateTime dateTime = dateUnit.toDateTime( chronology );
         return dateTime.getDayOfWeek();
     }
+
+    @Override
+    public DateUnit plusDays( DateUnit dateUnit, int days )
+    {
+        DateTime dateTime = dateUnit.toDateTime( chronology );
+        return DateUnit.fromDateTime( dateTime.plusDays( days ) );
+    }
+
+    @Override
+    public DateUnit minusDays( DateUnit dateUnit, int days )
+    {
+        DateTime dateTime = dateUnit.toDateTime( chronology );
+        return DateUnit.fromDateTime( dateTime.minusDays( days ) );
+    }
+
+    @Override
+    public DateUnit plusWeeks( DateUnit dateUnit, int weeks )
+    {
+        DateTime dateTime = dateUnit.toDateTime( chronology );
+        return DateUnit.fromDateTime( dateTime.plusWeeks( weeks ) );
+    }
+
+    @Override
+    public DateUnit minusWeeks( DateUnit dateUnit, int weeks )
+    {
+        DateTime dateTime = dateUnit.toDateTime( chronology );
+        return DateUnit.fromDateTime( dateTime.minusWeeks( weeks ) );
+    }
+
+    @Override
+    public DateUnit plusMonths( DateUnit dateUnit, int months )
+    {
+        DateTime dateTime = dateUnit.toDateTime( chronology );
+        return DateUnit.fromDateTime( dateTime.plusMonths( months ) );
+    }
+
+    @Override
+    public DateUnit minusMonths( DateUnit dateUnit, int months )
+    {
+        DateTime dateTime = dateUnit.toDateTime( chronology );
+        return DateUnit.fromDateTime( dateTime.minusMonths( months ) );
+    }
+
+    @Override
+    public DateUnit plusYears( DateUnit dateUnit, int years )
+    {
+        DateTime dateTime = dateUnit.toDateTime( chronology );
+        return DateUnit.fromDateTime( dateTime.plusYears( years ) );
+    }
+
+    @Override
+    public DateUnit minusYears( DateUnit dateUnit, int years )
+    {
+        DateTime dateTime = dateUnit.toDateTime( chronology );
+        return DateUnit.fromDateTime( dateTime.minusYears( years ) );
+    }
 }

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/DateIntervalType.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/DateIntervalType.java	2014-04-27 02:45:02 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/DateIntervalType.java	2014-05-12 09:56:39 +0000
@@ -37,5 +37,5 @@
       * Gives interval for a year, month or week based on ISO 8601.
       * @see <a href="http://en.wikipedia.org/wiki/ISO_8601";>http://en.wikipedia.org/wiki/ISO_8601</a>
       */
-     ISO8601_YEAR, ISO8601_MONTH, ISO8601_WEEK
+     ISO8601_YEAR, ISO8601_MONTH, ISO8601_WEEK, ISO8601_DAY
 }

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/DateUnit.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/DateUnit.java	2014-05-05 08:08:38 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/DateUnit.java	2014-05-12 09:56:39 +0000
@@ -70,6 +70,14 @@
     {
     }
 
+    public DateUnit( DateUnit dateUnit )
+    {
+        this.year = dateUnit.getYear();
+        this.month = dateUnit.getMonth();
+        this.day = dateUnit.getDay();
+        this.dayOfWeek = dateUnit.getDayOfWeek();
+    }
+
     public DateUnit( int year, int month, int day )
     {
         this.year = year;

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/impl/NepaliCalendar.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/impl/NepaliCalendar.java	2014-04-29 07:28:26 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/calendar/impl/NepaliCalendar.java	2014-05-12 09:56:39 +0000
@@ -94,65 +94,43 @@
         DateTime start = startIso.toDateTime();
         DateTime end = dateUnit.toDateTime();
 
-        int days = Days.daysBetween( start, end ).getDays();
-
-        int curYear = startNepal.getYear();
-        int curMonth = startNepal.getMonth();
-        int curDay = startNepal.getDay();
-        int dayOfWeek = startNepal.getDayOfWeek();
-
-        while ( days != 0 )
-        {
-            // days in month
-            int dm = conversionMap.get( curYear )[curMonth];
-
-            curDay++;
-
-            if ( curDay > dm )
-            {
-                curMonth++;
-                curDay = 1;
-            }
-
-            if ( curMonth > 12 )
-            {
-                curYear++;
-                curMonth = 1;
-            }
-
-            dayOfWeek++;
-
-            if ( dayOfWeek > 7 )
-            {
-                dayOfWeek = 1;
-            }
-
-            days--;
-        }
-
-        return new DateUnit( curYear, curMonth, curDay, dayOfWeek );
+        return plusDays( startNepal, Days.daysBetween( start, end ).getDays() );
     }
 
     @Override
-    public DateInterval toInterval( DateUnit dateUnit, DateIntervalType type )
+    public DateInterval toInterval( DateUnit dateUnit, DateIntervalType type, int offset, int length )
     {
         switch ( type )
         {
             case ISO8601_YEAR:
-                return toYearIsoInterval( dateUnit );
+                return toYearIsoInterval( dateUnit, offset, length );
             case ISO8601_MONTH:
-                return toMonthIsoInterval( dateUnit );
+                return toMonthIsoInterval( dateUnit, offset, length );
             case ISO8601_WEEK:
-                return toWeekIsoInterval( dateUnit );
+                return toWeekIsoInterval( dateUnit, offset, length );
+            case ISO8601_DAY:
+                return toDayIsoInterval( dateUnit, offset, length );
         }
 
         return null;
     }
 
-    private DateInterval toYearIsoInterval( DateUnit dateUnit )
+    private DateInterval toYearIsoInterval( DateUnit dateUnit, int offset, int length )
     {
-        DateUnit from = new DateUnit( dateUnit.getYear(), 1, 1 );
-        DateUnit to = new DateUnit( dateUnit.getYear(), monthsInYear(), daysInMonth( dateUnit.getYear(), monthsInYear() ) );
+        DateUnit from = new DateUnit( dateUnit );
+
+        if ( offset > 0 )
+        {
+            from = plusYears( from, offset );
+        }
+        else if ( offset < 0 )
+        {
+            from = minusYears( from, -offset );
+        }
+
+        DateUnit to = new DateUnit( from );
+        to = plusYears( to, length );
+        to = minusDays( to, length );
 
         from = toIso( from );
         to = toIso( to );
@@ -160,10 +138,22 @@
         return new DateInterval( from, to, DateIntervalType.ISO8601_YEAR );
     }
 
-    private DateInterval toMonthIsoInterval( DateUnit dateUnit )
+    private DateInterval toMonthIsoInterval( DateUnit dateUnit, int offset, int length )
     {
-        DateUnit from = new DateUnit( dateUnit.getYear(), dateUnit.getMonth(), 1 );
-        DateUnit to = new DateUnit( dateUnit.getYear(), dateUnit.getMonth(), daysInMonth( dateUnit.getYear(), dateUnit.getMonth() ) );
+        DateUnit from = new DateUnit( dateUnit );
+
+        if ( offset > 0 )
+        {
+            from = plusMonths( from, offset );
+        }
+        else if ( offset < 0 )
+        {
+            from = minusMonths( from, -offset );
+        }
+
+        DateUnit to = new DateUnit( from );
+        to = plusMonths( to, length );
+        to = minusDays( to, 1 );
 
         from = toIso( from );
         to = toIso( to );
@@ -171,14 +161,49 @@
         return new DateInterval( from, to, DateIntervalType.ISO8601_MONTH );
     }
 
-    private DateInterval toWeekIsoInterval( DateUnit dateUnit )
-    {
-        DateTime dateTime = toIso( dateUnit ).toDateTime();
-
-        DateTime from = dateTime.weekOfWeekyear().toInterval().getStart();
-        DateTime to = dateTime.weekOfWeekyear().toInterval().getEnd().minusDays( 1 );
-
-        return new DateInterval( DateUnit.fromDateTime( from ), DateUnit.fromDateTime( to ), DateIntervalType.ISO8601_WEEK );
+    private DateInterval toWeekIsoInterval( DateUnit dateUnit, int offset, int length )
+    {
+        DateUnit from = new DateUnit( dateUnit );
+
+        if ( offset > 0 )
+        {
+            from = plusWeeks( from, offset );
+        }
+        else if ( offset < 0 )
+        {
+            from = minusWeeks( from, -offset );
+        }
+
+        DateUnit to = new DateUnit( from );
+        to = plusWeeks( to, length );
+        to = minusDays( to, 1 );
+
+        from = toIso( from );
+        to = toIso( to );
+
+        return new DateInterval( from, to, DateIntervalType.ISO8601_WEEK );
+    }
+
+    private DateInterval toDayIsoInterval( DateUnit dateUnit, int offset, int length )
+    {
+        DateUnit from = new DateUnit( dateUnit );
+
+        if ( offset > 0 )
+        {
+            from = plusDays( from, offset );
+        }
+        else if ( offset < 0 )
+        {
+            from = minusDays( from, -offset );
+        }
+
+        DateUnit to = new DateUnit( from );
+        to = plusDays( to, length );
+
+        from = toIso( from );
+        to = toIso( to );
+
+        return new DateInterval( from, to, DateIntervalType.ISO8601_DAY );
     }
 
     @Override
@@ -284,6 +309,174 @@
         return conversionMap.get( year )[0];
     }
 
+    @Override
+    public DateUnit minusYears( DateUnit dateUnit, int years )
+    {
+        DateUnit result = new DateUnit( dateUnit.getYear() - years, dateUnit.getMonth(), dateUnit.getDay(), dateUnit.getDayOfWeek() );
+        updateDateUnit( result );
+
+        return result;
+    }
+
+    @Override
+    public DateUnit minusMonths( DateUnit dateUnit, int months )
+    {
+        DateUnit result = new DateUnit( dateUnit );
+
+        while ( months != 0 )
+        {
+            result.setMonth( result.getMonth() - 1 );
+
+            if ( result.getMonth() < 1 )
+            {
+                result.setMonth( monthsInYear() );
+                result.setYear( result.getYear() - 1 );
+            }
+
+            months--;
+        }
+
+        updateDateUnit( result );
+
+        return result;
+    }
+
+    @Override
+    public DateUnit minusWeeks( DateUnit dateUnit, int weeks )
+    {
+        return minusDays( dateUnit, weeks * daysInWeek() );
+    }
+
+    @Override
+    public DateUnit minusDays( DateUnit dateUnit, int days )
+    {
+        int curYear = dateUnit.getYear();
+        int curMonth = dateUnit.getMonth();
+        int curDay = dateUnit.getDay();
+        int dayOfWeek = dateUnit.getDayOfWeek();
+
+        while ( days != 0 )
+        {
+            curDay--;
+
+            if ( curDay == 0 )
+            {
+                curMonth--;
+
+                if ( curMonth == 0 )
+                {
+                    curYear--;
+                    curMonth = 12;
+                }
+
+                curDay = conversionMap.get( curYear )[curMonth];
+            }
+
+            dayOfWeek--;
+
+            if ( dayOfWeek == 0 )
+            {
+                dayOfWeek = 7;
+            }
+
+            days--;
+        }
+
+        return new DateUnit( curYear, curMonth, curDay, dayOfWeek );
+    }
+
+    @Override
+    public DateUnit plusYears( DateUnit dateUnit, int years )
+    {
+        DateUnit result = new DateUnit( dateUnit.getYear() + years, dateUnit.getMonth(), dateUnit.getDay(), dateUnit.getDayOfWeek() );
+        updateDateUnit( result );
+
+        return result;
+    }
+
+    @Override
+    public DateUnit plusMonths( DateUnit dateUnit, int months )
+    {
+        DateUnit result = new DateUnit( dateUnit );
+
+        while ( months != 0 )
+        {
+            result.setMonth( result.getMonth() + 1 );
+
+            if ( result.getMonth() > monthsInYear() )
+            {
+                result.setMonth( 1 );
+                result.setYear( result.getYear() + 1 );
+            }
+
+            months--;
+        }
+
+        updateDateUnit( result );
+
+        return result;
+    }
+
+    @Override
+    public DateUnit plusWeeks( DateUnit dateUnit, int weeks )
+    {
+        return plusDays( dateUnit, weeks * daysInWeek() );
+    }
+
+    @Override
+    public DateUnit plusDays( DateUnit dateUnit, int days )
+    {
+        int curYear = dateUnit.getYear();
+        int curMonth = dateUnit.getMonth();
+        int curDay = dateUnit.getDay();
+        int dayOfWeek = dateUnit.getDayOfWeek();
+
+        while ( days != 0 )
+        {
+            // days in month
+            int dm = conversionMap.get( curYear )[curMonth];
+
+            curDay++;
+
+            if ( curDay > dm )
+            {
+                curMonth++;
+                curDay = 1;
+            }
+
+            if ( curMonth > 12 )
+            {
+                curYear++;
+                curMonth = 1;
+            }
+
+            dayOfWeek++;
+
+            if ( dayOfWeek > 7 )
+            {
+                dayOfWeek = 1;
+            }
+
+            days--;
+        }
+
+        return new DateUnit( curYear, curMonth, curDay, dayOfWeek );
+    }
+
+    // check if day is more than current maximum for month, don't overflow, just set to maximum
+    // set day of week
+    private void updateDateUnit( DateUnit result )
+    {
+        int dm = conversionMap.get( result.getYear() )[result.getMonth()];
+
+        if ( result.getDay() > dm )
+        {
+            result.setDay( dm );
+        }
+
+        result.setDayOfWeek( weekday( result ) );
+    }
+
     //------------------------------------------------------------------------------------------------------------
     // Conversion map for Nepali calendar
     //

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/QueryFilter.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/QueryFilter.java	2014-04-21 11:05:22 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/QueryFilter.java	2014-05-12 09:56:39 +0000
@@ -1,8 +1,5 @@
 package org.hisp.dhis.common;
 
-import java.util.HashMap;
-import java.util.Map;
-
 /*
  * Copyright (c) 2004-2014, University of Oslo
  * All rights reserved.
@@ -31,6 +28,9 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * @author Lars Helge Overland
  */
@@ -38,18 +38,18 @@
 {
     public static final String OPTION_SEP = ";";
     
-    public static final Map<String, String> OPERATOR_MAP = new HashMap<String, String>() { {
-        put( "eq", "=" );
-        put( "gt", ">" );
-        put( "ge", ">=" );
-        put( "lt", "<" );
-        put( "le", "<=" );
-        put( "ne", "!=" );
-        put( "like", "like" );
-        put( "in", "in" );
+    public static final Map<QueryOperator, String> OPERATOR_MAP = new HashMap<QueryOperator, String>() { {
+        put( QueryOperator.EQ, "=" );
+        put( QueryOperator.GT, ">" );
+        put( QueryOperator.GE, ">=" );
+        put( QueryOperator.LT, "<" );
+        put( QueryOperator.LE, "<=" );
+        put( QueryOperator.NE, "!=" );
+        put( QueryOperator.LIKE, "like" );
+        put( QueryOperator.IN, "in" );
     } };
     
-    protected String operator;
+    protected QueryOperator operator;
 
     protected String filter;
 
@@ -61,7 +61,7 @@
     {
     }
     
-    public QueryFilter( String operator, String filter )
+    public QueryFilter( QueryOperator operator, String filter )
     {
         this.operator = operator;
         this.filter = filter;
@@ -73,7 +73,7 @@
     
     public boolean isFilter()
     {
-        return operator != null && !operator.isEmpty() && filter != null && !filter.isEmpty();
+        return operator != null && filter != null && !filter.isEmpty();
     }
     
     public String getSqlOperator()
@@ -83,7 +83,7 @@
             return null;
         }
         
-        return OPERATOR_MAP.get( operator.toLowerCase() );
+        return OPERATOR_MAP.get( operator );
     }
     
     public String getSqlFilter( String encodedFilter )
@@ -92,12 +92,12 @@
         {
             return null;
         }
-                
-        if ( operator.equalsIgnoreCase( "like" ) )
+
+        if ( QueryOperator.LIKE.equals( operator ) )
         {
             return "'%" + encodedFilter + "%'";
         }
-        else if ( operator.equalsIgnoreCase( "in" ) )
+        else if ( QueryOperator.IN.equals( operator ) )
         {
             String[] split = encodedFilter.split( OPTION_SEP );
             
@@ -185,12 +185,12 @@
     // Getters and setters
     // -------------------------------------------------------------------------
     
-    public String getOperator()
+    public QueryOperator getOperator()
     {
         return operator;
     }
 
-    public void setOperator( String operator )
+    public void setOperator( QueryOperator operator )
     {
         this.operator = operator;
     }

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/QueryItem.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/QueryItem.java	2014-04-21 11:05:22 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/QueryItem.java	2014-05-12 09:56:39 +0000
@@ -61,7 +61,7 @@
         this.numeric = numeric;
     }
     
-    public QueryItem( IdentifiableObject item, String operator, String filter, boolean numeric )
+    public QueryItem( IdentifiableObject item, QueryOperator operator, String filter, boolean numeric )
     {
         this.item = item;
         this.numeric = numeric;

=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/QueryOperator.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/QueryOperator.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/QueryOperator.java	2014-05-12 09:56:39 +0000
@@ -0,0 +1,16 @@
+package org.hisp.dhis.common;
+
+public enum QueryOperator
+{
+    EQ, GT, GE, LT, LE, NE, LIKE, IN;
+    
+    public static final QueryOperator fromString( String string )
+    {
+        if ( string == null || string.isEmpty() )
+        {
+            return null;
+        }
+        
+        return valueOf( string.toUpperCase() );
+    }
+}

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStage.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStage.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStage.java	2014-05-12 09:56:39 +0000
@@ -180,6 +180,9 @@
         this.reminders = reminders;
     }
 
+    @JsonProperty
+    @JsonView( { DetailedView.class, ExportView.class } )
+    @JacksonXmlProperty( namespace = DxfNamespaces.DXF_2_0 )
     public DataEntryForm getDataEntryForm()
     {
         return dataEntryForm;

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceService.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceService.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceService.java	2014-05-12 09:56:39 +0000
@@ -146,25 +146,6 @@
     List<ProgramStageInstance> getProgramStageInstances( TrackedEntityInstance entityInstance, Boolean completed );
 
     /**
-     * Get an event report of program instance
-     * 
-     * @param programInstance ProgramInstance
-     * @param format I18nFormat object
-     * @param i18n I18n object
-     * 
-     * @return List of grids. Each grid is included all information of a event
-     */
-    List<Grid> getProgramStageInstancesReport( ProgramInstance programInstance, I18nFormat format, I18n i18n );
-
-    /**
-     * Remove events without any data values
-     * 
-     * @param programStage Empty events belong to this program stage are removed
-     * @param organisationUnit Specify an orgunit where empty events belong to
-     */
-    void removeEmptyEvents( ProgramStage programStage, OrganisationUnit organisationUnit );
-
-    /**
      * Create relationship between an OutboundSms with many events.
      * 
      * @param programStageInstances Event list
@@ -337,11 +318,4 @@
      */
     ProgramStageInstance createProgramStageInstance( TrackedEntityInstance entityInstance, Program program, Date executionDate,
         OrganisationUnit organisationUnit );
-
-    Grid searchEvents( ProgramStage programStage, List<TabularEventColumn> columns,
-        Collection<Integer> organisationUnits, Date startDate, Date endDate, Boolean completed, Integer min,
-        Integer max, I18n i18n );
-
-    int searchEventsCount( ProgramStage programStage, List<TabularEventColumn> columns,
-        Collection<Integer> organisationUnits, Boolean completed, Date startDate, Date endDate );
 }

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceStore.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/program/ProgramStageInstanceStore.java	2014-05-12 09:56:39 +0000
@@ -35,7 +35,6 @@
 import org.hisp.dhis.common.GenericIdentifiableObjectStore;
 import org.hisp.dhis.common.Grid;
 import org.hisp.dhis.i18n.I18n;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
 import org.hisp.dhis.sms.outbound.OutboundSms;
 import org.hisp.dhis.trackedentity.TrackedEntityInstance;
 
@@ -102,14 +101,6 @@
     List<ProgramStageInstance> get( TrackedEntityInstance entityInstance, Boolean completed );
 
     /**
-     * Remove events without any data values
-     * 
-     * @param programStage Empty events belong to this program stage are removed
-     * @param organisationUnit Specify an orgunit where empty events belong to
-     */
-    void removeEmptyEvents( ProgramStage programStage, OrganisationUnit organisationUnit );
-
-    /**
      * Create relationship between an OutboundSms with many events.
      * 
      * @param programStageInstances Event list
@@ -245,41 +236,4 @@
      * @return Grid
      */
     Grid getCompleteness( Collection<Integer> orgunitIds, Program program, String startDate, String endDate, I18n i18n );
-
-    /**
-     * Search {@link ProgramStageInstance} by criteria with result limited
-     * 
-     * @param programStage {@link ProgramStage} needs for searching events
-     * @param orgUnits List of {@link OrganisationUnit} ids
-     * @param columns The criteria for searching
-     * @param startDate Report date the instance should be on or after.
-     * @param endDate Report date the instance should be on or before.
-     * @param completed The status of events. There are three status values,
-     *        NULL for retrieving all events, false for retrieving events
-     *        uncompleted and true for retrieving events completed.
-     * @param min
-     * @param max
-     * @param i18n
-     * 
-     * @return A grid
-     */
-    Grid searchEvent( ProgramStage programStage, Collection<Integer> orgUnits, List<TabularEventColumn> columns,
-        Date startDate, Date endDate, Boolean completed, Integer min, Integer max, I18n i18n );
-
-    /**
-     * Search {@link ProgramStageInstance} by criteria
-     * 
-     * @param programStage {@link ProgramStage} needs for searching events
-     * @param orgUnits List of {@link OrganisationUnit} ids
-     * @param columns The criteria for searching
-     * @param startDate Report date the instance should be on or after.
-     * @param endDate Report date the instance should be on or before.
-     * @param completed The status of events. There are three status values,
-     *        NULL for retrieving all events, false for retrieving events
-     *        uncompleted and true for retrieving events completed.
-     * 
-     * @return The number of events
-     */
-    int searchEventsCount( ProgramStage programStage, List<TabularEventColumn> columns,
-        Collection<Integer> organisationUnits, Date startDate, Date endDate, Boolean completed );
 }

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceQueryParams.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceQueryParams.java	2014-04-21 11:05:22 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceQueryParams.java	2014-05-12 09:56:39 +0000
@@ -159,8 +159,30 @@
     // -------------------------------------------------------------------------
     
     /**
-     * //TODO allow attributes only once and allow multiple filters per item
-     * 
+     * Adds a query item as attribute to the parameters.
+     */
+    public void addAttribute( QueryItem attribute )
+    {
+        this.attributes.add( attribute );
+    }
+    
+    /**
+     * Adds a query item as filter to the parameters.
+     */
+    public void addFilter( QueryItem filter )
+    {
+        this.filters.add( filter );
+    }
+    
+    /**
+     * Adds an organisation unit to the parameters.
+     */
+    public void addOrganisationUnit( OrganisationUnit unit )
+    {
+        this.organisationUnits.add( unit );
+    }
+
+    /**
      * Performs a set of operations on this params.
      * 
      * <ul>
@@ -210,8 +232,35 @@
         
         return setMap;
     }
+
+    /**
+     * Add the given attributes to this params if they are not already present.
+     */
+    public void addAttributesIfNotExist( List<QueryItem> attrs )
+    {
+        for ( QueryItem attr : attrs )
+        {
+            if ( attributes != null && !attributes.contains( attr ) )
+            {
+                attributes.add( attr );            
+            }
+        }
+    }
     
     /**
+     * Adds the given filters to this params if they are not already present.
+     */
+    public void addFiltersIfNotExist( List<QueryItem> filtrs )
+    {
+        for ( QueryItem filter : filtrs )
+        {
+            if ( filters != null && !filters.contains( filter ) )
+            {
+                filters.add( filter );
+            }
+        }
+    }
+    /**
      * Indicates whether this is a logical OR query, meaning that a query string
      * is specified and instances which matches this query on one or more attributes
      * should be included in the response. The opposite is an item-specific query,
@@ -278,35 +327,7 @@
         
         return duplicates;
     }
-        
-    /**
-     * Add the given attributes to this params if they are not already present.
-     */
-    public void addAttributesIfNotExist( List<QueryItem> attrs )
-    {
-        for ( QueryItem attr : attrs )
-        {
-            if ( attributes != null && !attributes.contains( attr ) )
-            {
-                attributes.add( attr );            
-            }
-        }
-    }
-    
-    /**
-     * Adds the given filters to this params if they are not already present.
-     */
-    public void addFiltersIfNotExist( List<QueryItem> filtrs )
-    {
-        for ( QueryItem filter : filtrs )
-        {
-            if ( filters != null && !filters.contains( filter ) )
-            {
-                filters.add( filter );
-            }
-        }
-    }
-    
+           
     /**
      * Indicates whether this params specifies any attributes and/or filters.
      */

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceService.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceService.java	2014-05-04 14:04:41 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceService.java	2014-05-12 09:56:39 +0000
@@ -45,6 +45,49 @@
 import org.hisp.dhis.validation.ValidationCriteria;
 
 /**
+ * <p>This interface is responsible for retrieving tracked entity instances (TEI).
+ * The query methods accepts a TrackedEntityInstanceQueryParams object which
+ * encapsulates all arguments.</p> 
+ * 
+ * <p>The TEIs are returned as a Grid object, which is a two-dimensional list with 
+ * headers. The TEI attribute values are returned in the same order as specified
+ * in the arguments. The grid has a set of columns which are always present
+ * starting at index 0, followed by attributes specified for the query. All
+ * values in the grid are of type String. The order is:</p>
+ * 
+ * <ul>
+ * <li>0: Tracked entity instance UID</li>
+ * <li>1: Created time stamp</li>
+ * <li>2: Last updated time stamp</li>
+ * <li>3: Organisation unit UID</li>
+ * <li>4: Tracked entity UID</li>
+ * <ul>
+ * 
+ * <p>Attributes specified in the query follows on the next column indexes.
+ * Example usage for retrieving TEIs with two attributes using one attribute as 
+ * filter:</p>
+ * 
+ * <pre>
+ * <code>
+ * TrackedEntityInstanceQueryParams params = new TrackedEntityInstanceQueryParams();
+ *
+ * params.addAttribute( new QueryItem( gender, QueryOperator.EQ, "Male", false ) );
+ * params.addAttribute( new QueryItem( age, QueryOperator.LT, "5", true ) );
+ * params.addFilter( new QueryItem( weight, QueryOperator.GT, "2500", true ) );
+ * params.addOrganistionUnit( unit );
+ * 
+ * Grid instances = teiService.getTrackedEntityInstances( params );
+ * 
+ * for ( List&lt;Object&gt; row : instances.getRows() )
+ * {
+ *     String tei = row.get( 0 );
+ *     String ou = row.get( 3 );
+ *     String gender = row.get( 5 );
+ *     String age = row.get( 6 );
+ * }
+ * </code>
+ * </pre>
+ * 
  * @author Abyot Asalefew Gizaw
  */
 public interface TrackedEntityInstanceService
@@ -154,7 +197,7 @@
      * @return a collection of all TrackedEntityInstance, or an empty collection
      *         if there are no TrackedEntityInstances.
      */
-    Collection<TrackedEntityInstance> getAllTrackedEntityInstances();
+    //Collection<TrackedEntityInstance> getAllTrackedEntityInstances();
 
     /**
      * Retrieve entityInstances for mobile base on identifier value
@@ -184,7 +227,7 @@
      * @param program Program
      * @return TrackedEntityInstance list
      */
-    Collection<TrackedEntityInstance> getTrackedEntityInstances( Program program );
+    //Collection<TrackedEntityInstance> getTrackedEntityInstances( Program program );
 
     /**
      * Retrieve entityInstances registered in a orgunit and enrolled into a
@@ -194,16 +237,7 @@
      * @param program
      * @return
      */
-    Collection<TrackedEntityInstance> getTrackedEntityInstances( OrganisationUnit organisationUnit, Program program );
-
-    /**
-     * Retrieve entityInstances base on Attribute
-     * 
-     * @param attributeId
-     * @param value
-     * @return
-     */
-    Collection<TrackedEntityInstance> getTrackedEntityInstance( Integer attributeId, String value );
+    //Collection<TrackedEntityInstance> getTrackedEntityInstances( OrganisationUnit organisationUnit, Program program );
 
     /**
      * Search entityInstances base on OrganisationUnit and Program with result
@@ -225,8 +259,7 @@
      * @param attribute
      * @return TrackedEntityInstance List
      */
-    Collection<TrackedEntityInstance> sortTrackedEntityInstancesByAttribute(
-        Collection<TrackedEntityInstance> entityInstances, TrackedEntityAttribute attribute );
+    //Collection<TrackedEntityInstance> sortTrackedEntityInstancesByAttribute( Collection<TrackedEntityInstance> entityInstances, TrackedEntityAttribute attribute );
 
     /**
      * Get entityInstances who has the same representative
@@ -241,13 +274,13 @@
      * Register a new entityInstance
      * 
      * @param entityInstance TrackedEntityInstance
-     * @param representativeId The id of entityInstance who is representative
+     * @param representativeId The uid of entityInstance who is representative
      * @param relationshipTypeId The id of relationship type defined
      * @param attributeValues Set of attribute values
      * 
      * @return The error code after registering entityInstance
      */
-    int createTrackedEntityInstance( TrackedEntityInstance entityInstance, Integer representativeId,
+    int createTrackedEntityInstance( TrackedEntityInstance entityInstance, String representativeId,
         Integer relationshipTypeId, Set<TrackedEntityAttributeValue> attributeValues );
 
     /**
@@ -261,7 +294,7 @@
      * @param valuesForDelete The entityInstance attribute values for deleting
      * 
      */
-    void updateTrackedEntityInstance( TrackedEntityInstance entityInstance, Integer representativeId,
+    void updateTrackedEntityInstance( TrackedEntityInstance entityInstance, String representativeId,
         Integer relationshipTypeId, List<TrackedEntityAttributeValue> valuesForSave,
         List<TrackedEntityAttributeValue> valuesForUpdate, Collection<TrackedEntityAttributeValue> valuesForDelete );
 
@@ -273,7 +306,7 @@
      * 
      * @return The number of entityInstances
      */
-    int countGetTrackedEntityInstancesByOrgUnit( OrganisationUnit organisationUnit );
+    //int countGetTrackedEntityInstancesByOrgUnit( OrganisationUnit organisationUnit );
 
     /**
      * Get the number of entityInstances who registered into an organisation
@@ -284,7 +317,7 @@
      * 
      * @return The number of entityInstances
      */
-    int countGetTrackedEntityInstancesByOrgUnitProgram( OrganisationUnit organisationUnit, Program program );
+    //int countGetTrackedEntityInstancesByOrgUnitProgram( OrganisationUnit organisationUnit, Program program );
 
     /**
      * Cache value from String to the value type based on property
@@ -298,26 +331,6 @@
     Object getObjectValue( String property, String value, I18nFormat format );
 
     /**
-     * Get events which meet the criteria for searching
-     * 
-     * @param searchKeys The key for searching entityInstances by attribute
-     *        values and/or a program
-     * @param orgunit Organisation unit where entityInstances registered
-     * @param followup Only getting entityInstances with program risked if this
-     *        property is true. And getting entityInstances without program
-     *        risked if its value is false
-     * @param statusEnrollment The status of program of entityInstances. There
-     *        are three status, includes Active enrollments only, Completed
-     *        enrollments only and Active and completed enrollments
-     * @parma min
-     * @param max
-     * 
-     * @return List of entityInstance
-     */
-    List<Integer> getProgramStageInstances( List<String> searchKeys, Collection<OrganisationUnit> orgunit,
-        Boolean followup, Integer statusEnrollment, Integer min, Integer max );
-
-    /**
      * Search entityInstances by phone number (performs partial search)
      * 
      * @param phoneNumber The string for searching by phone number
@@ -326,7 +339,7 @@
      * 
      * @return List of entityInstance
      */
-    Collection<TrackedEntityInstance> getTrackedEntityInstancesByPhone( String phoneNumber, Integer min, Integer max );
+    //Collection<TrackedEntityInstance> getTrackedEntityInstancesByPhone( String phoneNumber, Integer min, Integer max );
 
     /**
      * Validate entityInstance attributes and validation criteria by program
@@ -364,8 +377,7 @@
      * @return TrackedEntityInstance List
      */
 
-    Collection<TrackedEntityInstance> searchTrackedEntityInstancesForMobile( String searchText, int orgUnitId,
-        int attributeId );
+    Collection<TrackedEntityInstance> searchTrackedEntityInstancesForMobile( String searchText, int orgUnitId, int attributeId );
 
     /**
      * Search entityInstances by entityInstance attribute value (performs
@@ -378,50 +390,8 @@
      * 
      * @return List of TrackedEntityInstance
      */
-    Collection<TrackedEntityInstance> getTrackedEntityInstancesByAttributeValue( String searchText, int attributeId,
-        Integer min, Integer max );
-
-    /**
-     * Search entityInstances by attribute values and/or a program which
-     * entityInstances enrolled into
-     * 
-     * @param searchKeys The key for searching entityInstances by attribute
-     *        values, identifiers and/or a program
-     * @param orgunit Organisation unit where entityInstances registered
-     * @param followup Only getting entityInstances with program risked if this
-     *        property is true. And getting entityInstances without program
-     *        risked if its value is false
-     * @param attributes The attribute values of these attribute are displayed
-     *        into result
-     * @param statusEnrollment The status of program of entityInstances. There
-     *        are three status, includes Active enrollments only, Completed
-     *        enrollments only and Active and completed enrollments
-     * @param min
-     * @param max
-     * 
-     * @return An object
-     */
-    Collection<TrackedEntityInstance> searchTrackedEntityInstances( List<String> searchKeys,
-        Collection<OrganisationUnit> orgunit, Boolean followup, Collection<TrackedEntityAttribute> attributes,
-        Integer statusEnrollment, Integer min, Integer max );
-
-    /**
-     * Get the number of entityInstances who meet the criteria for searching
-     * 
-     * @param searchKeys The key for searching entityInstances by attribute
-     *        values and/or a program
-     * @param orgunit Organisation unit where entityInstances registered
-     * @param followup Only getting entityInstances with program risked if this
-     *        property is true. And getting entityInstances without program
-     *        risked if its value is false
-     * @param statusEnrollment The status of program of entityInstances. There
-     *        are three status, includes Active enrollments only, Completed
-     *        enrollments only and Active and completed enrollments
-     * 
-     * @return The number of entityInstances
-     */
-    int countSearchTrackedEntityInstances( List<String> searchKeys, Collection<OrganisationUnit> orgunit,
-        Boolean followup, Integer statusEnrollment );
+    //Collection<TrackedEntityInstance> getTrackedEntityInstancesByAttributeValue( String searchText, int attributeId, Integer min, Integer max );
+
     /**
      * Get entityInstances by {@link TrackedEntity}
      * 
@@ -430,5 +400,4 @@
      * @return List of entityInstance
      */
     Collection<TrackedEntityInstance> getTrackedEntityInstances( TrackedEntity trackedEntity );
-
 }

=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceStore.java	2014-05-04 14:04:41 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceStore.java	2014-05-12 09:56:39 +0000
@@ -79,8 +79,7 @@
      * 
      * @return List of entityInstances
      */
-    Collection<TrackedEntityInstance> getByOrgUnitProgram( OrganisationUnit organisationUnit, Program program,
-        Integer min, Integer max );
+    Collection<TrackedEntityInstance> getByOrgUnitProgram( OrganisationUnit organisationUnit, Program program, Integer min, Integer max );
 
     /**
      * Search instances who has the same representative
@@ -99,7 +98,7 @@
      * 
      * @return The number of entityInstances
      */
-    int countListTrackedEntityInstanceByOrgunit( OrganisationUnit organisationUnit );
+    //int countListTrackedEntityInstanceByOrgunit( OrganisationUnit organisationUnit );
 
     /**
      * Get the number of entityInstances who registered into a certain
@@ -113,7 +112,7 @@
      * 
      * @return The number of entityInstances
      */
-    int countGetTrackedEntityInstancesByOrgUnitProgram( OrganisationUnit organisationUnit, Program program );
+    //int countGetTrackedEntityInstancesByOrgUnitProgram( OrganisationUnit organisationUnit, Program program );
 
     /**
      * Search entityInstances by phone number (performs partial search)
@@ -127,29 +126,6 @@
     Collection<TrackedEntityInstance> getByPhoneNumber( String phoneNumber, Integer min, Integer max );
 
     /**
-     * Search events which meet the criteria for searching
-     * 
-     * @param searchKeys The key for searching entityInstances by attribute
-     *        values and/or a program
-     * @param orgunit Organisation unit where entityInstances registered
-     * @param followup Only getting entityInstances with program risked if this
-     *        property is true. And getting entityInstances without program
-     *        risked if its value is false
-     * @param attributes The attribute values of these attribute are displayed
-     *        into result
-     * @param statusEnrollment The status of program of entityInstances. There
-     *        are three status, includes Active enrollments only, Completed
-     *        enrollments only and Active and completed enrollments
-     * @param min
-     * @param max
-     * 
-     * @return List of entityInstances
-     */
-    List<Integer> getProgramStageInstances( List<String> searchKeys, Collection<OrganisationUnit> orgunits,
-        Boolean followup, Collection<TrackedEntityAttribute> attributes, Integer statusEnrollment, Integer min,
-        Integer max );
-
-    /**
      * Search entityInstances who enrolled into a program with active status
      * 
      * @param program Program
@@ -158,7 +134,7 @@
      * 
      *        return List of entityInstances
      */
-    Collection<TrackedEntityInstance> getByProgram( Program program, Integer min, Integer max );
+    //Collection<TrackedEntityInstance> getByProgram( Program program, Integer min, Integer max );
 
     /**
      * Validate entity-instances attribute values and validation criteria by
@@ -198,48 +174,6 @@
      */
     Collection<TrackedEntityInstance> getByAttributeValue( String searchText, int attributeId, Integer min, Integer max );
 
-    /**
-     * Search entityInstances by attribute values and/or a program which
-     * entityInstances enrolled into
-     * 
-     * @param searchKeys The key for searching entityInstances by attribute
-     *        values, identifiers and/or a program
-     * @param orgunit Organisation unit where entityInstances registered
-     * @param followup Only getting entityInstances with program risked if this
-     *        property is true. And getting entityInstances without program
-     *        risked if its value is false
-     * @param attributes The attribute values of these attribute are displayed
-     *        into result
-     * @param statusEnrollment The status of program of entityInstances. There
-     *        are three status, includes Active enrollments only, Completed
-     *        enrollments only and Active and completed enrollments
-     * @param min
-     * @param max
-     * 
-     * @return An object
-     */
-    Collection<TrackedEntityInstance> search( List<String> searchKeys, Collection<OrganisationUnit> orgunits,
-        Boolean followup, Collection<TrackedEntityAttribute> attributes, Integer statusEnrollment, Integer min,
-        Integer max );
-
-    /**
-     * Get the number of entityInstances who meet the criteria for searching
-     * 
-     * @param searchKeys The key for searching entityInstances by attribute
-     *        values and/or a program
-     * @param orgunit Organisation unit where entityInstances registered
-     * @param followup Only getting entityInstances with program risked if this
-     *        property is true. And getting entityInstances without program
-     *        risked if its value is false
-     * @param statusEnrollment The status of program of entityInstances. There
-     *        are three status, includes Active enrollments only, Completed
-     *        enrollments only and Active and completed enrollments
-     * 
-     * @return The number of entityInstances
-     */
-    int countSearch( List<String> searchKeys, Collection<OrganisationUnit> orgunits, Boolean followup,
-        Integer statusEnrollment );
-
      /**
      * Get entityInstances by {@link TrackedEntity}
      * 

=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/AnalyticsTable.java'
--- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/AnalyticsTable.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/AnalyticsTable.java	2014-05-12 09:56:39 +0000
@@ -45,7 +45,11 @@
     private Period period;
     
     private Program program;
-    
+
+    // -------------------------------------------------------------------------
+    // Constructors
+    // -------------------------------------------------------------------------
+
     public AnalyticsTable()
     {
     }
@@ -70,7 +74,11 @@
         this.period = period;
         this.program = program;
     }
-    
+
+    // -------------------------------------------------------------------------
+    // Logic
+    // -------------------------------------------------------------------------
+
     public String getTableName()
     {
         String name = baseName;
@@ -104,13 +112,27 @@
         
         return name;
     }
+
+    public boolean hasPeriod()
+    {
+        return period != null;
+    }
+    
+    public boolean hasProgram()
+    {
+        return program != null;
+    }
     
     @Override
     public String toString()
     {
         return getTableName();
     }
-    
+
+    // -------------------------------------------------------------------------
+    // Getters and setters
+    // -------------------------------------------------------------------------
+
     public String getBaseName()
     {
         return baseName;

=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventAnalyticsService.java'
--- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventAnalyticsService.java	2014-03-27 11:13:02 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventAnalyticsService.java	2014-05-12 09:56:39 +0000
@@ -49,7 +49,8 @@
      * Used for aggregate query.
      */
     EventQueryParams getFromUrl( String program, String stage, String startDate, String endDate, 
-        Set<String> dimension, Set<String> filter, boolean skipMeta, boolean hierarchyMeta, SortOrder sortOrder, Integer limit, I18nFormat format );
+        Set<String> dimension, Set<String> filter, boolean skipMeta, boolean hierarchyMeta, SortOrder sortOrder, 
+        Integer limit, boolean uniqueInstances, I18nFormat format );
 
     /**
      * Used for event query.

=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryParams.java'
--- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryParams.java	2014-04-21 14:52:46 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/EventQueryParams.java	2014-05-12 09:56:39 +0000
@@ -80,6 +80,8 @@
     
     private Integer limit;
     
+    private boolean uniqueInstances;
+    
     private boolean coordinatesOnly;
     
     // -------------------------------------------------------------------------
@@ -123,6 +125,7 @@
         params.pageSize = this.pageSize;
         params.sortOrder = this.sortOrder;
         params.limit = this.limit;
+        params.uniqueInstances = this.uniqueInstances;
         params.coordinatesOnly = this.coordinatesOnly;
         
         params.periodType = this.periodType;
@@ -240,6 +243,24 @@
         return limit != null && limit > 0;
     }
     
+    /**
+     * Indicates whether the program of this query requires registration of
+     * tracked entity instances.
+     */
+    public boolean isProgramRegistration()
+    {
+        return program != null && program.isRegistration();
+    }
+    
+    /**
+     * Returns a negative integer in case of ascending sort order, a positive in
+     * case of descending sort order and 0 in case of no sort order.
+     */
+    public int getSortOrderAsInt()
+    {
+        return SortOrder.ASC.equals( sortOrder ) ? -1 : SortOrder.DESC.equals( sortOrder ) ? 1 : 0;
+    }
+    
     public String toString()
     {
         return "[" +
@@ -395,6 +416,16 @@
     {
         this.limit = limit;
     }
+    
+    public boolean isUniqueInstances()
+    {
+        return uniqueInstances;
+    }
+
+    public void setUniqueInstances( boolean uniqueInstances )
+    {
+        this.uniqueInstances = uniqueInstances;
+    }
 
     public boolean isCoordinatesOnly()
     {

=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventAnalyticsService.java'
--- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventAnalyticsService.java	2014-04-28 18:23:49 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/DefaultEventAnalyticsService.java	2014-05-12 09:56:39 +0000
@@ -62,6 +62,7 @@
 import org.hisp.dhis.common.Pager;
 import org.hisp.dhis.common.QueryFilter;
 import org.hisp.dhis.common.QueryItem;
+import org.hisp.dhis.common.QueryOperator;
 import org.hisp.dhis.dataelement.DataElement;
 import org.hisp.dhis.dataelement.DataElementService;
 import org.hisp.dhis.i18n.I18nFormat;
@@ -169,6 +170,20 @@
         {
             throw new IllegalQueryException( "Number of rows produced by query is larger than the max limit: " + MAX_ROWS_LIMIT );
         }
+
+        // ---------------------------------------------------------------------
+        // Limit and sort - done again due to potential multiple partitions
+        // ---------------------------------------------------------------------
+
+        if ( params.hasSortOrder() )
+        {            
+            grid.sortGrid( 1, params.getSortOrderAsInt() );
+        }
+        
+        if ( params.hasLimit() && grid.getHeight() > params.getLimit() )
+        {
+            grid.limitGrid( params.getLimit() );
+        }
         
         // ---------------------------------------------------------------------
         // Meta-data
@@ -280,14 +295,15 @@
     }
 
     public EventQueryParams getFromUrl( String program, String stage, String startDate, String endDate,
-        Set<String> dimension, Set<String> filter, boolean skipMeta, boolean hierarchyMeta, SortOrder sortOrder, Integer limit,
-        I18nFormat format )
+        Set<String> dimension, Set<String> filter, boolean skipMeta, boolean hierarchyMeta, SortOrder sortOrder, 
+        Integer limit, boolean uniqueInstances, I18nFormat format )
     {
         EventQueryParams params = getFromUrl( program, stage, startDate, endDate, dimension, filter, null, null, null,
             skipMeta, hierarchyMeta, false, null, null, format );
         
         params.setSortOrder( sortOrder );
         params.setLimit( limit );
+        params.setUniqueInstances( uniqueInstances );
         params.setAggregate( true );
 
         return params;
@@ -426,7 +442,8 @@
         {   
             for ( int i = 1; i < split.length; i += 2 )
             {
-                queryItem.getFilters().add( new QueryFilter( split[i], split[i+1] ) );
+                QueryOperator operator = QueryOperator.fromString( split[i] );
+                queryItem.getFilters().add( new QueryFilter( operator, split[i+1] ) );
             }
         }
 

=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/JdbcEventAnalyticsManager.java'
--- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/JdbcEventAnalyticsManager.java	2014-04-21 14:52:46 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/event/data/JdbcEventAnalyticsManager.java	2014-05-12 09:56:39 +0000
@@ -84,7 +84,9 @@
 
     public Grid getAggregatedEventData( EventQueryParams params, Grid grid )
     {
-        String sql = "select count(psi) as value," + getSelectColumns( params ) + " ";
+        String countClause = ( params.isProgramRegistration() && params.isUniqueInstances() ) ? "count(distinct tei)" : "count(psi)";
+        
+        String sql = "select " + countClause + " as value," + getSelectColumns( params ) + " ";
 
         // ---------------------------------------------------------------------
         // Criteria
@@ -269,7 +271,14 @@
     {
         String sql = "select count(psi) ";
         
-        sql += getFromWhereClause( params, params.getPartitions().getSinglePartition() );
+        if ( params.spansMultiplePartitions() )
+        {
+            sql += getFromWhereMultiplePartitionsClause( params, Arrays.asList( "psi" ) );
+        }
+        else
+        {
+            sql += getFromWhereClause( params, params.getPartitions().getSinglePartition() );
+        }
         
         int count = 0;
         
@@ -325,13 +334,11 @@
 
     private String getFromWhereMultiplePartitionsClause( EventQueryParams params, List<String> fixedColumns )
     {
-        String fixedCols = getSelectString( fixedColumns );
-        
         String sql = "from (";
         
         for ( String partition : params.getPartitions().getPartitions() )
         {
-            sql += "select " + fixedCols + getSelectColumns( params );
+            sql += "select " + getSelectString( fixedColumns ) + getSelectColumns( params );
             
             sql += " " + getFromWhereClause( params, partition );
             
@@ -441,6 +448,11 @@
      */
     private String getSelectString( List<String> columns )
     {
+        if ( columns == null || columns.isEmpty() )
+        {
+            return "";
+        }
+        
         String fixedCols = StringUtils.join( columns, ", " );
         
         return StringUtils.defaultIfEmpty( fixedCols + ", ", fixedCols );

=== modified file 'dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcEventAnalyticsTableManager.java'
--- dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcEventAnalyticsTableManager.java	2014-04-07 14:27:23 +0000
+++ dhis-2/dhis-services/dhis-service-analytics/src/main/java/org/hisp/dhis/analytics/table/JdbcEventAnalyticsTableManager.java	2014-05-12 09:56:39 +0000
@@ -160,17 +160,19 @@
 
             sql = removeLast( sql, 1 ) + " ";
 
-            sql += "from programstageinstance psi "
-                + "left join programinstance pi on psi.programinstanceid=pi.programinstanceid "
-                + "left join programstage ps on psi.programstageid=ps.programstageid "
-                + "left join program pr on pi.programid=pr.programid "
-                + "left join trackedentityinstance pa on pi.trackedentityinstanceid=pa.trackedentityinstanceid "
-                + "left join organisationunit ou on psi.organisationunitid=ou.organisationunitid "
-                + "left join _orgunitstructure ous on psi.organisationunitid=ous.organisationunitid "
-                + "left join _dateperiodstructure dps on psi.executiondate=dps.dateperiod "
-                + "where psi.executiondate >= '" + start + "' " + "and psi.executiondate <= '" + end + "' "
-                + "and pr.programid=" + table.getProgram().getId() + " " + "and psi.organisationunitid is not null "
-                + "and psi.executiondate is not null";
+            sql += "from programstageinstance psi " +
+                "left join programinstance pi on psi.programinstanceid=pi.programinstanceid " +
+                "left join programstage ps on psi.programstageid=ps.programstageid " +
+                "left join program pr on pi.programid=pr.programid " +
+                "left join trackedentityinstance tei on pi.trackedentityinstanceid=tei.trackedentityinstanceid " +
+                "left join organisationunit ou on psi.organisationunitid=ou.organisationunitid " +
+                "left join _orgunitstructure ous on psi.organisationunitid=ous.organisationunitid " +
+                "left join _dateperiodstructure dps on psi.executiondate=dps.dateperiod " +
+                "where psi.executiondate >= '" + start + "' " + 
+                "and psi.executiondate <= '" + end + "' " +
+                "and pr.programid=" + table.getProgram().getId() + " " + 
+                "and psi.organisationunitid is not null " +
+                "and psi.executiondate is not null";
 
             log.info( "Populate SQL: " + sql );
 
@@ -246,6 +248,12 @@
 
         columns.addAll( Arrays.asList( psi, ps, ed, longitude, latitude, ou, oun, ouc ) );
 
+        if ( table.hasProgram() && table.getProgram().isRegistration() )
+        {
+            String[] tei = { quote( "tei" ), "character(11)", "tei.uid" };
+            columns.add( tei );
+        }
+        
         return columns;
     }
 

=== modified file 'dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/message/EmailMessageSender.java'
--- dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/message/EmailMessageSender.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-core/src/main/java/org/hisp/dhis/message/EmailMessageSender.java	2014-05-12 09:56:39 +0000
@@ -30,8 +30,6 @@
 
 import static org.hisp.dhis.user.UserSettingService.KEY_MESSAGE_EMAIL_NOTIFICATION;
 
-import java.io.Serializable;
-import java.util.Map;
 import java.util.Set;
 
 import org.apache.commons.lang.StringUtils;
@@ -104,8 +102,6 @@
             ( sender.getEmail() != null ? ( sender.getEmail() + LB ) : StringUtils.EMPTY ) +
             ( sender.getPhoneNumber() != null ? ( sender.getPhoneNumber() + LB ) : StringUtils.EMPTY ) );
         
-        Map<User, Serializable> settings = userService.getUserSettings( KEY_MESSAGE_EMAIL_NOTIFICATION, false );
-
         try
         {
             Email email = getEmail( hostName, port, username, password, tls );
@@ -116,7 +112,7 @@
             
             for ( User user : users )
             {
-                boolean emailNotification = settings.get( user ) != null && (Boolean) settings.get( user ) == true;
+                boolean emailNotification = (Boolean) userService.getUserSettingValue( user, KEY_MESSAGE_EMAIL_NOTIFICATION, false );
                 
                 boolean doSend = forceSend || emailNotification;
     
@@ -124,7 +120,7 @@
                 {
                     email.addBcc( user.getEmail() );
                     
-                    log.info( "Sending email to user: " + user + " with email address: " + user.getEmail() );
+                    log.info( "Sending email to user: " + user.getUsername() + " with email address: " + user.getEmail() );
                     
                     hasRecipients = true;
                 }

=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/enrollment/AbstractEnrollmentService.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/enrollment/AbstractEnrollmentService.java	2014-04-15 03:54:06 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/enrollment/AbstractEnrollmentService.java	2014-05-12 09:56:39 +0000
@@ -30,10 +30,12 @@
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
+
 import org.hisp.dhis.common.Grid;
 import org.hisp.dhis.common.IdentifiableObjectManager;
 import org.hisp.dhis.common.OrganisationUnitSelectionMode;
 import org.hisp.dhis.common.QueryItem;
+import org.hisp.dhis.common.QueryOperator;
 import org.hisp.dhis.dxf2.events.trackedentity.Attribute;
 import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstance;
 import org.hisp.dhis.dxf2.events.trackedentity.TrackedEntityInstanceService;
@@ -218,9 +220,6 @@
 
         for ( ProgramInstance programInstance : programInstances )
         {
-            // check for null, both for pi, and for pi.entityInstance, there are DBs
-            // out there where trackedentityinstanceid == null
-            // even if the program is of type 1/2.
             if ( programInstance != null && programInstance.getEntityInstance() != null )
             {
                 enrollments.getEnrollments().add( getEnrollment( programInstance ) );
@@ -503,17 +502,17 @@
 
         TrackedEntityInstanceQueryParams params = new TrackedEntityInstanceQueryParams();
 
-        QueryItem queryItem = new QueryItem( attribute, "eq", value, false );
-        params.getAttributes().add( queryItem );
+        QueryItem queryItem = new QueryItem( attribute, QueryOperator.EQ, value, false );
+        params.addAttribute( queryItem );
 
         if ( attribute.getOrgunitScope() && attribute.getProgramScope() )
         {
             params.setProgram( program );
-            params.getOrganisationUnits().add( organisationUnit );
+            params.addOrganisationUnit( organisationUnit );
         }
         else if ( attribute.getOrgunitScope() )
         {
-            params.getOrganisationUnits().add( organisationUnit );
+            params.addOrganisationUnit( organisationUnit );
         }
         else if ( attribute.getProgramScope() )
         {

=== modified file 'dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/trackedentity/AbstractTrackedEntityInstanceService.java'
--- dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/trackedentity/AbstractTrackedEntityInstanceService.java	2014-04-15 03:54:06 +0000
+++ dhis-2/dhis-services/dhis-service-dxf2/src/main/java/org/hisp/dhis/dxf2/events/trackedentity/AbstractTrackedEntityInstanceService.java	2014-05-12 09:56:39 +0000
@@ -29,10 +29,12 @@
  */
 
 import com.google.common.collect.Lists;
+
 import org.hisp.dhis.common.Grid;
 import org.hisp.dhis.common.IdentifiableObjectManager;
 import org.hisp.dhis.common.OrganisationUnitSelectionMode;
 import org.hisp.dhis.common.QueryItem;
+import org.hisp.dhis.common.QueryOperator;
 import org.hisp.dhis.dxf2.importsummary.ImportConflict;
 import org.hisp.dhis.dxf2.importsummary.ImportStatus;
 import org.hisp.dhis.dxf2.importsummary.ImportSummary;
@@ -338,8 +340,8 @@
 
         TrackedEntityInstanceQueryParams params = new TrackedEntityInstanceQueryParams();
 
-        QueryItem queryItem = new QueryItem( attribute, "eq", value, false );
-        params.getAttributes().add( queryItem );
+        QueryItem queryItem = new QueryItem( attribute, QueryOperator.EQ, value, false );
+        params.addAttribute( queryItem );
 
         if ( attribute.getOrgunitScope() )
         {

=== modified file 'dhis-2/dhis-services/dhis-service-i18n/src/main/resources/i18n_global.properties'
--- dhis-2/dhis-services/dhis-service-i18n/src/main/resources/i18n_global.properties	2014-05-06 09:20:18 +0000
+++ dhis-2/dhis-services/dhis-service-i18n/src/main/resources/i18n_global.properties	2014-05-12 09:56:39 +0000
@@ -829,7 +829,7 @@
 app_draggable_description=Items are draggable to change their order, so it's easy to customize your favorite apps.
 app_order_custom=My own order
 app_order_name_alpha=Alphabetical
-app_search_placeholder=Search in apps
+app_search_placeholder=Search apps
 
 #-- calendars ------------------------------------------------------------------#
 

=== modified file 'dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/DefaultImportService.java'
--- dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/DefaultImportService.java	2014-05-05 18:01:22 +0000
+++ dhis-2/dhis-services/dhis-service-importexport/src/main/java/org/hisp/dhis/importexport/DefaultImportService.java	2014-05-12 09:56:39 +0000
@@ -123,7 +123,7 @@
                 log.info( "Saved zipstream to file: " + tempZipFile.getAbsolutePath() );
 
                 zipFile = new ZipFile( tempZipFile );
-
+                
                 xmlDataStream = new BufferedInputStream( ZipAnalyzer.getTransformableStream( zipFile ) );
 
             }

=== modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/ActivityReportingService.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/ActivityReportingService.java	2014-05-05 10:16:05 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/ActivityReportingService.java	2014-05-12 09:56:39 +0000
@@ -35,6 +35,7 @@
 import org.hisp.dhis.api.mobile.model.ActivityValue;
 import org.hisp.dhis.api.mobile.model.Message;
 import org.hisp.dhis.api.mobile.model.PatientAttribute;
+import org.hisp.dhis.api.mobile.model.User;
 import org.hisp.dhis.api.mobile.model.LWUITmodel.LostEvent;
 import org.hisp.dhis.api.mobile.model.LWUITmodel.Notification;
 import org.hisp.dhis.api.mobile.model.LWUITmodel.Patient;
@@ -106,4 +107,7 @@
     public String sendFeedback( Message message )
         throws NotAllowedException;
 
+    public Collection<User> findUser( String keyword )
+        throws NotAllowedException;
+
 }

=== modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/LWUITmodel/Patient.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/LWUITmodel/Patient.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/LWUITmodel/Patient.java	2014-05-12 09:56:39 +0000
@@ -49,6 +49,8 @@
     private int id;
     
     private String organisationUnitName;
+    
+    private String trackedEntityName;
 
     private List<PatientAttribute> attributes = new ArrayList<PatientAttribute>();
 
@@ -113,6 +115,16 @@
         this.organisationUnitName = organisationUnitName;
     }
     
+    public String getTrackedEntityName()
+    {
+        return trackedEntityName;
+    }
+    
+    public void setTrackedEntityName( String trackedEntityName )
+    {
+        this.trackedEntityName = trackedEntityName;
+    }
+    
     public List<ProgramInstance> getEnrollmentPrograms()
     {
         return enrollmentPrograms;
@@ -146,6 +158,7 @@
 
         dout.writeInt( this.getId() );
         dout.writeUTF( this.getOrganisationUnitName() );
+        dout.writeUTF( this.getTrackedEntityName() );
 
         // Write Patient Attribute
         dout.writeInt( attributes.size() );
@@ -185,6 +198,7 @@
     {
         this.setId( din.readInt() );
         this.setOrganisationUnitName( din.readUTF() );
+        this.setTrackedEntityName( din.readUTF() );
 
         // Read Attribute
         int attsNumb = din.readInt();

=== modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/MobileOrgUnitLinks.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/MobileOrgUnitLinks.java	2014-05-05 10:16:05 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/MobileOrgUnitLinks.java	2014-05-12 09:56:39 +0000
@@ -67,6 +67,8 @@
 
     private String sendFeedbackUrl;
 
+    private String findUserUrl;
+
     private String updateContactUrl;
 
     private String findPatientUrl;
@@ -227,6 +229,16 @@
         this.sendFeedbackUrl = sendFeedbackUrl;
     }
 
+    public String getFindUserUrl()
+    {
+        return findUserUrl;
+    }
+
+    public void setFindUserUrl( String findUserUrl )
+    {
+        this.findUserUrl = findUserUrl;
+    }
+
     public String getUpdateContactUrl()
     {
         return updateContactUrl;
@@ -382,6 +394,7 @@
         dataOutputStream.writeUTF( searchUrl );
         dataOutputStream.writeUTF( updateNewVersionUrl );
         dataOutputStream.writeUTF( sendFeedbackUrl );
+        dataOutputStream.writeUTF( findUserUrl );
         dataOutputStream.writeUTF( updateContactUrl );
         dataOutputStream.writeUTF( findPatientUrl );
         dataOutputStream.writeUTF( registerPersonUrl );
@@ -396,7 +409,6 @@
         dataOutputStream.writeUTF( handleLostToFollowUpUrl );
         dataOutputStream.writeUTF( generateRepeatableEventUrl );
         dataOutputStream.writeUTF( uploadSingleEventWithoutRegistration );
-   
 
     }
 
@@ -415,6 +427,7 @@
         searchUrl = dataInputStream.readUTF();
         updateNewVersionUrl = dataInputStream.readUTF();
         sendFeedbackUrl = dataInputStream.readUTF();
+        findUserUrl = dataInputStream.readUTF();
         updateContactUrl = dataInputStream.readUTF();
         findPatientUrl = dataInputStream.readUTF();
         registerPersonUrl = dataInputStream.readUTF();
@@ -464,6 +477,7 @@
         dataOutputStream.writeUTF( this.searchUrl );
         dataOutputStream.writeUTF( this.updateNewVersionUrl );
         dataOutputStream.writeUTF( this.sendFeedbackUrl );
+        dataOutputStream.writeUTF( this.findUserUrl );
         // dataOutputStream.writeUTF( this.updateContactUrl );
     }
 
@@ -483,6 +497,7 @@
         dataOutputStream.writeUTF( searchUrl );
         dataOutputStream.writeUTF( updateNewVersionUrl );
         dataOutputStream.writeUTF( sendFeedbackUrl );
+        dataOutputStream.writeUTF( findUserUrl );
         dataOutputStream.writeUTF( updateContactUrl );
         dataOutputStream.writeUTF( findPatientUrl );
         dataOutputStream.writeUTF( registerPersonUrl );

=== added file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/Recipient.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/Recipient.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/Recipient.java	2014-05-12 09:56:39 +0000
@@ -0,0 +1,125 @@
+package org.hisp.dhis.api.mobile.model;
+
+/*
+ * Copyright (c) 2004-2014, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.Collection;
+
+public class Recipient
+    implements DataStreamSerializable
+{
+    private String clientVersion;
+
+    private Collection<User> users;
+
+    public String getClientVersion()
+    {
+        return clientVersion;
+    }
+
+    public void setClientVersion( String clientVersion )
+    {
+        this.clientVersion = clientVersion;
+    }
+
+    public Collection<User> getUsers()
+    {
+        return users;
+    }
+
+    public void setUsers( Collection<User> users )
+    {
+        this.users = users;
+    }
+
+    @Override
+    public void serialize( DataOutputStream dout )
+        throws IOException
+    {
+        if ( users == null )
+        {
+            dout.writeInt( 0 );
+        }
+        else
+        {
+            dout.writeInt( users.size() );
+            for ( User user : users )
+            {
+                user.setClientVersion( DataStreamSerializable.TWO_POINT_TEN );
+                user.serialize( dout );
+            }
+        }
+
+    }
+
+    @Override
+    public void deSerialize( DataInputStream dataInputStream )
+        throws IOException
+    {
+
+    }
+
+    @Override
+    public void serializeVersion2_8( DataOutputStream dataOutputStream )
+        throws IOException
+    {
+
+    }
+
+    @Override
+    public void serializeVersion2_9( DataOutputStream dataOutputStream )
+        throws IOException
+    {
+
+    }
+
+    @Override
+    public void serializeVersion2_10( DataOutputStream dout )
+        throws IOException
+    {
+       
+        if ( users == null )
+        {
+            dout.writeInt( 0 );
+        }
+        else
+        {
+            dout.writeInt( users.size() );
+            for ( User user : users )
+            {
+                user.setClientVersion( DataStreamSerializable.TWO_POINT_TEN );
+                user.serialize( dout );
+            }
+        }
+
+    }
+
+}

=== added file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/User.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/User.java	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/api/mobile/model/User.java	2014-05-12 09:56:39 +0000
@@ -0,0 +1,131 @@
+package org.hisp.dhis.api.mobile.model;
+
+/*
+ * Copyright (c) 2004-2014, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+
+import javax.xml.bind.annotation.XmlAttribute;
+
+public class User
+    implements DataStreamSerializable
+{
+    private String clientVersion;
+
+    private String surname;
+
+    private String firstName;
+
+    public User()
+    {
+    }
+
+    public User( String surname, String firstName )
+    {
+        super();
+        this.surname = surname;
+        this.firstName = firstName;
+    }
+
+    public String getClientVersion()
+    {
+        return clientVersion;
+    }
+
+    public void setClientVersion( String clientVersion )
+    {
+        this.clientVersion = clientVersion;
+    }
+
+    @XmlAttribute
+    public String getSurname()
+    {
+        return surname;
+    }
+
+    public void setSurname( String surname )
+    {
+        this.surname = surname;
+    }
+
+    @XmlAttribute
+    public String getFirstName()
+    {
+        return firstName;
+    }
+
+    public void setFirstName( String firstName )
+    {
+        this.firstName = firstName;
+    }
+
+    @Override
+    public void serialize( DataOutputStream dout )
+        throws IOException
+    {
+        dout.writeUTF( this.surname );
+        dout.writeUTF( this.firstName );
+
+    }
+
+    @Override
+    public void deSerialize( DataInputStream din )
+        throws IOException
+    {
+        surname = din.readUTF();
+        firstName = din.readUTF();
+    }
+
+    @Override
+    public void serializeVersion2_8( DataOutputStream dout )
+        throws IOException
+    {
+        dout.writeUTF( this.surname );
+        dout.writeUTF( this.firstName );
+    }
+
+    @Override
+    public void serializeVersion2_9( DataOutputStream dout )
+        throws IOException
+    {
+        dout.writeUTF( this.surname );
+        dout.writeUTF( this.firstName );
+    }
+
+    @Override
+    public void serializeVersion2_10( DataOutputStream dout )
+        throws IOException
+    {
+        dout.writeUTF( this.surname );
+        dout.writeUTF( this.firstName );
+
+    }
+
+}

=== modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/mobile/service/ActivityReportingServiceImpl.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/mobile/service/ActivityReportingServiceImpl.java	2014-05-05 10:16:05 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/main/java/org/hisp/dhis/mobile/service/ActivityReportingServiceImpl.java	2014-05-12 09:56:39 +0000
@@ -59,8 +59,11 @@
 import org.hisp.dhis.api.mobile.model.LWUITmodel.Notification;
 import org.hisp.dhis.api.mobile.model.LWUITmodel.Section;
 import org.hisp.dhis.api.mobile.model.comparator.ActivityComparator;
+import org.hisp.dhis.common.Grid;
+import org.hisp.dhis.common.QueryItem;
 import org.hisp.dhis.dataelement.DataElement;
 import org.hisp.dhis.dataelement.DataElementService;
+import org.hisp.dhis.event.EventStatus;
 import org.hisp.dhis.message.Message;
 import org.hisp.dhis.message.MessageConversation;
 import org.hisp.dhis.message.MessageService;
@@ -88,6 +91,7 @@
 import org.hisp.dhis.trackedentity.TrackedEntityAttribute;
 import org.hisp.dhis.trackedentity.TrackedEntityAttributeService;
 import org.hisp.dhis.trackedentity.TrackedEntityInstance;
+import org.hisp.dhis.trackedentity.TrackedEntityInstanceQueryParams;
 import org.hisp.dhis.trackedentity.TrackedEntityInstanceService;
 import org.hisp.dhis.trackedentity.TrackedEntityMobileSetting;
 import org.hisp.dhis.trackedentityattributevalue.TrackedEntityAttributeValue;
@@ -96,6 +100,7 @@
 import org.hisp.dhis.trackedentitydatavalue.TrackedEntityDataValueService;
 import org.hisp.dhis.user.CurrentUserService;
 import org.hisp.dhis.user.User;
+import org.hisp.dhis.user.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Required;
 
@@ -150,6 +155,8 @@
 
     private TrackedEntityAttributeService attributeService;
 
+    private UserService userService;
+
     private Integer patientId;
 
     @Autowired
@@ -250,6 +257,12 @@
         this.programService = programService;
     }
 
+    @Required
+    public void setUserService( UserService userService )
+    {
+        this.userService = userService;
+    }
+
     // -------------------------------------------------------------------------
     // MobileDataSetService
     // -------------------------------------------------------------------------
@@ -301,15 +314,23 @@
     {
 
         List<Activity> items = new ArrayList<Activity>();
-        Collection<TrackedEntityInstance> patients = entityInstanceService.getTrackedEntityInstances( unit, 0,
-            Integer.MAX_VALUE );
-
-        for ( TrackedEntityInstance patient : patients )
+
+        TrackedEntityInstanceQueryParams param = new TrackedEntityInstanceQueryParams();
+        param.addOrganisationUnit( unit );
+
+        Grid trackedEntityDrid = entityInstanceService.getTrackedEntityInstances( param );
+        List<List<Object>> listOfListProgramStageInstance = trackedEntityDrid.getRows();
+
+        for ( List<Object> listProgramStageInstance : listOfListProgramStageInstance )
         {
-            for ( ProgramStageInstance programStageInstance : programStageInstanceService.getProgramStageInstances(
-                patient, false ) )
+            for ( Object obj : listProgramStageInstance )
             {
-                items.add( getActivity( programStageInstance, false ) );
+                TrackedEntityInstance patient = (TrackedEntityInstance) obj;
+                for ( ProgramStageInstance programStageInstance : programStageInstanceService.getProgramStageInstances(
+                    patient, false ) )
+                {
+                    items.add( getActivity( programStageInstance, false ) );
+                }
             }
         }
 
@@ -411,13 +432,6 @@
 
         for ( TrackedEntityInstance patient : patients )
         {
-            System.out.println( "----------------------------------------------------------------------------" );
-            System.out.println( "Display Name: " + patient.getDisplayName() );
-            System.out.println( "Name: " + patient.getName() );
-            System.out.println( "Tracked Entity Display Name: " + patient.getTrackedEntity().getDisplayName() );
-            System.out.println( "Tracked Entity Name: " + patient.getTrackedEntity().getName() );
-            System.out.println( "----------------------------------------------------------------------------" );
-
             resultSet += patient.getId() + "/";
             String attText = "";
             for ( TrackedEntityAttribute displayAttribute : displayAttributes )
@@ -763,6 +777,15 @@
             patientModel.setOrganisationUnitName( patient.getOrganisationUnit().getName() );
         }
 
+        if ( patient.getTrackedEntity() != null )
+        {
+            patientModel.setTrackedEntityName( patient.getTrackedEntity().getName() );
+        }
+        else
+        {
+            patientModel.setTrackedEntityName( "" );
+        }
+
         this.setSetting( getSettings() );
 
         List<TrackedEntityAttributeValue> atts = new ArrayList<TrackedEntityAttributeValue>(
@@ -1552,24 +1575,25 @@
         }
 
         Set<TrackedEntity> trackedentities = new HashSet<TrackedEntity>();
-        for ( TrackedEntityInstance patient : patients)
+        for ( TrackedEntityInstance patient : patients )
         {
-            if (patient.getTrackedEntity() != null)
+            if ( patient.getTrackedEntity() != null )
             {
                 trackedentities.add( patient.getTrackedEntity() );
             }
         }
-        
+
         String resultSet = "";
 
         Collection<TrackedEntityAttribute> displayAttributes = attributeService
             .getTrackedEntityAttributesDisplayInList( true );
-        for ( TrackedEntity trackedentity : trackedentities)
+        for ( TrackedEntity trackedentity : trackedentities )
         {
             resultSet += trackedentity.getDisplayName() + "$";
             for ( TrackedEntityInstance patient : patients )
             {
-                if(patient.getTrackedEntity()!=null && patient.getTrackedEntity().getId()==trackedentity.getId()) {
+                if ( patient.getTrackedEntity() != null && patient.getTrackedEntity().getId() == trackedentity.getId() )
+                {
                     resultSet += patient.getId() + "/";
                     String attText = "";
                     for ( TrackedEntityAttribute displayAttribute : displayAttributes )
@@ -1586,6 +1610,28 @@
                 }
             }
         }
+        
+        //get tracked entity with no tracked entity name
+        resultSet += "Others$";
+        for ( TrackedEntityInstance patient : patients )
+        {
+            if ( patient.getTrackedEntity() == null)
+            {
+                resultSet += patient.getId() + "/";
+                String attText = "";
+                for ( TrackedEntityAttribute displayAttribute : displayAttributes )
+                {
+                    TrackedEntityAttributeValue value = attValueService.getTrackedEntityAttributeValue( patient,
+                        displayAttribute );
+                    if ( value != null )
+                    {
+                        attText += value.getValue() + " ";
+                    }
+                }
+                attText = attText.trim();
+                resultSet += attText + "$";
+            }
+        }
         return resultSet;
     }
 
@@ -1595,35 +1641,19 @@
     {
         String[] searchEventInfosArray = searchEventInfos.split( "-" );
 
-        int programStageStatus = 0;
+        EventStatus eventStatus = EventStatus.ACTIVE;
 
         if ( searchEventInfosArray[1].equalsIgnoreCase( "Scheduled in future" ) )
         {
-            programStageStatus = ProgramStageInstance.FUTURE_VISIT_STATUS;
+            eventStatus = EventStatus.FUTURE_VISIT;
         }
         else if ( searchEventInfosArray[1].equalsIgnoreCase( "Overdue" ) )
         {
-            programStageStatus = ProgramStageInstance.LATE_VISIT_STATUS;
-        }
-
-        boolean followUp;
-
-        if ( searchEventInfosArray[2].equalsIgnoreCase( "true" ) )
-        {
-            followUp = true;
-        }
-        else
-        {
-            followUp = false;
+            eventStatus = EventStatus.LATE_VISIT;
         }
 
         String eventsInfo = "";
 
-        DateFormat formatter = new SimpleDateFormat( "yyyy-MM-dd" );
-
-        List<String> searchTextList = new ArrayList<String>();
-        Collection<OrganisationUnit> orgUnitList = new HashSet<OrganisationUnit>();
-
         Calendar toCalendar = new GregorianCalendar();
         toCalendar.add( Calendar.DATE, -1 );
         toCalendar.add( Calendar.YEAR, 100 );
@@ -1635,29 +1665,41 @@
 
         Date fromDate = fromCalendar.getTime();
 
-        String searchText = TrackedEntityInstance.PREFIX_PROGRAM_EVENT_BY_STATUS + "_" + searchEventInfosArray[0] + "_"
-            + formatter.format( fromDate ) + "_" + formatter.format( toDate ) + "_" + orgUnitId + "_" + true + "_"
-            + programStageStatus;
-
-        searchTextList.add( searchText );
-        orgUnitList.add( organisationUnitService.getOrganisationUnit( orgUnitId ) );
-        List<Integer> stageInstanceIds = entityInstanceService.getProgramStageInstances( searchTextList, orgUnitList,
-            followUp, ProgramInstance.STATUS_ACTIVE, null, null );
-
-        if ( stageInstanceIds.size() == 0 )
+        TrackedEntityInstanceQueryParams param = new TrackedEntityInstanceQueryParams();
+        List<TrackedEntityAttribute> trackedEntityAttributeList = new ArrayList<TrackedEntityAttribute>(
+            attributeService.getTrackedEntityAttributesByDisplayOnVisitSchedule( true ) );
+
+        for ( TrackedEntityAttribute trackedEntityAttribute : trackedEntityAttributeList )
+        {
+            QueryItem queryItem = new QueryItem( trackedEntityAttribute );
+            param.addAttribute( queryItem );
+        }
+
+        param.addOrganisationUnit( organisationUnitService.getOrganisationUnit( orgUnitId ) );
+        param.setEventStatus( eventStatus );
+        param.setEventStartDate( fromDate );
+        param.setEventEndDate( toDate );
+
+        Grid programStageInstanceGrid = entityInstanceService.getTrackedEntityInstances( param );
+        List<List<Object>> rows = programStageInstanceGrid.getRows();
+
+        if ( rows.size() == 0 )
         {
             throw NotAllowedException.NO_EVENT_FOUND;
         }
-        else if ( stageInstanceIds.size() > 0 )
+        else if ( rows.size() > 0 )
         {
-            for ( Integer stageInstanceId : stageInstanceIds )
+            for ( List<Object> row : rows )
             {
-                ProgramStageInstance programStageInstance = programStageInstanceService
-                    .getProgramStageInstance( stageInstanceId );
-                TrackedEntityInstance patient = programStageInstance.getProgramInstance().getEntityInstance();
-                eventsInfo += programStageInstance.getId() + "/" + patient.getName() + ", "
-                    + programStageInstance.getProgramStage().getName() + "("
-                    + formatter.format( programStageInstance.getDueDate() ) + ")" + "$";
+                for ( int i = 5; i < row.size(); i++ )
+                {
+                    eventsInfo += row.get( i ) + "/";
+                    if ( i == row.size() - 1 )
+                    {
+                        eventsInfo += "$";
+                    }
+                }
+
             }
 
             throw new NotAllowedException( eventsInfo );
@@ -1666,6 +1708,7 @@
         {
             return "";
         }
+
     }
 
     @SuppressWarnings( "finally" )
@@ -1867,4 +1910,37 @@
 
         return FEEDBACK_SENT;
     }
+
+    @Override
+    public Collection<org.hisp.dhis.api.mobile.model.User> findUser( String keyword )
+        throws NotAllowedException
+    {
+        Collection<User> users = new HashSet<User>();
+
+        Collection<org.hisp.dhis.api.mobile.model.User> userList = new HashSet<org.hisp.dhis.api.mobile.model.User>();
+
+        if ( keyword != null )
+        {
+            int index = keyword.indexOf( ' ' );
+
+            if ( index != -1 && index == keyword.lastIndexOf( ' ' ) )
+            {
+                String[] keys = keyword.split( " " );
+                keyword = keys[0] + "  " + keys[1];
+            }
+        }
+
+        users = userService.getUsersByName( keyword );
+
+        for ( User userCore : users )
+        {
+            org.hisp.dhis.api.mobile.model.User user = new org.hisp.dhis.api.mobile.model.User();
+            user.setSurname( userCore.getSurname() );
+            user.setFirstName( userCore.getFirstName() );
+            userList.add( user );
+
+        }
+
+        return userList;
+    }
 }
\ No newline at end of file

=== modified file 'dhis-2/dhis-services/dhis-service-mobile/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-services/dhis-service-mobile/src/main/resources/META-INF/dhis/beans.xml	2014-03-26 19:40:22 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/main/resources/META-INF/dhis/beans.xml	2014-05-12 09:56:39 +0000
@@ -1,52 +1,70 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans";
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd";>
-
-  <!-- Services -->
-
-  <bean id="org.hisp.dhis.mobile.api.FacilityReportingService" class="org.hisp.dhis.mobile.service.FacilityReportingServiceImpl">
-    <property name="dataSetService" ref="org.hisp.dhis.dataset.DataSetService" />
-    <property name="i18nService" ref="org.hisp.dhis.i18n.I18nService" />
-    <property name="periodService" ref="org.hisp.dhis.period.PeriodService" />
-    <property name="categoryService" ref="org.hisp.dhis.dataelement.DataElementCategoryService" />
-    <property name="dataValueService" ref="org.hisp.dhis.datavalue.DataValueService" />
-    <property name="registrationService" ref="org.hisp.dhis.dataset.CompleteDataSetRegistrationService" />
-    <property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
-    <property name="oUnitService" ref="org.hisp.dhis.organisationunit.OrganisationUnitService" />
-  </bean>
-
-  <bean id="org.hisp.dhis.mobile.api.ActivityReportingService" class="org.hisp.dhis.mobile.service.ActivityReportingServiceImpl">
-    <property name="attValueService" ref="org.hisp.dhis.trackedentityattributevalue.TrackedEntityAttributeValueService" />
-    <property name="programStageInstanceService" ref="org.hisp.dhis.program.ProgramStageInstanceService" />
-    <property name="mobileSettingService" ref="org.hisp.dhis.api.mobile.TrackedEntityMobileSettingService" />
-    <property name="programStageSectionService" ref="org.hisp.dhis.program.ProgramStageSectionService" />
-    <property name="entityInstanceService" ref="org.hisp.dhis.trackedentity.TrackedEntityInstanceService" />
-    <property name="programInstanceService" ref="org.hisp.dhis.program.ProgramInstanceService" />
-    <property name="relationshipService" ref="org.hisp.dhis.relationship.RelationshipService" />
-    <property name="dataElementService" ref="org.hisp.dhis.dataelement.DataElementService" />
-    <property name="dataValueService" ref="org.hisp.dhis.trackedentitydatavalue.TrackedEntityDataValueService" />
-    <property name="programService" ref="org.hisp.dhis.program.ProgramService" />
-    <property name="attributeService" ref="org.hisp.dhis.trackedentity.TrackedEntityAttributeService" />
-    <property name="relationshipTypeService" ref="org.hisp.dhis.relationship.RelationshipTypeService" />
-    <property name="programStageService" ref="org.hisp.dhis.program.ProgramStageService" />
-    <property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
-    <property name="messageService" ref="org.hisp.dhis.message.MessageService" />
-    <property name="smsSender" ref="org.hisp.dhis.sms.SmsSender" />
-  </bean>
-
-  <bean id="org.hisp.dhis.mobile.api.IProgramService" class="org.hisp.dhis.mobile.service.DefaultProgramService">
-    <property name="programService" ref="org.hisp.dhis.program.ProgramService" />
-  </bean>
-
-  <bean id="org.hisp.dhis.api.mobile.TrackedEntityMobileSettingService"
-    class="org.hisp.dhis.mobile.service.DefaultTrackedEntityMobileSettingService">
-    <property name="mobileSettingStore" ref="org.hisp.dhis.api.mobile.TrackedEntityMobileSettingStore" />
-  </bean>
-
-  <bean id="org.hisp.dhis.api.mobile.TrackedEntityMobileSettingStore" class="org.hisp.dhis.mobile.service.HibernateTrackedEntityMobileSettingStore">
-    <property name="clazz" value="org.hisp.dhis.trackedentity.TrackedEntityMobileSetting" />
-    <property name="sessionFactory" ref="sessionFactory" />
-  </bean>
+	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd";>
+
+	<!-- Services -->
+
+	<bean id="org.hisp.dhis.mobile.api.FacilityReportingService"
+		class="org.hisp.dhis.mobile.service.FacilityReportingServiceImpl">
+		<property name="dataSetService" ref="org.hisp.dhis.dataset.DataSetService" />
+		<property name="i18nService" ref="org.hisp.dhis.i18n.I18nService" />
+		<property name="periodService" ref="org.hisp.dhis.period.PeriodService" />
+		<property name="categoryService"
+			ref="org.hisp.dhis.dataelement.DataElementCategoryService" />
+		<property name="dataValueService" ref="org.hisp.dhis.datavalue.DataValueService" />
+		<property name="registrationService"
+			ref="org.hisp.dhis.dataset.CompleteDataSetRegistrationService" />
+		<property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
+		<property name="oUnitService"
+			ref="org.hisp.dhis.organisationunit.OrganisationUnitService" />
+	</bean>
+
+	<bean id="org.hisp.dhis.mobile.api.ActivityReportingService"
+		class="org.hisp.dhis.mobile.service.ActivityReportingServiceImpl">
+		<property name="attValueService"
+			ref="org.hisp.dhis.trackedentityattributevalue.TrackedEntityAttributeValueService" />
+		<property name="programStageInstanceService"
+			ref="org.hisp.dhis.program.ProgramStageInstanceService" />
+		<property name="mobileSettingService"
+			ref="org.hisp.dhis.api.mobile.TrackedEntityMobileSettingService" />
+		<property name="programStageSectionService"
+			ref="org.hisp.dhis.program.ProgramStageSectionService" />
+		<property name="entityInstanceService"
+			ref="org.hisp.dhis.trackedentity.TrackedEntityInstanceService" />
+		<property name="programInstanceService" ref="org.hisp.dhis.program.ProgramInstanceService" />
+		<property name="relationshipService"
+			ref="org.hisp.dhis.relationship.RelationshipService" />
+		<property name="dataElementService" ref="org.hisp.dhis.dataelement.DataElementService" />
+		<property name="dataValueService"
+			ref="org.hisp.dhis.trackedentitydatavalue.TrackedEntityDataValueService" />
+		<property name="programService" ref="org.hisp.dhis.program.ProgramService" />
+		<property name="attributeService"
+			ref="org.hisp.dhis.trackedentity.TrackedEntityAttributeService" />
+		<property name="relationshipTypeService"
+			ref="org.hisp.dhis.relationship.RelationshipTypeService" />
+		<property name="programStageService" ref="org.hisp.dhis.program.ProgramStageService" />
+		<property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
+		<property name="messageService" ref="org.hisp.dhis.message.MessageService" />
+		<property name="smsSender" ref="org.hisp.dhis.sms.SmsSender" />
+		<property name="userService" ref="org.hisp.dhis.user.UserService" />
+	</bean>
+
+	<bean id="org.hisp.dhis.mobile.api.IProgramService" class="org.hisp.dhis.mobile.service.DefaultProgramService">
+		<property name="programService" ref="org.hisp.dhis.program.ProgramService" />
+	</bean>
+
+	<bean id="org.hisp.dhis.api.mobile.TrackedEntityMobileSettingService"
+		class="org.hisp.dhis.mobile.service.DefaultTrackedEntityMobileSettingService">
+		<property name="mobileSettingStore"
+			ref="org.hisp.dhis.api.mobile.TrackedEntityMobileSettingStore" />
+	</bean>
+
+	<bean id="org.hisp.dhis.api.mobile.TrackedEntityMobileSettingStore"
+		class="org.hisp.dhis.mobile.service.HibernateTrackedEntityMobileSettingStore">
+		<property name="clazz"
+			value="org.hisp.dhis.trackedentity.TrackedEntityMobileSetting" />
+		<property name="sessionFactory" ref="sessionFactory" />
+	</bean>
 
 </beans>

=== modified file 'dhis-2/dhis-services/dhis-service-mobile/src/test/java/org/hisp/dhis/mobile/api/model/OrgUnitTest.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/test/java/org/hisp/dhis/mobile/api/model/OrgUnitTest.java	2014-05-05 10:16:05 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/test/java/org/hisp/dhis/mobile/api/model/OrgUnitTest.java	2014-05-12 09:56:39 +0000
@@ -60,6 +60,7 @@
         unit.setSearchUrl( "search" );
         unit.setUpdateNewVersionUrl( "" );
         unit.setSendFeedbackUrl( "sendFeedbackUrl" );
+        unit.setFindUserUrl( "findUserUrl" );
         unit.setUpdateContactUrl( "updateContactUrl" );
         unit.setFindPatientUrl( "findPatientUrl" );
         unit.setUploadProgramStageUrl( "uploadProgramStageUrl" );

=== modified file 'dhis-2/dhis-services/dhis-service-mobile/src/test/java/org/hisp/dhis/mobile/api/model/OrgUnitsTest.java'
--- dhis-2/dhis-services/dhis-service-mobile/src/test/java/org/hisp/dhis/mobile/api/model/OrgUnitsTest.java	2014-05-05 10:16:05 +0000
+++ dhis-2/dhis-services/dhis-service-mobile/src/test/java/org/hisp/dhis/mobile/api/model/OrgUnitsTest.java	2014-05-12 09:56:39 +0000
@@ -86,6 +86,7 @@
         orgUnit.setSearchUrl( "search" );
         orgUnit.setUpdateNewVersionUrl( "updateNewVersionUrl" );
         orgUnit.setSendFeedbackUrl( "sendFeedback" );
+        orgUnit.setFindUserUrl( "findUserUrl" );
         orgUnit.setUpdateContactUrl( "updateContactForMobile" );
         orgUnit.setFindPatientUrl( "findPatient" );
         orgUnit.setRegisterPersonUrl( "registerPerson" );

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/DefaultProgramStageInstanceService.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/DefaultProgramStageInstanceService.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/DefaultProgramStageInstanceService.java	2014-05-12 09:56:39 +0000
@@ -40,7 +40,6 @@
 
 import org.hisp.dhis.common.Grid;
 import org.hisp.dhis.common.GridHeader;
-import org.hisp.dhis.dataelement.DataElement;
 import org.hisp.dhis.i18n.I18n;
 import org.hisp.dhis.i18n.I18nFormat;
 import org.hisp.dhis.message.MessageConversation;
@@ -54,14 +53,11 @@
 import org.hisp.dhis.trackedentity.TrackedEntityInstance;
 import org.hisp.dhis.trackedentity.TrackedEntityInstanceReminder;
 import org.hisp.dhis.trackedentity.TrackedEntityInstanceReminderService;
-import org.hisp.dhis.trackedentitydatavalue.TrackedEntityDataValue;
-import org.hisp.dhis.trackedentitydatavalue.TrackedEntityDataValueService;
 import org.hisp.dhis.user.CurrentUserService;
 import org.springframework.transaction.annotation.Transactional;
 
 /**
  * @author Abyot Asalefew
- * @version $Id$
  */
 @Transactional
 public class DefaultProgramStageInstanceService
@@ -85,13 +81,6 @@
         this.programInstanceService = programInstanceService;
     }
 
-    private TrackedEntityDataValueService dataValueService;
-
-    public void setDataValueService( TrackedEntityDataValueService dataValueService )
-    {
-        this.dataValueService = dataValueService;
-    }
-
     private SmsSender smsSender;
 
     public void setSmsSender( SmsSender smsSender )
@@ -196,82 +185,6 @@
     }
 
     @Override
-    public List<Grid> getProgramStageInstancesReport( ProgramInstance programInstance, I18nFormat format, I18n i18n )
-    {
-        List<Grid> grids = new ArrayList<Grid>();
-
-        Collection<ProgramStageInstance> programStageInstances = programInstance.getProgramStageInstances();
-
-        for ( ProgramStageInstance programStageInstance : programStageInstances )
-        {
-            Grid grid = new ListGrid();
-
-            // -----------------------------------------------------------------
-            // Title
-            // -----------------------------------------------------------------
-
-            Date executionDate = programStageInstance.getExecutionDate();
-            String executionDateValue = (executionDate != null) ? format.formatDate( programStageInstance
-                .getExecutionDate() ) : "[" + i18n.getString( "none" ) + "]";
-
-            grid.setTitle( programStageInstance.getProgramStage().getName() );
-            grid.setSubtitle( i18n.getString( "due_date" ) + ": "
-                + format.formatDate( programStageInstance.getDueDate() ) + " - " + i18n.getString( "report_date" )
-                + ": " + executionDateValue );
-
-            // -----------------------------------------------------------------
-            // Headers
-            // -----------------------------------------------------------------
-
-            grid.addHeader( new GridHeader( i18n.getString( "name" ), false, true ) );
-            grid.addHeader( new GridHeader( i18n.getString( "value" ), false, true ) );
-
-            // -----------------------------------------------------------------
-            // Values
-            // -----------------------------------------------------------------
-
-            Collection<TrackedEntityDataValue> entityDataValues = dataValueService
-                .getTrackedEntityDataValues( programStageInstance );
-
-            if ( executionDate == null || entityDataValues == null || entityDataValues.size() == 0 )
-            {
-                grid.addRow();
-                grid.addValue( "[" + i18n.getString( "none" ) + "]" );
-                grid.addValue( "" );
-            }
-            else
-            {
-                for ( TrackedEntityDataValue entityDataValue : entityDataValues )
-                {
-                    DataElement dataElement = entityDataValue.getDataElement();
-
-                    grid.addRow();
-                    grid.addValue( dataElement.getName() );
-
-                    if ( dataElement.getType().equals( DataElement.VALUE_TYPE_BOOL ) )
-                    {
-                        grid.addValue( i18n.getString( entityDataValue.getValue() ) );
-                    }
-                    else
-                    {
-                        grid.addValue( entityDataValue.getValue() );
-                    }
-                }
-            }
-
-            grids.add( grid );
-        }
-
-        return grids;
-    }
-
-    @Override
-    public void removeEmptyEvents( ProgramStage programStage, OrganisationUnit organisationUnit )
-    {
-        programStageInstanceStore.removeEmptyEvents( programStage, organisationUnit );
-    }
-
-    @Override
     public void updateProgramStageInstances( Collection<Integer> programStageInstanceIds, OutboundSms outboundSms )
     {
         programStageInstanceStore.update( programStageInstanceIds, outboundSms );
@@ -313,13 +226,7 @@
         int total = programInstanceService.countProgramInstances( program, orgunitIds, startDate, endDate );
         grid.addRow();
         grid.addValue( i18n.getString( "total_new_enrollments_in_this_period" ) );
-        grid.addValue( total );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
+        grid.addValue( total ).addEmptyValues( 6 );
 
         // Total programs completed in this period
 
@@ -327,13 +234,7 @@
             program, orgunitIds, startDate, endDate );
         grid.addRow();
         grid.addValue( i18n.getString( "total_programs_completed_in_this_period" ) );
-        grid.addValue( totalCompleted );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
+        grid.addValue( totalCompleted ).addEmptyValues( 6 );
 
         // Total programs discontinued (un-enrollments)
 
@@ -341,13 +242,7 @@
             program, orgunitIds, startDate, endDate );
         grid.addRow();
         grid.addValue( i18n.getString( "total_programs_discontinued_unenrollments" ) );
-        grid.addValue( totalDiscontinued );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
+        grid.addValue( totalDiscontinued ).addEmptyValues( 6 );
 
         // Average number of stages for complete programs
 
@@ -360,37 +255,16 @@
                 ProgramInstance.STATUS_ACTIVE );
             percent = (stageCompleted + 0.0) / totalCompleted;
         }
-        grid.addValue( format.formatValue( percent ) );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
+        grid.addValue( format.formatValue( percent ) ).addEmptyValues( 6 );
 
         // Add empty row
 
-        grid.addRow();
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
+        grid.addRow().addEmptyValues( 8 );
 
         // Summary by stage
 
         grid.addRow();
-        grid.addValue( i18n.getString( "summary_by_stage" ) );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
-        grid.addValue( "" );
+        grid.addValue( i18n.getString( "summary_by_stage" ) ).addEmptyValues( 7 );
 
         // Add titles for stage details
 
@@ -635,7 +509,7 @@
 
         if ( type == Program.SINGLE_EVENT_WITH_REGISTRATION )
         {
-            // Add a new program-instance
+            // Add a new program instance
             programInstance = new ProgramInstance();
             programInstance.setEnrollmentDate( executionDate );
             programInstance.setDateOfIncident( executionDate );
@@ -650,7 +524,7 @@
             Collection<ProgramInstance> programInstances = programInstanceService.getProgramInstances( program );
             if ( programInstances == null || programInstances.size() == 0 )
             {
-                // Add a new program-instance if it doesn't exist
+                // Add a new program instance if it doesn't exist
                 programInstance = new ProgramInstance();
                 programInstance.setEnrollmentDate( executionDate );
                 programInstance.setDateOfIncident( executionDate );
@@ -664,7 +538,7 @@
             }
         }
 
-        // Add a new program-stage-instance
+        // Add a new program stage instance
         ProgramStageInstance programStageInstance = new ProgramStageInstance();
         programStageInstance.setProgramInstance( programInstance );
         programStageInstance.setProgramStage( programStage );
@@ -677,23 +551,6 @@
         return programStageInstance;
     }
 
-    @Override
-    public Grid searchEvents( ProgramStage programStage, List<TabularEventColumn> columns,
-        Collection<Integer> organisationUnits, Date startDate, Date endDate, Boolean completed, Integer min,
-        Integer max, I18n i18n )
-    {
-        return programStageInstanceStore.searchEvent( programStage, organisationUnits, columns, startDate, endDate,
-            completed, min, max, i18n );
-    }
-
-    @Override
-    public int searchEventsCount( ProgramStage programStage, List<TabularEventColumn> columns,
-        Collection<Integer> organisationUnits, Boolean completed, Date startDate, Date endDate )
-    {
-        return programStageInstanceStore.searchEventsCount( programStage, columns, organisationUnits, startDate,
-            endDate, completed );
-    }
-
     // -------------------------------------------------------------------------
     // Supportive methods
     // -------------------------------------------------------------------------
@@ -723,5 +580,4 @@
 
         return outboundSms;
     }
-
-}
\ No newline at end of file
+}

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramInstanceStore.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramInstanceStore.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramInstanceStore.java	2014-05-12 09:56:39 +0000
@@ -90,8 +90,10 @@
             return new ArrayList<ProgramInstance>();
         }
 
-        return getCriteria( Restrictions.in( "program", programs ) ).createAlias( "entityInstance", "entityInstance" )
-            .add( Restrictions.eq( "entityInstance.organisationUnit", organisationUnit ) ).list();
+        return getCriteria( 
+            Restrictions.in( "program", programs ) ).
+            createAlias( "entityInstance", "entityInstance" ).
+            add( Restrictions.eq( "entityInstance.organisationUnit", organisationUnit ) ).list();
     }
 
     @Override
@@ -103,9 +105,11 @@
             return new ArrayList<ProgramInstance>();
         }
 
-        return getCriteria( Restrictions.eq( "status", status ), Restrictions.in( "program", programs ) )
-            .createAlias( "entityInstance", "entityInstance" ).add( Restrictions.eq( "entityInstance.organisationUnit", organisationUnit ) )
-            .list();
+        return getCriteria( 
+            Restrictions.eq( "status", status ), 
+            Restrictions.in( "program", programs ) ).
+            createAlias( "entityInstance", "entityInstance" ).
+            add( Restrictions.eq( "entityInstance.organisationUnit", organisationUnit ) ).list();
     }
 
     @SuppressWarnings( "unchecked" )
@@ -147,14 +151,22 @@
     @SuppressWarnings( "unchecked" )
     public Collection<ProgramInstance> get( Program program, OrganisationUnit organisationUnit, Integer min, Integer max )
     {
-        Criteria criteria = getCriteria( Restrictions.eq( "program", program ), Restrictions.isNull( "endDate" ) )
-            .add( Restrictions.eq( "entityInstance.organisationUnit", organisationUnit ) ).createAlias( "entityInstance", "entityInstance" )
-            .addOrder( Order.asc( "entityInstance.id" ) );
+        Criteria criteria = getCriteria( 
+            Restrictions.eq( "program", program ), Restrictions.isNull( "endDate" ) ).
+            add( Restrictions.eq( "entityInstance.organisationUnit", organisationUnit ) ).
+            createAlias( "entityInstance", "entityInstance" ).
+            addOrder( Order.asc( "entityInstance.id" ) );
 
-        if ( min != null && max != null )
-        {
-            criteria.setFirstResult( min ).setMaxResults( max );
-        }
+        if ( min != null )
+        {
+            criteria.setFirstResult( min );
+        }
+        
+        if ( max != null )
+        {
+            criteria.setMaxResults( max );
+        }
+        
         return criteria.list();
     }
 
@@ -162,10 +174,14 @@
     public Collection<ProgramInstance> get( Program program, OrganisationUnit organisationUnit, Date startDate,
         Date endDate )
     {
-        return getCriteria( Restrictions.eq( "program", program ), Restrictions.isNull( "endDate" ),
-            Restrictions.ge( "enrollmentDate", startDate ), Restrictions.le( "enrollmentDate", endDate ) )
-            .createAlias( "entityInstance", "entityInstance" ).add( Restrictions.eq( "entityInstance.organisationUnit", organisationUnit ) )
-            .addOrder( Order.asc( "entityInstance.id" ) ).list();
+        return getCriteria( 
+            Restrictions.eq( "program", program ), 
+            Restrictions.isNull( "endDate" ),
+            Restrictions.ge( "enrollmentDate", startDate ), 
+            Restrictions.le( "enrollmentDate", endDate ) ).
+            createAlias( "entityInstance", "entityInstance" ).
+            add( Restrictions.eq( "entityInstance.organisationUnit", organisationUnit ) ).
+            addOrder( Order.asc( "entityInstance.id" ) ).list();
     }
 
     @SuppressWarnings( "unchecked" )
@@ -177,41 +193,54 @@
             .createAlias( "entityInstance", "entityInstance" ).createAlias( "entityInstance.organisationUnit", "organisationUnit" )
             .add( Restrictions.in( "organisationUnit.id", orgunitIds ) ).addOrder( Order.asc( "entityInstance.id" ) );
 
-        if ( min != null && max != null )
-        {
-            criteria.setFirstResult( min ).setMaxResults( max );
-        }
-
+        if ( min != null )
+        {
+            criteria.setFirstResult( min );
+        }
+        
+        if ( max != null )
+        {
+            criteria.setMaxResults( max );
+        }
+        
         return criteria.list();
     }
 
     public int count( Program program, OrganisationUnit organisationUnit )
     {
-        Number rs = (Number) getCriteria( Restrictions.eq( "program", program ), Restrictions.isNull( "endDate" ) )
-            .createAlias( "entityInstance", "entityInstance" ).add( Restrictions.eq( "entityInstance.organisationUnit", organisationUnit ) )
-            .setProjection( Projections.rowCount() ).uniqueResult();
+        Number rs = (Number) getCriteria( 
+            Restrictions.eq( "program", program ), Restrictions.isNull( "endDate" ) ).
+            createAlias( "entityInstance", "entityInstance" ).
+            add( Restrictions.eq( "entityInstance.organisationUnit", organisationUnit ) ).
+            setProjection( Projections.rowCount() ).uniqueResult();
+        
         return rs != null ? rs.intValue() : 0;
     }
 
     public int count( Program program, Collection<Integer> orgunitIds, Date startDate, Date endDate )
     {
-        Number rs = (Number) getCriteria( Restrictions.eq( "program", program ),
-            Restrictions.ge( "enrollmentDate", startDate ), Restrictions.le( "enrollmentDate", endDate ) )
-            .createAlias( "entityInstance", "entityInstance" ).createAlias( "entityInstance.organisationUnit", "organisationUnit" )
-            .add( Restrictions.in( "organisationUnit.id", orgunitIds ) ).setProjection( Projections.rowCount() )
-            .uniqueResult();
+        Number rs = (Number) getCriteria( 
+            Restrictions.eq( "program", program ),
+            Restrictions.ge( "enrollmentDate", startDate ), 
+            Restrictions.le( "enrollmentDate", endDate ) ).
+            createAlias( "entityInstance", "entityInstance" ).
+            createAlias( "entityInstance.organisationUnit", "organisationUnit" ).
+            add( Restrictions.in( "organisationUnit.id", orgunitIds ) ).
+            setProjection( Projections.rowCount() ).uniqueResult();
 
         return rs != null ? rs.intValue() : 0;
     }
 
-    public int countByStatus( Integer status, Program program, Collection<Integer> orgunitIds, Date startDate,
-        Date endDate )
+    public int countByStatus( Integer status, Program program, Collection<Integer> orgunitIds, Date startDate, Date endDate )
     {
-        Number rs = (Number) getCriteria( Restrictions.eq( "program", program ),
-            Restrictions.between( "enrollmentDate", startDate, endDate ) ).createAlias( "entityInstance", "entityInstance" )
-            .createAlias( "entityInstance.organisationUnit", "organisationUnit" )
-            .add( Restrictions.in( "organisationUnit.id", orgunitIds ) ).add( Restrictions.eq( "status", status ) )
-            .setProjection( Projections.rowCount() ).uniqueResult();
+        Number rs = (Number) getCriteria( 
+            Restrictions.eq( "program", program ),
+            Restrictions.between( "enrollmentDate", startDate, endDate ) ).
+            createAlias( "entityInstance", "entityInstance" ).
+            createAlias( "entityInstance.organisationUnit", "organisationUnit" ).
+            add( Restrictions.in( "organisationUnit.id", orgunitIds ) ).
+            add( Restrictions.eq( "status", status ) ).
+            setProjection( Projections.rowCount() ).uniqueResult();
 
         return rs != null ? rs.intValue() : 0;
     }
@@ -220,12 +249,16 @@
     public Collection<ProgramInstance> getByStatus( Integer status, Program program, Collection<Integer> orgunitIds,
         Date startDate, Date endDate )
     {
-        return getCriteria( Restrictions.eq( "program", program ),
-            Restrictions.between( "enrollmentDate", startDate, endDate ) ).createAlias( "entityInstance", "entityInstance" )
-            .createAlias( "entityInstance.organisationUnit", "organisationUnit" )
-            .add( Restrictions.in( "organisationUnit.id", orgunitIds ) ).add( Restrictions.eq( "status", status ) )
-            .list();
+        return getCriteria( 
+            Restrictions.eq( "program", program ),
+            Restrictions.between( "enrollmentDate", startDate, endDate ) ).
+            createAlias( "entityInstance", "entityInstance" ).
+            createAlias( "entityInstance.organisationUnit", "organisationUnit" ).
+            add( Restrictions.in( "organisationUnit.id", orgunitIds ) ).
+            add( Restrictions.eq( "status", status ) ).list();
     }
+    
+    //TODO from here this class must be rewritten
 
     public Collection<SchedulingProgramObject> getSendMesssageEvents( String dateToCompare )
     {

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageDataElementStore.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageDataElementStore.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageDataElementStore.java	2014-05-12 09:56:39 +0000
@@ -42,7 +42,6 @@
 
 /**
  * @author Viet Nguyen
- * @version $Id$
  */
 public class HibernateProgramStageDataElementStore
     implements ProgramStageDataElementStore

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageInstanceStore.java	2014-05-12 09:56:39 +0000
@@ -34,7 +34,6 @@
 import java.util.Date;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
 import org.hibernate.Criteria;
 import org.hibernate.criterion.Order;
@@ -44,8 +43,6 @@
 import org.hisp.dhis.common.GridHeader;
 import org.hisp.dhis.common.hibernate.HibernateIdentifiableObjectStore;
 import org.hisp.dhis.i18n.I18n;
-import org.hisp.dhis.jdbc.StatementBuilder;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
 import org.hisp.dhis.period.PeriodType;
 import org.hisp.dhis.program.Program;
 import org.hisp.dhis.program.ProgramInstance;
@@ -54,11 +51,9 @@
 import org.hisp.dhis.program.ProgramStageInstance;
 import org.hisp.dhis.program.ProgramStageInstanceStore;
 import org.hisp.dhis.program.SchedulingProgramObject;
-import org.hisp.dhis.program.TabularEventColumn;
 import org.hisp.dhis.sms.outbound.OutboundSms;
 import org.hisp.dhis.system.grid.GridUtils;
 import org.hisp.dhis.system.grid.ListGrid;
-import org.hisp.dhis.system.util.DateUtils;
 import org.hisp.dhis.system.util.TextUtils;
 import org.hisp.dhis.trackedentity.TrackedEntityInstance;
 import org.hisp.dhis.trackedentity.TrackedEntityInstanceReminder;
@@ -82,13 +77,6 @@
         this.programInstanceService = programInstanceService;
     }
 
-    private StatementBuilder statementBuilder;
-
-    public void setStatementBuilder( StatementBuilder statementBuilder )
-    {
-        this.statementBuilder = statementBuilder;
-    }
-
     // -------------------------------------------------------------------------
     // Implemented methods
     // -------------------------------------------------------------------------
@@ -97,9 +85,10 @@
     @SuppressWarnings( "unchecked" )
     public ProgramStageInstance get( ProgramInstance programInstance, ProgramStage programStage )
     {
-        List<ProgramStageInstance> list = new ArrayList<ProgramStageInstance>( getCriteria(
-            Restrictions.eq( "programInstance", programInstance ), Restrictions.eq( "programStage", programStage ) )
-            .addOrder( Order.asc( "id" ) ).list() );
+        List<ProgramStageInstance> list = getCriteria(
+            Restrictions.eq( "programInstance", programInstance ), 
+            Restrictions.eq( "programStage", programStage ) ).
+            addOrder( Order.asc( "id" ) ).list();
 
         return list.isEmpty() ? null : list.get( list.size() - 1 );
     }
@@ -108,10 +97,10 @@
     @SuppressWarnings( "unchecked" )
     public Collection<ProgramStageInstance> getAll( ProgramInstance programInstance, ProgramStage programStage )
     {
-        Criteria criteria = getCriteria( Restrictions.eq( "programInstance", programInstance ),
-            Restrictions.eq( "programStage", programStage ) ).addOrder( Order.asc( "id" ) );
-
-        return criteria.list();
+        return getCriteria( 
+            Restrictions.eq( "programInstance", programInstance ),
+            Restrictions.eq( "programStage", programStage ) )
+            .addOrder( Order.asc( "id" ) ).list();
     }
 
     @Override
@@ -125,7 +114,8 @@
     @SuppressWarnings( "unchecked" )
     public Collection<ProgramStageInstance> get( Collection<ProgramInstance> programInstances, boolean completed )
     {
-        return getCriteria( Restrictions.in( "programInstance", programInstances ),
+        return getCriteria( 
+            Restrictions.in( "programInstance", programInstances ), 
             Restrictions.eq( "completed", completed ) ).list();
     }
 
@@ -138,15 +128,8 @@
         return getQuery( hql ).setEntity( "entityInstance", entityInstance ).setBoolean( "completed", completed ).list();
     }
 
-    @Override
-    public void removeEmptyEvents( ProgramStage programStage, OrganisationUnit organisationUnit )
-    {
-        String sql = "delete from programstageinstance where programstageid=" + programStage.getId()
-            + " and organisationunitid=" + organisationUnit.getId() + " and programstageinstanceid not in "
-            + "(select pdv.programstageinstanceid from trackedentitydatavalue pdv )";
-        jdbcTemplate.execute( sql );
-    }
-
+    // TODO this class must be re-written from here
+    
     @Override
     public void update( Collection<Integer> programStageInstanceIds, OutboundSms outboundSms )
     {
@@ -199,11 +182,7 @@
                 String programName = rs.getString( "programName" );
                 String programStageName = rs.getString( "programStageName" );
                 String daysSinceDueDate = rs.getString( "days_since_due_date" );
-                String dueDate = rs.getString( "duedate" ).split( " " )[0];// just
-                // get
-                // date,
-                // remove
-                // timestamp
+                String dueDate = rs.getString( "duedate" ).split( " " )[0];
 
                 message = message.replace( TrackedEntityInstanceReminder.TEMPLATE_MESSSAGE_PROGRAM_NAME, programName );
                 message = message.replace( TrackedEntityInstanceReminder.TEMPLATE_MESSSAGE_PROGAM_STAGE_NAME, programStageName );
@@ -507,60 +486,6 @@
         return criteria.list();
     }
 
-    @Override
-    public Grid searchEvent( ProgramStage programStage, Collection<Integer> orgUnits, List<TabularEventColumn> columns,
-        Date startDate, Date endDate, Boolean completed, Integer min, Integer max, I18n i18n )
-    {
-        // ---------------------------------------------------------------------
-        // Headers cols
-        // ---------------------------------------------------------------------
-
-        Grid grid = new ListGrid();
-        grid.setTitle( programStage.getDisplayName() );
-        grid.setSubtitle( i18n.getString( "from" ) + " " + DateUtils.getMediumDateString( startDate ) + " "
-            + i18n.getString( "to" ) + " " + DateUtils.getMediumDateString( endDate ) );
-
-        grid.addHeader( new GridHeader( "id", true, true ) );
-        grid.addHeader( new GridHeader( programStage.getReportDateDescription(), false, true ) );
-
-        Collection<String> deKeys = new HashSet<String>();
-        for ( TabularEventColumn column : columns )
-        {
-            String deKey = "element_" + column.getIdentifier();
-            if ( !deKeys.contains( deKey ) )
-            {
-                grid.addHeader( new GridHeader( column.getName(), column.isHidden(), true ) );
-                deKeys.add( deKey );
-            }
-        }
-
-        grid.addHeader( new GridHeader( "Complete", true, true ) );
-        grid.addHeader( new GridHeader( "TrackedEntityInstanceId", true, true ) );
-
-        // ---------------------------------------------------------------------
-        // Get SQL and build grid
-        // ---------------------------------------------------------------------
-
-        String sql = getTabularReportSql( false, programStage, columns, orgUnits, startDate, endDate, completed, min,
-            max );
-
-        SqlRowSet rowSet = jdbcTemplate.queryForRowSet( sql );
-
-        GridUtils.addRows( grid, rowSet );
-
-        return grid;
-    }
-
-    @Override
-    public int searchEventsCount( ProgramStage programStage, List<TabularEventColumn> columns,
-        Collection<Integer> organisationUnits, Date startDate, Date endDate, Boolean completed )
-    {
-        String sql = getTabularReportSql( true, programStage, columns, organisationUnits, startDate, endDate,
-            completed, null, null );
-
-        return jdbcTemplate.queryForObject( sql, Integer.class );
-    }
-
     // ---------------------------------------------------------------------
     // Supportive methods
     // ---------------------------------------------------------------------
@@ -719,101 +644,4 @@
             + "       and (  DATE(now()) - DATE(psi.duedate) ) = prm.daysallowedsendmessage "
             + "       and prm.whentosend is null " + "       and prm.sendto = " + TrackedEntityInstanceReminder.SEND_TO_USER_GROUP;
     }
-
-    private String getTabularReportSql( boolean count, ProgramStage programStage, List<TabularEventColumn> columns,
-        Collection<Integer> orgUnits, Date startDate, Date endDate, Boolean completed, Integer min, Integer max )
-    {
-        Set<String> deKeys = new HashSet<String>();
-        String selector = count ? "count(*) " : "* ";
-
-        String sql = "select " + selector + "from ( select DISTINCT psi.programstageinstanceid, psi.executiondate,";
-        String where = "";
-        String operator = "where ";
-
-        for ( TabularEventColumn column : columns )
-        {
-            if ( column.isNumberDataElement() )
-            {
-                String deKey = "element_" + column.getIdentifier();
-                if ( !deKeys.contains( deKey ) )
-                {
-                    sql += "(select cast( value as "
-                        + statementBuilder.getDoubleColumnType()
-                        + " ) from trackedentitydatavalue where programstageinstanceid=psi.programstageinstanceid and dataelementid="
-                        + column.getIdentifier() + ") as element_" + column.getIdentifier() + ",";
-                    deKeys.add( deKey );
-                }
-
-                if ( column.hasQuery() )
-                {
-                    where += operator + "element_" + column.getIdentifier() + " " + column.getOperator() + " "
-                        + column.getQuery() + " ";
-                    operator = "and ";
-                }
-            }
-            else if ( column.isDataElement() )
-            {
-                String deKey = "element_" + column.getIdentifier();
-                if ( !deKeys.contains( deKey ) )
-                {
-                    sql += "(select value from trackedentitydatavalue where programstageinstanceid=psi.programstageinstanceid and dataelementid="
-                        + column.getIdentifier() + ") as element_" + column.getIdentifier() + ",";
-                    deKeys.add( deKey );
-                }
-
-                if ( column.hasQuery() )
-                {
-                    if ( column.isDateType() )
-                    {
-                        where += operator + "element_" + column.getIdentifier() + " " + column.getOperator() + " "
-                            + column.getQuery() + " ";
-                    }
-                    else
-                    {
-                        where += operator + "lower(element_" + column.getIdentifier() + ") " + column.getOperator()
-                            + " " + column.getQuery() + " ";
-                    }
-                    operator = "and ";
-                }
-            }
-        }
-
-        sql += " psi.completed ";
-
-        sql += "from programstageinstance psi ";
-        sql += "left join programinstance pi on (psi.programinstanceid=pi.programinstanceid) ";
-        sql += "left join trackedentityinstance p on (pi.trackedentityinstanceid=p.trackedentityinstanceid) ";
-        sql += "join organisationunit ou on (ou.organisationunitid=psi.organisationunitid) ";
-
-        sql += "where psi.programstageid=" + programStage.getId() + " ";
-
-        if ( startDate != null && endDate != null )
-        {
-            String sDate = DateUtils.getMediumDateString( startDate );
-            String eDate = DateUtils.getMediumDateString( endDate );
-
-            sql += "and psi.executiondate >= '" + sDate + "' ";
-            sql += "and psi.executiondate <= '" + eDate + "' ";
-        }
-
-        if ( orgUnits != null )
-        {
-            sql += "and ou.organisationunitid in (" + TextUtils.getCommaDelimitedString( orgUnits ) + ") ";
-        }
-        if ( completed != null )
-        {
-            sql += "and psi.completed=" + completed + " ";
-        }
-
-        sql += "order by psi.executiondate desc ";
-
-        sql += " ";
-        sql += ") as tabular ";
-        sql += where; // filters
-        sql = sql.substring( 0, sql.length() - 1 ) + " "; // Remove last comma
-        sql += (min != null && max != null) ? statementBuilder.limitRecord( min, max ) : "";
-
-        return sql;
-    }
-
 }
\ No newline at end of file

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageStore.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageStore.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStageStore.java	2014-05-12 09:56:39 +0000
@@ -48,7 +48,8 @@
 
     public ProgramStage getByNameAndProgram( String name, Program program )
     {
-        return (ProgramStage) getCriteria( Restrictions.eq( "name", name ), Restrictions.eq( "program", program ) )
-            .uniqueResult();
+        return (ProgramStage) getCriteria( 
+            Restrictions.eq( "name", name ), 
+            Restrictions.eq( "program", program ) ).uniqueResult();
     }
 }

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStore.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStore.java	2014-04-06 17:03:28 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/program/hibernate/HibernateProgramStore.java	2014-05-12 09:56:39 +0000
@@ -94,6 +94,7 @@
         criteria2.add( Restrictions.eq( "orgunitMember.id", organisationUnit.getId() ) );
 
         Collection<Program> programs = new HashSet<Program>();
+        
         if ( criteria1.list() != null )
         {
             programs.addAll( criteria1.list() );

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/relationship/hibernate/HibernateRelationshipStore.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/relationship/hibernate/HibernateRelationshipStore.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/relationship/hibernate/HibernateRelationshipStore.java	2014-05-12 09:56:39 +0000
@@ -48,7 +48,9 @@
     @SuppressWarnings( "unchecked" )
     public Collection<Relationship> getForTrackedEntityInstance( TrackedEntityInstance instance )
     {
-        return getCriteria( Restrictions.disjunction().add( Restrictions.eq( "entityInstanceA", instance ) ).add(
+        return getCriteria( 
+            Restrictions.disjunction().add( 
+            Restrictions.eq( "entityInstanceA", instance ) ).add(
             Restrictions.eq( "entityInstanceB", instance ) ) ).list();
     }
 
@@ -61,15 +63,17 @@
     @SuppressWarnings( "unchecked" )
     public Collection<Relationship> get( TrackedEntityInstance entityInstanceA, RelationshipType relationshipType )
     {
-        return getCriteria( Restrictions.eq( "entityInstanceA", entityInstanceA ),
+        return getCriteria( 
+            Restrictions.eq( "entityInstanceA", entityInstanceA ),
             Restrictions.eq( "relationshipType", relationshipType ) ).list();
     }
 
     public Relationship get( TrackedEntityInstance entityInstanceA, TrackedEntityInstance entityInstanceB, RelationshipType relationshipType )
     {
-        return (Relationship) getCriteria( Restrictions.eq( "entityInstanceA", entityInstanceA ),
-            Restrictions.eq( "entityInstanceB", entityInstanceB ), Restrictions.eq( "relationshipType", relationshipType ) )
-            .uniqueResult();
+        return (Relationship) getCriteria( 
+            Restrictions.eq( "entityInstanceA", entityInstanceA ),
+            Restrictions.eq( "entityInstanceB", entityInstanceB ), 
+            Restrictions.eq( "relationshipType", relationshipType ) ).uniqueResult();
     }
     
     public Relationship get( TrackedEntityInstance entityInstanceA, TrackedEntityInstance entityInstanceB )

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/relationship/hibernate/HibernateRelationshipTypeStore.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/relationship/hibernate/HibernateRelationshipTypeStore.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/relationship/hibernate/HibernateRelationshipTypeStore.java	2014-05-12 09:56:39 +0000
@@ -42,7 +42,8 @@
 {
     public RelationshipType getRelationshipType( String aIsToB, String bIsToA )
     {
-        return (RelationshipType) getCriteria( Restrictions.eq( "aIsToB", aIsToB ), Restrictions.eq( "bIsToA", bIsToA ) )
-            .uniqueResult();
+        return (RelationshipType) getCriteria( 
+            Restrictions.eq( "aIsToB", aIsToB ), 
+            Restrictions.eq( "bIsToA", bIsToA ) ).uniqueResult();
     }
 }

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityAttributeGroupService.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityAttributeGroupService.java	2014-04-14 15:59:05 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityAttributeGroupService.java	2014-05-12 09:56:39 +0000
@@ -123,8 +123,7 @@
     }
 
     @Override
-    public Collection<? extends TrackedEntityAttributeGroup> getTrackedEntityAttributeGroupsBetweenByName( String name,
-        int min, int max )
+    public Collection<? extends TrackedEntityAttributeGroup> getTrackedEntityAttributeGroupsBetweenByName( String name, int min, int max )
     {
         return attributeGroupStore.getAllLikeNameOrderedName( name, min, max );
     }

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityInstanceReminderService.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityInstanceReminderService.java	2014-03-27 23:40:38 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityInstanceReminderService.java	2014-05-12 09:56:39 +0000
@@ -141,7 +141,6 @@
                         value = attributeValue.getValue();
                     }
                 }
-
             }
 
             templateMessage = templateMessage.replace( match, value );

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityInstanceService.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityInstanceService.java	2014-05-04 14:04:41 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/DefaultTrackedEntityInstanceService.java	2014-05-12 09:56:39 +0000
@@ -37,7 +37,6 @@
 import static org.hisp.dhis.trackedentity.TrackedEntityInstanceQueryParams.TRACKED_ENTITY_INSTANCE_ID;
 
 import java.lang.reflect.Type;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
@@ -56,6 +55,7 @@
 import org.hisp.dhis.common.OrganisationUnitSelectionMode;
 import org.hisp.dhis.common.Pager;
 import org.hisp.dhis.common.QueryItem;
+import org.hisp.dhis.common.QueryOperator;
 import org.hisp.dhis.event.EventStatus;
 import org.hisp.dhis.i18n.I18nFormat;
 import org.hisp.dhis.organisationunit.OrganisationUnit;
@@ -442,7 +442,9 @@
 
         if ( operator != null && filter != null )
         {
-            return new QueryItem( at, operator, filter, at.isNumericType() );
+            QueryOperator op = QueryOperator.fromString( operator );
+            
+            return new QueryItem( at, op, filter, at.isNumericType() );
         }
         else
         {
@@ -457,7 +459,7 @@
     }
 
     @Override
-    public int createTrackedEntityInstance( TrackedEntityInstance instance, Integer representativeId,
+    public int createTrackedEntityInstance( TrackedEntityInstance instance, String representativeId,
         Integer relationshipTypeId, Set<TrackedEntityAttributeValue> attributeValues )
     {
         int id = addTrackedEntityInstance( instance );
@@ -474,7 +476,7 @@
 
         if ( representativeId != null )
         {
-            TrackedEntityInstance representative = trackedEntityInstanceStore.get( representativeId );
+            TrackedEntityInstance representative = trackedEntityInstanceStore.getByUid( representativeId );
             if ( representative != null )
             {
                 instance.setRepresentative( representative );
@@ -526,16 +528,10 @@
     }
 
     @Override
-    public Collection<TrackedEntityInstance> getAllTrackedEntityInstances()
-    {
-        return trackedEntityInstanceStore.getAll();
-    }
-
-    @Override
     public Collection<TrackedEntityInstance> getTrackedEntityInstancesForMobile( String searchText, int orgUnitId )
     {
         Set<TrackedEntityInstance> entityInstances = new HashSet<TrackedEntityInstance>();
-        entityInstances.addAll( getTrackedEntityInstancesByPhone( searchText, 0, Integer.MAX_VALUE ) );
+        entityInstances.addAll( trackedEntityInstanceStore.getByPhoneNumber( searchText, 0, Integer.MAX_VALUE ) );
 
         if ( orgUnitId != 0 )
         {
@@ -563,74 +559,7 @@
     }
 
     @Override
-    public Collection<TrackedEntityInstance> getTrackedEntityInstances( Program program )
-    {
-        return trackedEntityInstanceStore.getByProgram( program, 0, Integer.MAX_VALUE );
-    }
-
-    @Override
-    public Collection<TrackedEntityInstance> getTrackedEntityInstances( OrganisationUnit organisationUnit,
-        Program program )
-    {
-        return trackedEntityInstanceStore.getByOrgUnitProgram( organisationUnit, program, 0, Integer.MAX_VALUE );
-    }
-
-    @Override
-    public Collection<TrackedEntityInstance> getTrackedEntityInstance( Integer attributeId, String value )
-    {
-        TrackedEntityAttribute attribute = attributeService.getTrackedEntityAttribute( attributeId );
-        if ( attribute != null )
-        {
-            return attributeValueService.getTrackedEntityInstance( attribute, value );
-        }
-
-        return null;
-    }
-
-    @Override
-    public Collection<TrackedEntityInstance> sortTrackedEntityInstancesByAttribute(
-        Collection<TrackedEntityInstance> entityInstances, TrackedEntityAttribute attribute )
-    {
-        Collection<TrackedEntityInstance> sortedTrackedEntityInstances = new ArrayList<TrackedEntityInstance>();
-
-        // ---------------------------------------------------------------------
-        // Better to fetch all attribute values at once than fetching the
-        // required attribute value of each instance using loop
-        // ---------------------------------------------------------------------
-
-        Collection<TrackedEntityAttributeValue> attributeValues = attributeValueService
-            .getTrackedEntityAttributeValues( entityInstances );
-
-        if ( attributeValues != null )
-        {
-            for ( TrackedEntityAttributeValue attributeValue : attributeValues )
-            {
-                if ( attribute == attributeValue.getAttribute() )
-                {
-                    sortedTrackedEntityInstances.add( attributeValue.getEntityInstance() );
-                    entityInstances.remove( attributeValue.getEntityInstance() );
-                }
-            }
-        }
-
-        // ---------------------------------------------------------------------
-        // Make sure all entityInstances are in the sorted list - because all
-        // entityInstances might not have the sorting attribute/value
-        // ---------------------------------------------------------------------
-
-        sortedTrackedEntityInstances.addAll( entityInstances );
-
-        return sortedTrackedEntityInstances;
-    }
-
-    @Override
-    public int countGetTrackedEntityInstancesByOrgUnit( OrganisationUnit organisationUnit )
-    {
-        return trackedEntityInstanceStore.countListTrackedEntityInstanceByOrgunit( organisationUnit );
-    }
-
-    @Override
-    public void updateTrackedEntityInstance( TrackedEntityInstance instance, Integer representativeId,
+    public void updateTrackedEntityInstance( TrackedEntityInstance instance, String representativeId,
         Integer relationshipTypeId, List<TrackedEntityAttributeValue> valuesForSave,
         List<TrackedEntityAttributeValue> valuesForUpdate, Collection<TrackedEntityAttributeValue> valuesForDelete )
     {
@@ -653,7 +582,7 @@
 
         if ( shouldSaveRepresentativeInformation( instance, representativeId ) )
         {
-            TrackedEntityInstance representative = trackedEntityInstanceStore.get( representativeId );
+            TrackedEntityInstance representative = trackedEntityInstanceStore.getByUid( representativeId );
 
             if ( representative != null )
             {
@@ -676,14 +605,14 @@
         }
     }
 
-    private boolean shouldSaveRepresentativeInformation( TrackedEntityInstance instance, Integer representativeId )
+    private boolean shouldSaveRepresentativeInformation( TrackedEntityInstance instance, String representativeId )
     {
-        if ( representativeId == null )
+        if ( representativeId == null || representativeId.isEmpty() )
         {
             return false;
         }
 
-        return instance.getRepresentative() == null || !(instance.getRepresentative().getId() == representativeId);
+        return instance.getRepresentative() == null || !(instance.getRepresentative().getUid() == representativeId);
     }
 
     @Override
@@ -694,12 +623,6 @@
     }
 
     @Override
-    public int countGetTrackedEntityInstancesByOrgUnitProgram( OrganisationUnit organisationUnit, Program program )
-    {
-        return trackedEntityInstanceStore.countGetTrackedEntityInstancesByOrgUnitProgram( organisationUnit, program );
-    }
-
-    @Override
     public Object getObjectValue( String property, String value, I18nFormat format )
     {
         try
@@ -741,21 +664,6 @@
     }
 
     @Override
-    public List<Integer> getProgramStageInstances( List<String> searchKeys, Collection<OrganisationUnit> orgunits,
-        Boolean followup, Integer statusEnrollment, Integer min, Integer max )
-    {
-        return trackedEntityInstanceStore.getProgramStageInstances( searchKeys, orgunits, followup, null,
-            statusEnrollment, min, max );
-    }
-
-    @Override
-    public Collection<TrackedEntityInstance> getTrackedEntityInstancesByPhone( String phoneNumber, Integer min,
-        Integer max )
-    {
-        return trackedEntityInstanceStore.getByPhoneNumber( phoneNumber, min, max );
-    }
-
-    @Override
     public String validateTrackedEntityInstance( TrackedEntityInstance instance, Program program, I18nFormat format )
     {
         return trackedEntityInstanceStore.validate( instance, program, format );
@@ -773,7 +681,7 @@
     {
         Set<TrackedEntityInstance> entityInstances = new HashSet<TrackedEntityInstance>();
 
-        entityInstances.addAll( getTrackedEntityInstancesByAttributeValue( searchText, attributeId, 0,
+        entityInstances.addAll( trackedEntityInstanceStore.getByAttributeValue( searchText, attributeId, 0,
             Integer.MAX_VALUE ) );
 
         if ( orgUnitId != 0 )
@@ -793,34 +701,10 @@
 
         return entityInstances;
     }
-
-    @Override
-    public Collection<TrackedEntityInstance> getTrackedEntityInstancesByAttributeValue( String searchText,
-        int attributeId, Integer min, Integer max )
-    {
-        return trackedEntityInstanceStore.getByAttributeValue( searchText, attributeId, min, max );
-    }
-
-    @Override
-    public Collection<TrackedEntityInstance> searchTrackedEntityInstances( List<String> searchKeys,
-        Collection<OrganisationUnit> orgunits, Boolean followup, Collection<TrackedEntityAttribute> attributes,
-        Integer statusEnrollment, Integer min, Integer max )
-    {
-        return trackedEntityInstanceStore.search( searchKeys, orgunits, followup, attributes, statusEnrollment, min,
-            max );
-    }
-
-    @Override
-    public int countSearchTrackedEntityInstances( List<String> searchKeys, Collection<OrganisationUnit> orgunits,
-        Boolean followup, Integer statusEnrollment )
-    {
-        return trackedEntityInstanceStore.countSearch( searchKeys, orgunits, followup, statusEnrollment );
-    }
     
     @Override
     public Collection<TrackedEntityInstance> getTrackedEntityInstances( TrackedEntity trackedEntity )
     {
         return trackedEntityInstanceStore.get( trackedEntity );
     }
-
 }

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/hibernate/HibernateTrackedEntityAuditStore.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/hibernate/HibernateTrackedEntityAuditStore.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/hibernate/HibernateTrackedEntityAuditStore.java	2014-05-12 09:56:39 +0000
@@ -57,8 +57,10 @@
     @Override
     public TrackedEntityAudit get( Integer entityInstanceId, String visitor, Date date, String accessedModule )
     {
-        return (TrackedEntityAudit) getCriteria( Restrictions.eq( "entityInstance.id", entityInstanceId ),
-            Restrictions.eq( "visitor", visitor ), Restrictions.eq( "date", date ),
+        return (TrackedEntityAudit) getCriteria( 
+            Restrictions.eq( "entityInstance.id", entityInstanceId ),
+            Restrictions.eq( "visitor", visitor ), 
+            Restrictions.eq( "date", date ),
             Restrictions.eq( "accessedModule", accessedModule ) ).uniqueResult();
     }
 }

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/hibernate/HibernateTrackedEntityInstanceStore.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/hibernate/HibernateTrackedEntityInstanceStore.java	2014-05-04 14:04:41 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentity/hibernate/HibernateTrackedEntityInstanceStore.java	2014-05-12 09:56:39 +0000
@@ -36,30 +36,20 @@
 import static org.hisp.dhis.system.util.TextUtils.removeLastAnd;
 import static org.hisp.dhis.system.util.TextUtils.removeLastComma;
 import static org.hisp.dhis.system.util.TextUtils.removeLastOr;
-import static org.hisp.dhis.trackedentity.TrackedEntityInstance.PREFIX_PROGRAM;
-import static org.hisp.dhis.trackedentity.TrackedEntityInstance.PREFIX_PROGRAM_EVENT_BY_STATUS;
-import static org.hisp.dhis.trackedentity.TrackedEntityInstance.PREFIX_PROGRAM_INSTANCE;
-import static org.hisp.dhis.trackedentity.TrackedEntityInstance.PREFIX_PROGRAM_STAGE;
-import static org.hisp.dhis.trackedentity.TrackedEntityInstance.PREFIX_TRACKED_ENTITY_ATTRIBUTE;
 import static org.hisp.dhis.trackedentity.TrackedEntityInstanceQueryParams.CREATED_ID;
 import static org.hisp.dhis.trackedentity.TrackedEntityInstanceQueryParams.LAST_UPDATED_ID;
 import static org.hisp.dhis.trackedentity.TrackedEntityInstanceQueryParams.ORG_UNIT_ID;
 import static org.hisp.dhis.trackedentity.TrackedEntityInstanceQueryParams.TRACKED_ENTITY_ID;
 import static org.hisp.dhis.trackedentity.TrackedEntityInstanceQueryParams.TRACKED_ENTITY_INSTANCE_ID;
 
-import java.sql.ResultSet;
-import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.lang.StringUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.hibernate.Criteria;
 import org.hibernate.Query;
 import org.hibernate.criterion.Projections;
@@ -73,10 +63,8 @@
 import org.hisp.dhis.i18n.I18nFormat;
 import org.hisp.dhis.jdbc.StatementBuilder;
 import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.organisationunit.OrganisationUnitService;
 import org.hisp.dhis.program.Program;
 import org.hisp.dhis.program.ProgramInstance;
-import org.hisp.dhis.program.ProgramStageInstance;
 import org.hisp.dhis.program.ProgramStatus;
 import org.hisp.dhis.system.util.SqlHelper;
 import org.hisp.dhis.system.util.Timer;
@@ -88,7 +76,6 @@
 import org.hisp.dhis.trackedentity.TrackedEntityInstanceStore;
 import org.hisp.dhis.trackedentityattributevalue.TrackedEntityAttributeValue;
 import org.hisp.dhis.validation.ValidationCriteria;
-import org.springframework.jdbc.core.RowMapper;
 import org.springframework.jdbc.support.rowset.SqlRowSet;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -100,8 +87,6 @@
     extends HibernateIdentifiableObjectStore<TrackedEntityInstance>
     implements TrackedEntityInstanceStore
 {
-    private static final Log log = LogFactory.getLog( HibernateTrackedEntityInstanceStore.class );
-
     private static final Map<ProgramStatus, Integer> PROGRAM_STATUS_MAP = new HashMap<ProgramStatus, Integer>()
     {
         {
@@ -115,13 +100,6 @@
     // Dependencies
     // -------------------------------------------------------------------------
 
-    private OrganisationUnitService organisationUnitService;
-
-    public void setOrganisationUnitService( OrganisationUnitService organisationUnitService )
-    {
-        this.organisationUnitService = organisationUnitService;
-    }
-
     private StatementBuilder statementBuilder;
 
     public void setStatementBuilder( StatementBuilder statementBuilder )
@@ -454,45 +432,6 @@
 
     @Override
     @SuppressWarnings( "unchecked" )
-    public Collection<TrackedEntityInstance> getByProgram( Program program, Integer min, Integer max )
-    {
-        String hql = "select pt from TrackedEntityInstance pt inner join pt.programInstances pi "
-            + "where pi.program = :program and pi.status = :status";
-
-        Query query = getQuery( hql );
-        query.setEntity( "program", program );
-        query.setInteger( "status", ProgramInstance.STATUS_ACTIVE );
-
-        return query.list();
-    }
-
-    @Override
-    public int countListTrackedEntityInstanceByOrgunit( OrganisationUnit organisationUnit )
-    {
-        Query query = getQuery( "select count(p.id) from TrackedEntityInstance p where p.organisationUnit.id=:orgUnitId " );
-
-        query.setParameter( "orgUnitId", organisationUnit.getId() );
-
-        Number rs = (Number) query.uniqueResult();
-
-        return rs != null ? rs.intValue() : 0;
-    }
-
-    @Override
-    public int countGetTrackedEntityInstancesByOrgUnitProgram( OrganisationUnit organisationUnit, Program program )
-    {
-        String sql = "select count(p.trackedentityinstanceid) from trackedentityinstance p join programinstance pi on p.trackedentityinstanceid=pi.trackedentityinstanceid "
-            + "where p.organisationunitid="
-            + organisationUnit.getId()
-            + " and pi.programid="
-            + program.getId()
-            + " and pi.status=" + ProgramInstance.STATUS_ACTIVE;
-
-        return jdbcTemplate.queryForObject( sql, Integer.class );
-    }
-
-    @Override
-    @SuppressWarnings( "unchecked" )
     public Collection<TrackedEntityInstance> getRepresentatives( TrackedEntityInstance instance )
     {
         String hql = "select distinct p from TrackedEntityInstance p where p.representative = :representative order by p.id DESC";
@@ -643,416 +582,6 @@
         }
     }
 
-    @Override
-    public List<Integer> getProgramStageInstances( List<String> searchKeys, Collection<OrganisationUnit> orgunits,
-        Boolean followup, Collection<TrackedEntityAttribute> attributes, Integer statusEnrollment, Integer min,
-        Integer max )
-    {
-        String sql = searchTrackedEntityInstanceSql( false, searchKeys, orgunits, followup, attributes,
-            statusEnrollment, min, max );
-
-        List<Integer> programStageInstanceIds = new ArrayList<Integer>();
-        try
-        {
-            programStageInstanceIds = jdbcTemplate.query( sql, new RowMapper<Integer>()
-            {
-                public Integer mapRow( ResultSet rs, int rowNum )
-                    throws SQLException
-                {
-                    return rs.getInt( "programstageinstanceid" );
-                }
-            } );
-        }
-        catch ( Exception ex )
-        {
-            ex.printStackTrace();
-        }
-
-        return programStageInstanceIds;
-    }
-
-    private String searchTrackedEntityInstanceSql( boolean count, List<String> searchKeys,
-        Collection<OrganisationUnit> orgunits, Boolean followup, Collection<TrackedEntityAttribute> attributes,
-        Integer statusEnrollment, Integer min, Integer max )
-    {
-        String selector = count ? "count(*) " : "* ";
-        String sql = "select " + selector + " from ( select distinct p.trackedentityinstanceid,";
-
-        if ( attributes != null )
-        {
-            for ( TrackedEntityAttribute attribute : attributes )
-            {
-                sql += "(select value from trackedentityattributevalue where trackedentityinstanceid=p.trackedentityinstanceid and trackedentityattributeid="
-                    + attribute.getId() + " ) as " + PREFIX_TRACKED_ENTITY_ATTRIBUTE + "_" + attribute.getId() + " ,";
-            }
-        }
-
-        String instanceWhere = "";
-        String instanceOperator = " where ";
-        String instanceGroupBy = " GROUP BY  p.trackedentityinstanceid ";
-        String otherWhere = "";
-        String operator = " where ";
-        String orderBy = "";
-        boolean isSearchEvent = false;
-        boolean isPriorityEvent = false;
-        Collection<Integer> orgunitChilrenIds = null;
-
-        if ( orgunits != null )
-        {
-            orgunitChilrenIds = getOrgunitChildren( orgunits );
-        }
-
-        for ( String searchKey : searchKeys )
-        {
-            String[] keys = searchKey.split( "_" );
-
-            if ( keys.length <= 1 || keys[1] == null || keys[1].trim().isEmpty() || keys[1].equals( "null" ) )
-            {
-                continue;
-            }
-
-            String id = keys[1];
-            String value = "";
-
-            if ( keys.length >= 3 )
-            {
-                value = keys[2];
-            }
-
-            if ( keys[0].equals( PREFIX_TRACKED_ENTITY_ATTRIBUTE ) )
-            {
-                sql += "(select value from trackedentityattributevalue where trackedentityinstanceid=p.trackedentityinstanceid and trackedentityattributeid="
-                    + id + " ) as " + PREFIX_TRACKED_ENTITY_ATTRIBUTE + "_" + id + ",";
-
-                String[] keyValues = value.split( " " );
-                otherWhere += operator + "(";
-                String opt = "";
-
-                for ( String v : keyValues )
-                {
-                    otherWhere += opt + " lower(" + PREFIX_TRACKED_ENTITY_ATTRIBUTE + "_" + id + ") like '%" + v + "%'";
-                    opt = "or";
-                }
-
-                otherWhere += ")";
-                operator = " and ";
-            }
-            else if ( keys[0].equals( PREFIX_PROGRAM ) )
-            {
-                sql += "(select programid from programinstance pgi where trackedentityinstanceid=p.trackedentityinstanceid and programid="
-                    + id;
-
-                if ( statusEnrollment != null )
-                {
-                    sql += " and pgi.status=" + statusEnrollment;
-                }
-
-                sql += " limit 1 ) as " + PREFIX_PROGRAM + "_" + id + ",";
-                otherWhere += operator + PREFIX_PROGRAM + "_" + id + "=" + id;
-                operator = " and ";
-            }
-            else if ( keys[0].equals( PREFIX_PROGRAM_INSTANCE ) )
-            {
-                sql += "(select pi."
-                    + id
-                    + " from programinstance pi where trackedentityinstanceid=p.trackedentityinstanceid and pi.status=0 ";
-
-                if ( keys.length == 5 )
-                {
-                    sql += " and pi.programid=" + keys[4];
-                }
-                else
-                {
-                    sql += " limit 1 ";
-                }
-
-                sql += ") as " + PREFIX_PROGRAM_INSTANCE + "_" + id + ",";
-                otherWhere += operator + PREFIX_PROGRAM_INSTANCE + "_" + id + "='" + keys[2] + "'";
-                operator = " and ";
-            }
-            else if ( keys[0].equals( PREFIX_PROGRAM_EVENT_BY_STATUS ) )
-            {
-                isSearchEvent = true;
-                isPriorityEvent = Boolean.parseBoolean( keys[5] );
-                instanceWhere += instanceOperator + "pgi.trackedentityinstanceid=p.trackedentityinstanceid and ";
-                instanceWhere += "pgi.programid=" + id + " and ";
-                instanceWhere += "pgi.status=" + ProgramInstance.STATUS_ACTIVE;
-
-                String operatorStatus = "";
-                String condition = " and ( ";
-
-                for ( int index = 6; index < keys.length; index++ )
-                {
-                    int statusEvent = Integer.parseInt( keys[index] );
-                    switch ( statusEvent )
-                    {
-                    case ProgramStageInstance.COMPLETED_STATUS:
-                        instanceWhere += condition + operatorStatus
-                            + "( psi.executiondate is not null and  psi.executiondate>='" + keys[2]
-                            + "' and psi.executiondate<='" + keys[3] + "' and psi.completed=true ";
-
-                        // get events by orgunit children
-                        if ( keys[4].equals( "-1" ) )
-                        {
-                            instanceWhere += " and psi.organisationunitid in( "
-                                + getCommaDelimitedString( orgunitChilrenIds ) + " )";
-                        }
-
-                        // get events by selected orgunit
-                        else if ( !keys[4].equals( "0" ) )
-                        {
-                            instanceWhere += " and psi.organisationunitid=" + getOrgUnitId( keys );
-                        }
-
-                        instanceWhere += ")";
-                        operatorStatus = " OR ";
-                        condition = "";
-                        continue;
-                    case ProgramStageInstance.VISITED_STATUS:
-                        instanceWhere += condition + operatorStatus
-                            + "( psi.executiondate is not null and psi.executiondate>='" + keys[2]
-                            + "' and psi.executiondate<='" + keys[3] + "' and psi.completed=false ";
-
-                        // get events by orgunit children
-                        if ( keys[4].equals( "-1" ) )
-                        {
-                            instanceWhere += " and psi.organisationunitid in( "
-                                + getCommaDelimitedString( orgunitChilrenIds ) + " )";
-                        }
-
-                        // get events by selected orgunit
-                        else if ( !keys[4].equals( "0" ) )
-                        {
-                            instanceWhere += " and psi.organisationunitid=" + getOrgUnitId( keys );
-                        }
-
-                        instanceWhere += ")";
-                        operatorStatus = " OR ";
-                        condition = "";
-                        continue;
-                    case ProgramStageInstance.FUTURE_VISIT_STATUS:
-                        instanceWhere += condition + operatorStatus + "( psi.executiondate is null and psi.duedate>='"
-                            + keys[2] + "' and psi.duedate<='" + keys[3]
-                            + "' and psi.status is not null and (DATE(now()) - DATE(psi.duedate) <= 0) ";
-
-                        // get events by orgunit children
-                        if ( keys[4].equals( "-1" ) )
-                        {
-                            instanceWhere += " and p.organisationunitid in( "
-                                + getCommaDelimitedString( orgunitChilrenIds ) + " )";
-                        }
-
-                        // get events by selected orgunit
-                        else if ( !keys[4].equals( "0" ) )
-                        {
-                            instanceWhere += " and p.organisationunitid=" + getOrgUnitId( keys );
-                        }
-
-                        instanceWhere += ")";
-                        operatorStatus = " OR ";
-                        condition = "";
-                        continue;
-                    case ProgramStageInstance.LATE_VISIT_STATUS:
-                        instanceWhere += condition + operatorStatus + "( psi.executiondate is null and  psi.duedate>='"
-                            + keys[2] + "' and psi.duedate<='" + keys[3]
-                            + "' and psi.status is not null and (DATE(now()) - DATE(psi.duedate) > 0) ";
-
-                        // get events by orgunit children
-                        if ( keys[4].equals( "-1" ) )
-                        {
-                            instanceWhere += " and p.organisationunitid in( "
-                                + getCommaDelimitedString( orgunitChilrenIds ) + " )";
-                        }
-
-                        // get events by selected orgunit
-                        else if ( !keys[4].equals( "0" ) )
-                        {
-                            instanceWhere += " and p.organisationunitid=" + getOrgUnitId( keys );
-                        }
-
-                        instanceWhere += ")";
-                        operatorStatus = " OR ";
-                        condition = "";
-                        continue;
-                    case ProgramStageInstance.SKIPPED_STATUS:
-                        instanceWhere += condition + operatorStatus + "( psi.status=5 and  psi.duedate>='" + keys[2]
-                            + "' and psi.duedate<='" + keys[3] + "' ";
-
-                        // get events by orgunit children
-                        if ( keys[4].equals( "-1" ) )
-                        {
-                            instanceWhere += " and psi.organisationunitid in( "
-                                + getCommaDelimitedString( orgunitChilrenIds ) + " )";
-                        }
-
-                        // get events by selected orgunit
-                        else if ( !keys[4].equals( "0" ) )
-                        {
-                            instanceWhere += " and p.organisationunitid=" + getOrgUnitId( keys );
-                        }
-                        instanceWhere += ")";
-                        operatorStatus = " OR ";
-                        condition = "";
-                        continue;
-                    default:
-                        continue;
-                    }
-                }
-                if ( condition.isEmpty() )
-                {
-                    instanceWhere += ")";
-                }
-
-                instanceWhere += " and pgi.status=" + ProgramInstance.STATUS_ACTIVE + " ";
-                instanceOperator = " and ";
-            }
-            else if ( keys[0].equals( PREFIX_PROGRAM_STAGE ) )
-            {
-                isSearchEvent = true;
-                instanceWhere += instanceOperator
-                    + "pgi.trackedentityinstanceid=p.trackedentityinstanceid and psi.programstageid=" + id + " and ";
-                instanceWhere += "psi.duedate>='" + keys[3] + "' and psi.duedate<='" + keys[4] + "' and ";
-                instanceWhere += "psi.organisationunitid = " + keys[5] + " and ";
-
-                int statusEvent = Integer.parseInt( keys[2] );
-                switch ( statusEvent )
-                {
-                case ProgramStageInstance.COMPLETED_STATUS:
-                    instanceWhere += "psi.completed=true";
-                    break;
-                case ProgramStageInstance.VISITED_STATUS:
-                    instanceWhere += "psi.executiondate is not null and psi.completed=false";
-                    break;
-                case ProgramStageInstance.FUTURE_VISIT_STATUS:
-                    instanceWhere += "psi.executiondate is null and psi.duedate >= now()";
-                    break;
-                case ProgramStageInstance.LATE_VISIT_STATUS:
-                    instanceWhere += "psi.executiondate is null and psi.duedate < now()";
-                    break;
-                default:
-                    break;
-                }
-
-                instanceWhere += " and pgi.status=" + ProgramInstance.STATUS_ACTIVE + " ";
-                instanceOperator = " and ";
-            }
-        }
-
-        if ( orgunits != null && !isSearchEvent )
-        {
-            sql += "(select organisationunitid from trackedentityinstance where trackedentityinstanceid=p.trackedentityinstanceid and organisationunitid in ( "
-                + getCommaDelimitedString( getOrganisationUnitIds( orgunits ) ) + " ) ) as orgunitid,";
-            otherWhere += operator + "orgunitid in ( " + getCommaDelimitedString( getOrganisationUnitIds( orgunits ) )
-                + " ) ";
-        }
-
-        sql = sql.substring( 0, sql.length() - 1 ) + " "; // Removing last comma
-
-        String from = " from trackedentityinstance p ";
-
-        if ( isSearchEvent )
-        {
-            String subSQL = " , psi.programstageinstanceid as programstageinstanceid, pgs.name as programstagename, psi.duedate as duedate ";
-
-            if ( isPriorityEvent )
-            {
-                subSQL += ",pgi.followup ";
-                orderBy = " ORDER BY pgi.followup desc, p.trackedentityinstanceid, duedate asc ";
-                instanceGroupBy += ",pgi.followup ";
-            }
-            else
-            {
-                orderBy = " ORDER BY p.trackedentityinstanceid, duedate asc ";
-            }
-
-            sql = sql + subSQL + from + " inner join programinstance pgi on "
-                + " (pgi.trackedentityinstanceid=p.trackedentityinstanceid) "
-                + " inner join programstageinstance psi on (psi.programinstanceid=pgi.programinstanceid) "
-                + " inner join programstage pgs on (pgs.programstageid=psi.programstageid) ";
-
-            instanceGroupBy += ",psi.programstageinstanceid, pgs.name, psi.duedate ";
-
-            from = " ";
-        }
-
-        sql += from + instanceWhere;
-        if ( followup != null )
-        {
-            sql += " AND pgi.followup=" + followup;
-        }
-        if ( isSearchEvent )
-        {
-            sql += instanceGroupBy;
-        }
-        sql += orderBy;
-        sql += " ) as searchresult";
-        sql += otherWhere;
-
-        if ( min != null && max != null )
-        {
-            sql += " limit " + max + " offset " + min;
-        }
-
-        log.info( "Search tracked entity instance SQL: " + sql );
-
-        return sql;
-    }
-
-    private Integer getOrgUnitId( String[] keys )
-    {
-        Integer orgUnitId;
-        try
-        {
-            orgUnitId = Integer.parseInt( keys[4] );
-        }
-        catch ( NumberFormatException e )
-        {
-            // handle as uid
-            OrganisationUnit ou = organisationUnitService.getOrganisationUnit( keys[4] );
-            orgUnitId = ou.getId();
-        }
-        return orgUnitId;
-    }
-
-    private Collection<Integer> getOrgunitChildren( Collection<OrganisationUnit> orgunits )
-    {
-        Collection<Integer> orgUnitIds = new HashSet<Integer>();
-
-        if ( orgunits != null )
-        {
-            for ( OrganisationUnit orgunit : orgunits )
-            {
-                orgUnitIds
-                    .addAll( organisationUnitService.getOrganisationUnitHierarchy().getChildren( orgunit.getId() ) );
-                orgUnitIds.remove( orgunit.getId() );
-            }
-        }
-
-        if ( orgUnitIds.size() == 0 )
-        {
-            orgUnitIds.add( 0 );
-        }
-
-        return orgUnitIds;
-    }
-
-    private Collection<Integer> getOrganisationUnitIds( Collection<OrganisationUnit> orgunits )
-    {
-        Collection<Integer> orgUnitIds = new HashSet<Integer>();
-
-        for ( OrganisationUnit orgUnit : orgunits )
-        {
-            orgUnitIds.add( orgUnit.getId() );
-        }
-
-        if ( orgUnitIds.size() == 0 )
-        {
-            orgUnitIds.add( 0 );
-        }
-
-        return orgUnitIds;
-    }
-
     @SuppressWarnings( "unchecked" )
     @Override
     public Collection<TrackedEntityInstance> getByAttributeValue( String searchText, int attributeId, Integer min,
@@ -1079,41 +608,6 @@
 
         return entityInstances;
     }
-
-    @Override
-    public Collection<TrackedEntityInstance> search( List<String> searchKeys, Collection<OrganisationUnit> orgunits,
-        Boolean followup, Collection<TrackedEntityAttribute> attributes, Integer statusEnrollment, Integer min,
-        Integer max )
-    {
-        String sql = searchTrackedEntityInstanceSql( false, searchKeys, orgunits, followup, attributes,
-            statusEnrollment, min, max );
-        Collection<TrackedEntityInstance> instances = new HashSet<TrackedEntityInstance>();
-        try
-        {
-            instances = jdbcTemplate.query( sql, new RowMapper<TrackedEntityInstance>()
-            {
-                public TrackedEntityInstance mapRow( ResultSet rs, int rowNum )
-                    throws SQLException
-                {
-                    return get( rs.getInt( 1 ) );
-                }
-            } );
-        }
-        catch ( Exception ex )
-        {
-            ex.printStackTrace();
-        }
-        return instances;
-    }
-
-    @Override
-    public int countSearch( List<String> searchKeys, Collection<OrganisationUnit> orgunits, Boolean followup,
-        Integer statusEnrollment )
-    {
-        String sql = searchTrackedEntityInstanceSql( true, searchKeys, orgunits, followup, null, statusEnrollment,
-            null, null );
-        return jdbcTemplate.queryForObject( sql, Integer.class );
-    }
     
     @SuppressWarnings( "unchecked" )
     @Override

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentityattributevalue/hibernate/HibernateTrackedEntityAttributeValueStore.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentityattributevalue/hibernate/HibernateTrackedEntityAttributeValueStore.java	2014-03-19 06:44:30 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentityattributevalue/hibernate/HibernateTrackedEntityAttributeValueStore.java	2014-05-12 09:56:39 +0000
@@ -28,6 +28,7 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+import java.util.ArrayList;
 import java.util.Collection;
 
 import org.hibernate.Query;
@@ -77,7 +78,8 @@
     @Override
     public TrackedEntityAttributeValue get( TrackedEntityInstance entityInstance, TrackedEntityAttribute attribute )
     {
-        return (TrackedEntityAttributeValue) getCriteria( Restrictions.eq( "entityInstance", entityInstance ),
+        return (TrackedEntityAttributeValue) getCriteria( 
+            Restrictions.eq( "entityInstance", entityInstance ),
             Restrictions.eq( "attribute", attribute ) ).uniqueResult();
     }
 
@@ -99,6 +101,11 @@
     @SuppressWarnings( "unchecked" )
     public Collection<TrackedEntityAttributeValue> get( Collection<TrackedEntityInstance> entityInstances )
     {
+        if ( entityInstances == null || entityInstances.isEmpty() )
+        {
+            return new ArrayList<TrackedEntityAttributeValue>();
+        }
+        
         return getCriteria( Restrictions.in( "entityInstance", entityInstances ) ).list();
     }
 
@@ -106,7 +113,8 @@
     @SuppressWarnings( "unchecked" )
     public Collection<TrackedEntityAttributeValue> searchByValue( TrackedEntityAttribute attribute, String searchText )
     {
-        return getCriteria( Restrictions.eq( "attribute", attribute ),
+        return getCriteria( 
+            Restrictions.eq( "attribute", attribute ),
             Restrictions.ilike( "value", "%" + searchText + "%" ) ).list();
     }
 
@@ -115,8 +123,9 @@
     public Collection<TrackedEntityInstance> getTrackedEntityInstances( TrackedEntityAttribute attribute, String value )
     {
         return getCriteria(
-            Restrictions.and( Restrictions.eq( "attribute", attribute ), Restrictions.eq( "value", value ) ) )
-            .setProjection( Projections.property( "entityInstance" ) ).list();
+            Restrictions.and( Restrictions.eq( "attribute", attribute ), 
+            Restrictions.eq( "value", value ) ) ).
+            setProjection( Projections.property( "entityInstance" ) ).list();
     }
 
     @Override

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentitydatavalue/DefaultTrackedEntityDataValueService.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentitydatavalue/DefaultTrackedEntityDataValueService.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentitydatavalue/DefaultTrackedEntityDataValueService.java	2014-05-12 09:56:39 +0000
@@ -41,7 +41,6 @@
 
 /**
  * @author Abyot Asalefew Gizaw
- * @version $Id$
  */
 @Transactional
 public class DefaultTrackedEntityDataValueService
@@ -108,8 +107,7 @@
         return dataValueStore.get( programStageInstance, dataElements );
     }
 
-    public Collection<TrackedEntityDataValue> getTrackedEntityDataValues(
-        Collection<ProgramStageInstance> programStageInstances )
+    public Collection<TrackedEntityDataValue> getTrackedEntityDataValues( Collection<ProgramStageInstance> programStageInstances )
     {
         return dataValueStore.get( programStageInstances );
     }

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentitydatavalue/TrackedEntityDataValueDeletionHandler.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentitydatavalue/TrackedEntityDataValueDeletionHandler.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentitydatavalue/TrackedEntityDataValueDeletionHandler.java	2014-05-12 09:56:39 +0000
@@ -38,8 +38,6 @@
 
 /**
  * @author Chau Thu Tran
- * @version $ TrackedEntityDataValueDeletionHandler.java Jun 24, 2011 1:10:46 PM $
- * 
  */
 public class TrackedEntityDataValueDeletionHandler
     extends DeletionHandler

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentitydatavalue/hibernate/HibernateTrackedEntityDataValueStore.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentitydatavalue/hibernate/HibernateTrackedEntityDataValueStore.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/java/org/hisp/dhis/trackedentitydatavalue/hibernate/HibernateTrackedEntityDataValueStore.java	2014-05-12 09:56:39 +0000
@@ -71,6 +71,11 @@
     public Collection<TrackedEntityDataValue> get( ProgramStageInstance programStageInstance,
         Collection<DataElement> dataElements )
     {
+        if ( dataElements == null || dataElements.isEmpty() )
+        {
+            return new ArrayList<TrackedEntityDataValue>();
+        }
+        
         String hql = "from TrackedEntityDataValue pdv where pdv.dataElement in ( :dataElements ) "
             + "and pdv.programStageInstance = :programStageInstance";
 
@@ -99,6 +104,11 @@
     public Collection<TrackedEntityDataValue> get( TrackedEntityInstance entityInstance, Collection<DataElement> dataElements, Date startDate,
         Date endDate )
     {
+        if ( dataElements == null || dataElements.isEmpty() )
+        {
+            return new ArrayList<TrackedEntityDataValue>();
+        }
+        
         String hql = "from TrackedEntityDataValue pdv where pdv.dataElement in ( :dataElements ) "
             + "and pdv.programStageInstance.programInstance.entityInstance = :entityInstance "
             + "and pdv.programStageInstance.executionDate >= :startDate and pdv.programStageInstance.executionDate <= :endDate ";

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-services/dhis-service-tracker/src/main/resources/META-INF/dhis/beans.xml	2014-05-04 14:04:41 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/main/resources/META-INF/dhis/beans.xml	2014-05-12 09:56:39 +0000
@@ -30,7 +30,6 @@
 		<property name="sessionFactory" ref="sessionFactory" />
 		<property name="jdbcTemplate" ref="jdbcTemplate" />
 		<property name="programInstanceService" ref="org.hisp.dhis.program.ProgramInstanceService" />
-		<property name="statementBuilder" ref="statementBuilder" />
 	</bean>
 
 	<bean id="org.hisp.dhis.program.ProgramInstanceStore"
@@ -77,8 +76,6 @@
 		<property name="clazz"
 			value="org.hisp.dhis.trackedentity.TrackedEntityInstance" />
 		<property name="sessionFactory" ref="sessionFactory" />
-		<property name="organisationUnitService"
-			ref="org.hisp.dhis.organisationunit.OrganisationUnitService" />
 		<property name="jdbcTemplate" ref="jdbcTemplate" />
 		<property name="statementBuilder" ref="statementBuilder" />
 	</bean>
@@ -184,8 +181,6 @@
 		<property name="programStageInstanceStore"
 			ref="org.hisp.dhis.program.ProgramStageInstanceStore" />
 		<property name="programInstanceService" ref="org.hisp.dhis.program.ProgramInstanceService" />
-		<property name="dataValueService"
-			ref="org.hisp.dhis.trackedentitydatavalue.TrackedEntityDataValueService" />
 		<property name="smsSender" ref="org.hisp.dhis.sms.SmsSender" />
 		<property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
 		<property name="reminderService"

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/test/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceServiceTest.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/test/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceServiceTest.java	2014-04-22 00:17:55 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/test/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceServiceTest.java	2014-05-12 09:56:39 +0000
@@ -99,8 +99,6 @@
 
     private TrackedEntityAttribute entityInstanceAttribute;
 
-    private int attributeId;
-
     private Program programA;
 
     private Program programB;
@@ -119,12 +117,13 @@
         organisationUnitService.addOrganisationUnit( organisationUnitB );
 
         entityInstanceAttribute = createTrackedEntityAttribute( 'A' );
-        attributeId = attributeService.addTrackedEntityAttribute( entityInstanceAttribute );
+        attributeService.addTrackedEntityAttribute( entityInstanceAttribute );
 
         entityInstanceA1 = createTrackedEntityInstance( 'A', organisationUnit );
         entityInstanceA2 = createTrackedEntityInstance( 'A', organisationUnitB );
         entityInstanceA3 = createTrackedEntityInstance( 'A', organisationUnit, entityInstanceAttribute );
         entityInstanceB1 = createTrackedEntityInstance( 'B', organisationUnit );
+        entityInstanceB1.setUid( "UID-B1" );
         entityInstanceB2 = createTrackedEntityInstance( 'B', organisationUnit, entityInstanceAttribute );
 
         programA = createProgram( 'A', new HashSet<ProgramStage>(), organisationUnit );
@@ -198,87 +197,17 @@
     }
 
     @Test
-    public void testGetAllTrackedEntityInstances()
-    {
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA1 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceB1 );
-
-        assertTrue( equals( entityInstanceService.getAllTrackedEntityInstances(), entityInstanceA1, entityInstanceB1 ) );
-    }
-
-    @Test
     public void testGetTrackedEntityInstancesByOu()
     {
         entityInstanceService.addTrackedEntityInstance( entityInstanceA1 );
         entityInstanceService.addTrackedEntityInstance( entityInstanceA2 );
         entityInstanceService.addTrackedEntityInstance( entityInstanceA3 );
 
-        Collection<TrackedEntityInstance> entityInstances = entityInstanceService.getTrackedEntityInstances( organisationUnit, null, null );
-        assertEquals( 2, entityInstances.size() );
-        assertTrue( entityInstances.contains( entityInstanceA1 ) );
-        assertTrue( entityInstances.contains( entityInstanceA3 ) );
-    }
-
-    @Test
-    public void testGetTrackedEntityInstancesByProgram()
-    {
-        programService.addProgram( programA );
-
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA1 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA2 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA3 );
-
-        programInstanceService.enrollTrackedEntityInstance( entityInstanceA1, programA, date, date, organisationUnit );
-        programInstanceService.enrollTrackedEntityInstance( entityInstanceA3, programA, date, date, organisationUnit );
-
-        Collection<TrackedEntityInstance> entityInstances = entityInstanceService.getTrackedEntityInstances( programA );
-        assertEquals( 2, entityInstances.size() );
-        assertTrue( entityInstances.contains( entityInstanceA1 ) );
-        assertTrue( entityInstances.contains( entityInstanceA3 ) );
-    }
-
-    @Test
-    public void testGetTrackedEntityInstancesbyOuProgram()
-    {
-        programService.addProgram( programA );
-
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA1 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA2 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA3 );
-
-        programInstanceService.enrollTrackedEntityInstance( entityInstanceA1, programA, date, date, organisationUnit );
-        programInstanceService.enrollTrackedEntityInstance( entityInstanceA2, programA, date, date, organisationUnit );
-        programInstanceService.enrollTrackedEntityInstance( entityInstanceA3, programA, date, date, organisationUnit );
-
-        Collection<TrackedEntityInstance> entityInstances = entityInstanceService.getTrackedEntityInstances( organisationUnit, programA );
-        assertEquals( 2, entityInstances.size() );
-        assertTrue( entityInstances.contains( entityInstanceA1 ) );
-        assertTrue( entityInstances.contains( entityInstanceA3 ) );
-    }
-
-    @Test
-    public void testGetTrackedEntityInstancesByAttribute()
-    {
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA2 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA3 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceB1 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceB2 );
-
-        TrackedEntityAttributeValue attributeValue = createTrackedEntityAttributeValue( 'A', entityInstanceA3,
-            entityInstanceAttribute );
-        Set<TrackedEntityAttributeValue> entityInstanceAttributeValues = new HashSet<TrackedEntityAttributeValue>();
-        entityInstanceAttributeValues.add( attributeValue );
-
-        entityInstanceService.createTrackedEntityInstance( entityInstanceA3, null, null, entityInstanceAttributeValues );
-
-        Collection<TrackedEntityInstance> entityInstances = entityInstanceService.getTrackedEntityInstance( attributeId, "AttributeA" );
-
-        assertEquals( 1, entityInstances.size() );
-        assertTrue( entityInstances.contains( entityInstanceA3 ) );
-
-        TrackedEntityInstance entityInstance = entityInstances.iterator().next();
-        assertEquals( 1, entityInstance.getAttributeValues().size() );
-        assertTrue( entityInstance.getAttributeValues().contains( attributeValue ) );
+        Collection<TrackedEntityInstance> entityInstances = entityInstanceService.getTrackedEntityInstances(
+            organisationUnit, null, null );
+        assertEquals( 2, entityInstances.size() );
+        assertTrue( entityInstances.contains( entityInstanceA1 ) );
+        assertTrue( entityInstances.contains( entityInstanceA3 ) );
     }
 
     @Test
@@ -297,8 +226,8 @@
         programInstanceService.enrollTrackedEntityInstance( entityInstanceA2, programA, date, date, organisationUnit );
         programInstanceService.enrollTrackedEntityInstance( entityInstanceB2, programB, date, date, organisationUnit );
 
-        Collection<TrackedEntityInstance> entityInstances = entityInstanceService.getTrackedEntityInstances( organisationUnit, programA, 0,
-            100 );
+        Collection<TrackedEntityInstance> entityInstances = entityInstanceService.getTrackedEntityInstances(
+            organisationUnit, programA, 0, 100 );
 
         assertEquals( 2, entityInstances.size() );
         assertTrue( entityInstances.contains( entityInstanceA1 ) );
@@ -327,7 +256,7 @@
     @Test
     public void testCreateTrackedEntityInstanceAndRelative()
     {
-        int idB = entityInstanceService.addTrackedEntityInstance( entityInstanceB1 );
+        entityInstanceService.addTrackedEntityInstance( entityInstanceB1 );
 
         RelationshipType relationshipType = createRelationshipType( 'A' );
         int relationshipTypeId = relationshipTypeService.addRelationshipType( relationshipType );
@@ -337,14 +266,15 @@
         Set<TrackedEntityAttributeValue> entityInstanceAttributeValues = new HashSet<TrackedEntityAttributeValue>();
         entityInstanceAttributeValues.add( attributeValue );
 
-        int idA = entityInstanceService.createTrackedEntityInstance( entityInstanceA1, idB, relationshipTypeId, entityInstanceAttributeValues );
+        int idA = entityInstanceService.createTrackedEntityInstance( entityInstanceA1, entityInstanceB1.getUid(),
+            relationshipTypeId, entityInstanceAttributeValues );
         assertNotNull( entityInstanceService.getTrackedEntityInstance( idA ) );
     }
 
     @Test
     public void testUpdateTrackedEntityInstanceAndRelative()
     {
-        int idB = entityInstanceService.addTrackedEntityInstance( entityInstanceB1 );
+        entityInstanceService.addTrackedEntityInstance( entityInstanceB1 );
 
         RelationshipType relationshipType = createRelationshipType( 'A' );
         int relationshipTypeId = relationshipTypeService.addRelationshipType( relationshipType );
@@ -354,78 +284,17 @@
             entityInstanceAttribute );
         Set<TrackedEntityAttributeValue> entityInstanceAttributeValues = new HashSet<TrackedEntityAttributeValue>();
         entityInstanceAttributeValues.add( attributeValue );
-        int idA = entityInstanceService.createTrackedEntityInstance( entityInstanceA3, idB, relationshipTypeId, entityInstanceAttributeValues );
+        int idA = entityInstanceService.createTrackedEntityInstance( entityInstanceA3, entityInstanceB1.getUid(),
+            relationshipTypeId, entityInstanceAttributeValues );
         assertNotNull( entityInstanceService.getTrackedEntityInstance( idA ) );
 
         attributeValue.setValue( "AttributeB" );
         List<TrackedEntityAttributeValue> attributeValues = new ArrayList<TrackedEntityAttributeValue>();
         attributeValues.add( attributeValue );
 
-        entityInstanceService.updateTrackedEntityInstance( entityInstanceA3, idB, relationshipTypeId, attributeValues,
-            new ArrayList<TrackedEntityAttributeValue>(), new ArrayList<TrackedEntityAttributeValue>() );
+        entityInstanceService.updateTrackedEntityInstance( entityInstanceA3, entityInstanceB1.getUid(),
+            relationshipTypeId, attributeValues, new ArrayList<TrackedEntityAttributeValue>(),
+            new ArrayList<TrackedEntityAttributeValue>() );
         assertEquals( "B", entityInstanceService.getTrackedEntityInstance( idA ).getName() );
     }
-
-    @Test
-    public void testCountGetTrackedEntityInstancesByOrgUnit()
-    {
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA1 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA2 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA3 );
-
-        assertEquals( 2, entityInstanceService.countGetTrackedEntityInstancesByOrgUnit( organisationUnit ) );
-    }
-
-    @Test
-    public void testCountGetTrackedEntityInstancesByOrgUnitProgram()
-    {
-        programService.addProgram( programA );
-        programService.addProgram( programB );
-
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA1 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceB1 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA2 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceB2 );
-
-        programInstanceService.enrollTrackedEntityInstance( entityInstanceA1, programA, date, date, organisationUnit );
-        programInstanceService.enrollTrackedEntityInstance( entityInstanceB1, programA, date, date, organisationUnit );
-        programInstanceService.enrollTrackedEntityInstance( entityInstanceA2, programA, date, date, organisationUnit );
-        programInstanceService.enrollTrackedEntityInstance( entityInstanceB2, programB, date, date, organisationUnit );
-
-        assertEquals( 2, entityInstanceService.countGetTrackedEntityInstancesByOrgUnitProgram( organisationUnit, programA ) );
-        assertEquals( 1, entityInstanceService.countGetTrackedEntityInstancesByOrgUnitProgram( organisationUnit, programB ) );
-    }
-
-    @Test
-    public void testGetTrackedEntityInstancesByPhone()
-    {
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA1 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA2 );
-        entityInstanceService.addTrackedEntityInstance( entityInstanceA3 );
-
-        TrackedEntityAttribute entityInstanceAttribute = createTrackedEntityAttribute( 'B' );
-        entityInstanceAttribute.setValueType( TrackedEntityAttribute.TYPE_PHONE_NUMBER );
-        attributeService.addTrackedEntityAttribute( entityInstanceAttribute );
-
-        TrackedEntityAttributeValue attributeValue = createTrackedEntityAttributeValue( 'A', entityInstanceA1,
-            entityInstanceAttribute );
-        attributeValue.setValue( "123456789" );
-        attributeValueService.addTrackedEntityAttributeValue( attributeValue );
-
-        entityInstanceA1.addAttributeValue( attributeValue );
-        entityInstanceService.updateTrackedEntityInstance( entityInstanceA1 );
-
-        attributeValue = createTrackedEntityAttributeValue( 'A', entityInstanceA2, entityInstanceAttribute );
-        attributeValue.setValue( "123456789" );
-        attributeValueService.addTrackedEntityAttributeValue( attributeValue );
-        entityInstanceA2.addAttributeValue( attributeValue );
-        entityInstanceService.updateTrackedEntityInstance( entityInstanceA2 );
-
-        Collection<TrackedEntityInstance> entityInstances = entityInstanceService.getTrackedEntityInstancesByPhone(
-            "123456789", null, null );
-        assertEquals( 2, entityInstances.size() );
-        assertTrue( entityInstances.contains( entityInstanceA1 ) );
-        assertTrue( entityInstances.contains( entityInstanceA2 ) );
-    }
-
 }

=== modified file 'dhis-2/dhis-services/dhis-service-tracker/src/test/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceStoreTest.java'
--- dhis-2/dhis-services/dhis-service-tracker/src/test/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceStoreTest.java	2014-04-22 00:17:55 +0000
+++ dhis-2/dhis-services/dhis-service-tracker/src/test/java/org/hisp/dhis/trackedentity/TrackedEntityInstanceStoreTest.java	2014-05-12 09:56:39 +0000
@@ -194,35 +194,6 @@
     }
 
     @Test
-    public void testGetByProgram()
-    {
-        programService.addProgram( programA );
-        programService.addProgram( programB );
-
-        entityInstanceStore.save( entityInstanceA1 );
-        entityInstanceStore.save( entityInstanceB1 );
-        entityInstanceStore.save( entityInstanceA2 );
-        entityInstanceStore.save( entityInstanceB2 );
-
-        programInstanceService.enrollTrackedEntityInstance( entityInstanceA1, programA, date, date, organisationUnit );
-        programInstanceService.enrollTrackedEntityInstance( entityInstanceA2, programA, date, date, organisationUnit );
-        programInstanceService.enrollTrackedEntityInstance( entityInstanceB1, programA, date, date, organisationUnit );
-        programInstanceService.enrollTrackedEntityInstance( entityInstanceB2, programB, date, date, organisationUnit );
-
-        Collection<TrackedEntityInstance> entityInstances = entityInstanceStore.getByProgram( programA, 0, 100 );
-
-        assertEquals( 3, entityInstances.size() );
-        assertTrue( entityInstances.contains( entityInstanceA1 ) );
-        assertTrue( entityInstances.contains( entityInstanceA2 ) );
-        assertTrue( entityInstances.contains( entityInstanceB1 ) );
-
-        entityInstances = entityInstanceStore.getByOrgUnitProgram( organisationUnit, programB, 0, 100 );
-
-        assertEquals( 1, entityInstances.size() );
-        assertTrue( entityInstances.contains( entityInstanceB2 ) );
-    }
-
-    @Test
     public void testGetRepresentatives()
     {
         entityInstanceStore.save( entityInstanceB1 );

=== modified file 'dhis-2/dhis-support/dhis-support-hibernate/pom.xml'
--- dhis-2/dhis-support/dhis-support-hibernate/pom.xml	2014-04-22 15:46:19 +0000
+++ dhis-2/dhis-support/dhis-support-hibernate/pom.xml	2014-05-12 09:56:39 +0000
@@ -33,8 +33,12 @@
       <artifactId>hibernate-core</artifactId>
     </dependency>
     <dependency>
-      <groupId>org.hibernate</groupId>
-      <artifactId>hibernate-ehcache</artifactId>
+	  <groupId>com.hazelcast</groupId>
+	  <artifactId>hazelcast</artifactId>
+    </dependency> 
+    <dependency>
+	  <groupId>com.hazelcast</groupId>
+	  <artifactId>hazelcast-hibernate4</artifactId>
     </dependency>
     <dependency>
       <groupId>org.hibernate</groupId>

=== removed file 'dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/ehcache.xml'
--- dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/ehcache.xml	2014-04-08 19:36:25 +0000
+++ dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/ehcache.xml	1970-01-01 00:00:00 +0000
@@ -1,385 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ehcache>
-
-  <defaultCache maxElementsInMemory="800000" eternal="false" timeToIdleSeconds="360" timeToLiveSeconds="720"
-    overflowToDisk="false" diskPersistent="false" />
-
-  <!-- Hibernate Query Cache -->
-
-  <cache name="org.hibernate.cache.internal.StandardQueryCache" maxElementsInMemory="250000" />
-
-  <cache name="org.hibernate.cache.spi.UpdateTimestampsCache" maxElementsInMemory="3000" />
-
-  <!-- Hibernate entities -->
-
-  <cache name="org.hisp.dhis.configuration.Configuration" maxElementsInMemory="1" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElement" maxElementsInMemory="4000" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElement.userGroupAccesses" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategoryCombo" maxElementsInMemory="100" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategory" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategoryOption" maxElementsInMemory="400" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategoryOptionCombo" maxElementsInMemory="800" />
-
-  <cache name="org.hisp.dhis.dataelement.CategoryOptionGroup" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.dataelement.CategoryOptionGroupSet" maxElementsInMemory="50" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategoryDimension" maxElementsInMemory="2000" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementGroup" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementGroupSet" maxElementsInMemory="100" />
-
-  <cache name="org.hisp.dhis.indicator.Indicator" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.indicator.IndicatorGroup" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.indicator.IndicatorGroupSet" maxElementsInMemory="100" />
-
-  <cache name="org.hisp.dhis.indicator.IndicatorType" maxElementsInMemory="100" />
-
-  <cache name="org.hisp.dhis.datadictionary.DataDictionary" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.datadictionary.DataDictionary.userGroupAccesses" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.period.Period" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.period.PeriodType" maxElementsInMemory="50" />
-
-  <cache name="org.hisp.dhis.period.RelativePeriods" maxElementsInMemory="30" />
-
-  <cache name="org.hisp.dhis.dataset.DataSet" maxElementsInMemory="400" />
-
-  <cache name="org.hisp.dhis.dataset.Section" maxElementsInMemory="400" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementOperand" maxElementsInMemory="4000" />
-
-  <cache name="org.hisp.dhis.expression.Expression" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.validation.ValidationRule" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.validation.ValidationRuleGroup" maxElementsInMemory="50" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnit" maxElementsInMemory="60000" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnitGroup" maxElementsInMemory="100" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnitGroup.userGroupAccesses" maxElementsInMemory="100" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnitGroupSet" maxElementsInMemory="50" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnitGroupSet.attributeValues" maxElementsInMemory="1000" />
-  
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnitLevel" maxElementsInMemory="20" />
-
-  <cache name="org.hisp.dhis.user.User" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.user.UserSetting" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.user.UserCredentials" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.user.UserAuthorityGroup" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.user.UserGroup" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.setting.SystemSetting" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.translation.Translation" maxElementsInMemory="200000" />
-
-  <cache name="org.hisp.dhis.message.MessageConversation" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.message.Message" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.message.UserMessage" maxElementsInMemory="50000" />
-
-  <cache name="org.hisp.dhis.chart.Chart" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.mapping.Map" maxElementsInMemory="1000" />
-  
-  <cache name="org.hisp.dhis.reporttable.ReportTable" maxElementsInMemory="100" />
-
-  <cache name="org.hisp.dhis.eventreport.EventReport" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.report.Report" maxElementsInMemory="100" />
-
-  <cache name="org.hisp.dhis.document.Document" maxElementsInMemory="100" />
-
-  <cache name="org.hisp.dhis.dashboard.Dashboard" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.dashboard.DashboardItem" maxElementsInMemory="4000" />
-
-  <cache name="org.hisp.dhis.constant.Constant" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.version.Version" maxElementsInMemory="100" />
-
-  <cache name="org.hisp.dhis.attribute.Attribute" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.attribute.AttributeValue" maxElementsInMemory="5000" />
-
-  <cache name="org.hisp.dhis.option.OptionSet" maxElementsInMemory="50" />
-
-  <cache name="org.hisp.dhis.dataset.LockException" maxElementsInMemory="1000" />
-  
-  <cache name="org.hisp.dhis.dataapproval.DataApprovalLevel" maxElementsInMemory="20" />
-
-  <cache name="org.hisp.dhis.filter.MetaDataFilter" maxElementsInMemory="100" />
-
-  <cache name="org.hisp.dhis.program.Program" maxElementsInMemory="100" />
-
-  <cache name="org.hisp.dhis.program.ProgramStage" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.sqlview.SqlView" maxElementsInMemory="50" />
-
-  <cache name="org.hisp.dhis.trackedentity.TrackedEntityAttribute" maxElementsInMemory="50" />
-
-  <!-- Hibernate Associations -->
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategoryCombo.categories" maxElementsInMemory="300" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategoryCombo.optionCombos" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategoryCombo.userGroupAccesses" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategory.categoryOptions" maxElementsInMemory="300" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategory.userGroupAccesses" maxElementsInMemory="300" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategoryOption.categoryOptionCombos" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategoryOption.categories" maxElementsInMemory="300" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategoryOption.groups" maxElementsInMemory="300" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategoryOption.userGroupAccesses" maxElementsInMemory="300" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategoryOptionCombo.categoryOptions" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.dataelement.CategoryOptionGroup.userGroupAccesses" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.dataelement.CategoryOptionGroup.members" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.dataelement.CategoryOptionGroupSet.members" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.dataelement.CategoryOptionGroupSet.userGroupAccesses" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementCategoryDimension.items" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.dataset.DataSet.dataElements" maxElementsInMemory="3000" />
-
-  <cache name="org.hisp.dhis.dataset.DataSet.sources" maxElementsInMemory="120000" />
-
-  <cache name="org.hisp.dhis.dataset.DataSet.sections" maxElementsInMemory="3000" />
-
-  <cache name="org.hisp.dhis.dataset.DataSet.userGroupAccesses" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.dataset.DataSet.attributeValues" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.dashboard.Dashboard.userGroupAccesses" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElement.groups" maxElementsInMemory="3000" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElement.dataSets" maxElementsInMemory="3000" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElement.attributeValues" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementGroup.members" maxElementsInMemory="3000" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementGroup.attributeValues" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementGroup.userGroupAccesses" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementGroupSet.members" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.dataelement.DataElementGroupSet.userGroupAccesses" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.document.Document.userGroupAccesses" maxElementsInMemory="100" />
-
-  <cache name="org.hisp.dhis.indicator.Indicator.groups" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.indicator.Indicator.dataSets" maxElementsInMemory="400" />
-
-  <cache name="org.hisp.dhis.indicator.Indicator.attributeValues" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.indicator.Indicator.userGroupAccesses" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.indicator.IndicatorGroup.members" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.indicator.IndicatorGroup.attributeValues" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.indicator.IndicatorGroup.userGroupAccesses" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.indicator.IndicatorGroupSet.members" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.indicator.IndicatorGroupSet.userGroupAccesses" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.dataset.Section.dataElements" maxElementsInMemory="4000" />
-
-  <cache name="org.hisp.dhis.dataset.Section.greyedFields" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.expression.Expression.dataElementsInExpression" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnit.children" maxElementsInMemory="60000" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnit.dataSets" maxElementsInMemory="120000" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnit.groups" maxElementsInMemory="20000" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnit.users" maxElementsInMemory="20000" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnit.attributeValues" maxElementsInMemory="20000" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnitGroup.members" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnitGroup.attributeValues" maxElementsInMemory="20000" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnitGroup.dataSets" maxElementsInMemory="100" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnitGroupSet.organisationUnitGroups" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.organisationunit.OrganisationUnitGroupSet.userGroupAccesses" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.report.Report.userGroupAccesses" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.indicators" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.dataElements" maxElementsInMemory="1500" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.dataElementOperands" maxElementsInMemory="1500" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.dataSets" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.periods" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.organisationUnits" maxElementsInMemory="2000" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.dataElementGroups" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.organisationUnitGroups" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.categoryOptionGroups" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.itemOrganisationUnitGroups" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.categoryDimensions" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.columnDimensions" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.rowDimensions" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.filterDimensions" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.organisationUnitLevels" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.reporttable.ReportTable.userGroupAccesses" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.chart.Chart.indicators" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.chart.Chart.dataElements" maxElementsInMemory="1500" />
-
-  <cache name="org.hisp.dhis.chart.Chart.dataElementOperands" maxElementsInMemory="1500" />
-
-  <cache name="org.hisp.dhis.chart.Chart.dataSets" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.chart.Chart.periods" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.chart.Chart.organisationUnits" maxElementsInMemory="2000" />
-
-  <cache name="org.hisp.dhis.chart.Chart.dataElementGroups" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.chart.Chart.organisationUnitGroups" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.chart.Chart.categoryOptionGroups" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.chart.Chart.itemOrganisationUnitGroups" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.chart.Chart.categoryDimensions" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.chart.Chart.filterDimensions" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.chart.Chart.organisationUnitLevels" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.chart.Chart.userGroupAccesses" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.mapping.Map.mapViews" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.mapping.Map.userGroupAccesses" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.mapping.MapView" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.mapping.MapView.dataSets" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.mapping.MapView.indicators" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.mapping.MapView.dataElements" maxElementsInMemory="1500" />
-
-  <cache name="org.hisp.dhis.mapping.MapView.dataElementOperands" maxElementsInMemory="1500" />
-
-  <cache name="org.hisp.dhis.mapping.MapView.periods" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.mapping.MapView.organisationUnits" maxElementsInMemory="2000" />
-
-  <cache name="org.hisp.dhis.mapping.MapView.organisationUnitLevels" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.mapping.MapView.itemOrganisationUnitGroups" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.eventreport.EventReport.columnDimensions" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.eventreport.EventReport.rowDimensions" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.eventreport.EventReport.filterDimensions" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.eventreport.EventReport.periods" maxElementsInMemory="500" />
-  
-  <cache name="org.hisp.dhis.eventreport.EventReport.organisationUnits" maxElementsInMemory="500" />
-  
-  <cache name="org.hisp.dhis.eventreport.EventReport.organisationUnitLevels" maxElementsInMemory="500" />
-  
-  <cache name="org.hisp.dhis.eventreport.EventReport.itemOrganisationUnitGroups" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.eventreport.EventReport.userGroupAccesses" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.attribute.Attribute.attributeValues" maxElementsInMemory="5000" />
-
-  <cache name="org.hisp.dhis.option.OptionSet.options" maxElementsInMemory="2000" />
-
-  <cache name="org.hisp.dhis.option.OptionSet.userGroupAccesses" maxElementsInMemory="200" />
-  
-  <cache name="org.hisp.dhis.dataapproval.DataApprovalLevel.userGroupAccesses" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.interpretation.Interpretation.userGroupAccesses" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.user.User.organisationUnits" maxElementsInMemory="20000" />
-
-  <cache name="org.hisp.dhis.user.User.dataViewOrganisationUnits" maxElementsInMemory="20000" />
-
-  <cache name="org.hisp.dhis.user.User.attributeValues" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.user.User.groups" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.user.User.apps" maxElementsInMemory="1000" />
-
-  <cache name="org.hisp.dhis.user.UserGroup.attributeValues" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.user.UserGroup.userGroupAccesses" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.user.UserCredentials.userAuthorityGroups" maxElementsInMemory="2000" />
-
-  <cache name="org.hisp.dhis.user.UserCredentials.cogsDimensionConstraints" maxElementsInMemory="2000" />
-
-  <cache name="org.hisp.dhis.user.UserAuthorityGroup.authorities" maxElementsInMemory="500" />
-
-  <cache name="org.hisp.dhis.user.UserAuthorityGroup.userGroupAccesses" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.validation.ValidationRuleGroup.userGroupAccesses" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.sqlview.SqlView.userGroupAccesses" maxElementsInMemory="200" />
-
-  <cache name="org.hisp.dhis.trackedentity.TrackedEntityAttribute.userGroupAccesses" maxElementsInMemory="200" />
-
-</ehcache>

=== added file 'dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/hazelcast.xml'
--- dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/hazelcast.xml	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/hazelcast.xml	2014-05-12 09:56:39 +0000
@@ -0,0 +1,30 @@
+<hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.2.xsd"
+           xmlns="http://www.hazelcast.com/schema/config";
+           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
+    <!-- 
+    <group>
+        <name>dhis-hz-cluster</name>
+        <password>dhis-hz-cluster</password>
+    </group>
+    <network>
+        <port auto-increment="true" port-count="100">5701</port>
+        <outbound-ports>
+            <ports>0</ports>
+        </outbound-ports>
+        <join>
+            <multicast enabled="false">
+                <multicast-group>224.2.2.3</multicast-group>
+                <multicast-port>54327</multicast-port>
+            </multicast>
+            <tcp-ip enabled="true">
+                <member>127.0.0.1</member>
+            </tcp-ip>
+        </join>
+    </network>
+     -->
+	<map name="default">
+		<time-to-live-seconds>720</time-to-live-seconds>
+		<max-size policy="PER_NODE">800000</max-size>
+		<eviction-policy>LRU</eviction-policy>
+	</map>
+</hazelcast>
\ No newline at end of file

=== modified file 'dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/hibernate-default.properties'
--- dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/hibernate-default.properties	2014-04-28 19:23:37 +0000
+++ dhis-2/dhis-support/dhis-support-hibernate/src/main/resources/hibernate-default.properties	2014-05-12 09:56:39 +0000
@@ -8,7 +8,7 @@
 #   1) The classpath (src/main/resources)
 #   2) $DHIS2_HOME
 
-# H2 In-Memory setup:
+# H2 In-Memory setup
 
 hibernate.dialect = org.hibernate.dialect.H2Dialect
 hibernate.connection.driver_class = org.h2.Driver
@@ -17,30 +17,28 @@
 hibernate.connection.password =
 hibernate.hbm2ddl.auto = create-drop
 
-# see c3p0-config.xml
-#hibernate.c3p0.min_size = 3
-#hibernate.c3p0.max_size = 20
-#hibernate.c3p0.acquire_increment = 2
-#hibernate.c3p0.timeout = 5000
-#hibernate.c3p0.max_statements = 50
-#hibernate.c3p0.idle_test_period = 300
+# See c3p0-config.xml
+# hibernate.c3p0.min_size = 3
+# hibernate.c3p0.max_size = 20
+# hibernate.c3p0.acquire_increment = 2
+# hibernate.c3p0.timeout = 5000
+# hibernate.c3p0.max_statements = 50
+# hibernate.c3p0.idle_test_period = 300
 
 # Caching
 
-hibernate.cache.region.factory_class = org.hibernate.cache.ehcache.EhCacheRegionFactory
 hibernate.cache.use_second_level_cache = true
 hibernate.cache.use_query_cache = true
-
-# hibernate.cache.region.factory_class = net.sf.ehcache.hibernate.EhCacheRegionFactory
-# hibernate.cache.provider_class = org.hibernate.cache.EhCacheProvider
-
-# MySQL setup:
+hibernate.cache.region.factory_class = com.hazelcast.hibernate.HazelcastLocalCacheRegionFactory
+# hibernate.cache.region.factory_class = org.hibernate.cache.ehcache.EhCacheRegionFactory
+
+# MySQL setup
 #
 # hibernate.dialect = org.hibernate.dialect.MySQLDialect
 # hibernate.connection.driver_class = com.mysql.jdbc.Driver
 # hibernate.connection.url = jdbc:mysql://localhost/dhis2?useUnicode=true&characterEncoding=UTF-8
 
-# PostgreSQL setup:
+# PostgreSQL setup
 #
 # hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
 # hibernate.connection.driver_class = org.postgresql.Driver

=== modified file 'dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileClientController.java'
--- dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileClientController.java	2014-05-05 10:16:05 +0000
+++ dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileClientController.java	2014-05-12 09:56:39 +0000
@@ -83,8 +83,8 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "/{version}" )
     @ResponseBody
-    public OrgUnits getOrgUnitsForUser( HttpServletRequest request, 
-        @PathVariable String version )
+    public OrgUnits getOrgUnitsForUser( HttpServletRequest request, @PathVariable
+    String version )
         throws NotAllowedException
     {
         User user = currentUserService.getCurrentUser();
@@ -108,8 +108,8 @@
 
     @RequestMapping( method = RequestMethod.GET, value = "/{version}/LWUIT" )
     @ResponseBody
-    public OrgUnits getOrgUnitsForUserLWUIT( HttpServletRequest request, 
-        @PathVariable String version )
+    public OrgUnits getOrgUnitsForUserLWUIT( HttpServletRequest request, @PathVariable
+    String version )
         throws NotAllowedException
     {
         User user = currentUserService.getCurrentUser();
@@ -147,7 +147,8 @@
         orgUnit.setChangeUpdateDataSetLangUrl( getUrl( request, unit.getId(), "changeLanguageDataSet" ) );
         orgUnit.setSearchUrl( getUrl( request, unit.getId(), "search" ) );
         orgUnit.setUpdateNewVersionUrl( getUrl( request, unit.getId(), "updateNewVersionUrl" ) );
-        orgUnit.setSendFeedbackUrl( getUrl(request, unit.getId(), "sendFeedback") );
+        orgUnit.setSendFeedbackUrl( getUrl( request, unit.getId(), "sendFeedback" ) );
+        orgUnit.setFindUserUrl( getUrl( request, unit.getId(), "findUser" ) );
         orgUnit.setUpdateContactUrl( getUrl( request, unit.getId(), "updateContactForMobile" ) );
         orgUnit.setFindPatientUrl( getUrl( request, unit.getId(), "findPatient" ) );
         orgUnit.setRegisterPersonUrl( getUrl( request, unit.getId(), "registerPerson" ) );
@@ -161,7 +162,8 @@
         orgUnit.setFindLostToFollowUpUrl( getUrl( request, unit.getId(), "findLostToFollowUp" ) );
         orgUnit.setHandleLostToFollowUpUrl( getUrl( request, unit.getId(), "handleLostToFollowUp" ) );
         orgUnit.setGenerateRepeatableEventUrl( getUrl( request, unit.getId(), "generateRepeatableEvent" ) );
-        orgUnit.setUploadSingleEventWithoutRegistration(getUrl( request, unit.getId(), "uploadSingleEventWithoutRegistration" ));
+        orgUnit.setUploadSingleEventWithoutRegistration( getUrl( request, unit.getId(),
+            "uploadSingleEventWithoutRegistration" ) );
 
         // generate URL for download new version
         String full = UrlUtils.buildFullRequestUrl( request );

=== modified file 'dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileOrganisationUnitController.java'
--- dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileOrganisationUnitController.java	2014-05-05 10:16:05 +0000
+++ dhis-2/dhis-web/dhis-web-api-mobile/src/main/java/org/hisp/dhis/api/mobile/controller/MobileOrganisationUnitController.java	2014-05-12 09:56:39 +0000
@@ -44,11 +44,12 @@
 import org.hisp.dhis.api.mobile.model.DataSetValue;
 import org.hisp.dhis.api.mobile.model.DataSetValueList;
 import org.hisp.dhis.api.mobile.model.DataStreamSerializable;
+import org.hisp.dhis.api.mobile.model.Message;
 import org.hisp.dhis.api.mobile.model.MobileModel;
 import org.hisp.dhis.api.mobile.model.ModelList;
+import org.hisp.dhis.api.mobile.model.Recipient;
 import org.hisp.dhis.api.mobile.model.SMSCode;
 import org.hisp.dhis.api.mobile.model.SMSCommand;
-import org.hisp.dhis.api.mobile.model.Message;
 import org.hisp.dhis.api.mobile.model.LWUITmodel.LostEvent;
 import org.hisp.dhis.api.mobile.model.LWUITmodel.Notification;
 import org.hisp.dhis.api.mobile.model.LWUITmodel.Patient;
@@ -560,4 +561,17 @@
 
     }
 
+    @RequestMapping( method = RequestMethod.GET, value = "{clientVersion}/orgUnits/{id}/findUser" )
+    @ResponseBody
+    public Recipient findUser( String clientVersion, @PathVariable
+    int id, @RequestHeader( "name" )
+    String keyword )
+        throws NotAllowedException
+    {
+        Recipient recipient = new Recipient();
+        recipient.setClientVersion( clientVersion );
+        recipient.setUsers( activityReportingService.findUser( keyword ) );
+        return recipient;
+    }
+
 }

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/EventAnalyticsController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/EventAnalyticsController.java	2014-03-26 09:26:06 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/EventAnalyticsController.java	2014-05-12 09:56:39 +0000
@@ -85,11 +85,13 @@
         @RequestParam(required=false) boolean skipMeta,
         @RequestParam(required=false) boolean hierarchyMeta,
         @RequestParam(required=false) Integer limit,
+        @RequestParam(required=false) boolean uniqueInstances,
         @RequestParam(required=false) SortOrder sortOrder,
         Model model,
         HttpServletResponse response ) throws Exception
     {
-        EventQueryParams params = analyticsService.getFromUrl( program, stage, startDate, endDate, dimension, filter, skipMeta, hierarchyMeta, sortOrder, limit, i18nManager.getI18nFormat() );
+        EventQueryParams params = analyticsService.getFromUrl( program, stage, startDate, endDate, dimension, filter, 
+            skipMeta, hierarchyMeta, sortOrder, limit, uniqueInstances, i18nManager.getI18nFormat() );
         
         contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_JSON, CacheStrategy.RESPECT_SYSTEM_SETTING );
         Grid grid = analyticsService.getAggregatedEventData( params );
@@ -109,11 +111,13 @@
         @RequestParam(required=false) boolean skipMeta,
         @RequestParam(required=false) boolean hierarchyMeta,
         @RequestParam(required=false) Integer limit,
+        @RequestParam(required=false) boolean uniqueInstances,
         @RequestParam(required=false) SortOrder sortOrder,
         Model model,
         HttpServletResponse response ) throws Exception
     {
-        EventQueryParams params = analyticsService.getFromUrl( program, stage, startDate, endDate, dimension, filter, skipMeta, hierarchyMeta, sortOrder, limit, i18nManager.getI18nFormat() );
+        EventQueryParams params = analyticsService.getFromUrl( program, stage, startDate, endDate, dimension, filter, 
+            skipMeta, hierarchyMeta, sortOrder, limit, uniqueInstances, i18nManager.getI18nFormat() );
         
         contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_XML, CacheStrategy.RESPECT_SYSTEM_SETTING, "events.xml", false );
         Grid grid = analyticsService.getAggregatedEventData( params );
@@ -131,11 +135,13 @@
         @RequestParam(required=false) boolean skipMeta,
         @RequestParam(required=false) boolean hierarchyMeta,
         @RequestParam(required=false) Integer limit,
+        @RequestParam(required=false) boolean uniqueInstances,
         @RequestParam(required=false) SortOrder sortOrder,
         Model model,
         HttpServletResponse response ) throws Exception
     {
-        EventQueryParams params = analyticsService.getFromUrl( program, stage, startDate, endDate, dimension, filter, skipMeta, hierarchyMeta, sortOrder, limit, i18nManager.getI18nFormat() );
+        EventQueryParams params = analyticsService.getFromUrl( program, stage, startDate, endDate, dimension, filter, 
+            skipMeta, hierarchyMeta, sortOrder, limit, uniqueInstances, i18nManager.getI18nFormat() );
         
         contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_EXCEL, CacheStrategy.RESPECT_SYSTEM_SETTING, "events.xls", true );
         Grid grid = analyticsService.getAggregatedEventData( params );
@@ -153,11 +159,13 @@
         @RequestParam(required=false) boolean skipMeta,
         @RequestParam(required=false) boolean hierarchyMeta,
         @RequestParam(required=false) Integer limit,
+        @RequestParam(required=false) boolean uniqueInstances,
         @RequestParam(required=false) SortOrder sortOrder,
         Model model,
         HttpServletResponse response ) throws Exception
     {
-        EventQueryParams params = analyticsService.getFromUrl( program, stage, startDate, endDate, dimension, filter, skipMeta, hierarchyMeta, sortOrder, limit, i18nManager.getI18nFormat() );
+        EventQueryParams params = analyticsService.getFromUrl( program, stage, startDate, endDate, dimension, filter, 
+            skipMeta, hierarchyMeta, sortOrder, limit, uniqueInstances, i18nManager.getI18nFormat() );
         
         contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_CSV, CacheStrategy.RESPECT_SYSTEM_SETTING, "events.csv", true );
         Grid grid = analyticsService.getAggregatedEventData( params );
@@ -175,11 +183,13 @@
         @RequestParam(required=false) boolean skipMeta,
         @RequestParam(required=false) boolean hierarchyMeta,
         @RequestParam(required=false) Integer limit,
+        @RequestParam(required=false) boolean uniqueInstances,
         @RequestParam(required=false) SortOrder sortOrder,
         Model model,
         HttpServletResponse response ) throws Exception
     {
-        EventQueryParams params = analyticsService.getFromUrl( program, stage, startDate, endDate, dimension, filter, skipMeta, hierarchyMeta, sortOrder, limit, i18nManager.getI18nFormat() );
+        EventQueryParams params = analyticsService.getFromUrl( program, stage, startDate, endDate, dimension, filter, 
+            skipMeta, hierarchyMeta, sortOrder, limit, uniqueInstances, i18nManager.getI18nFormat() );
         
         contextUtils.configureResponse( response, ContextUtils.CONTENT_TYPE_HTML, CacheStrategy.RESPECT_SYSTEM_SETTING, "events.html", false );
         Grid grid = analyticsService.getAggregatedEventData( params );

=== modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/SystemController.java'
--- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/SystemController.java	2014-04-25 13:14:41 +0000
+++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/SystemController.java	2014-05-12 09:56:39 +0000
@@ -29,6 +29,9 @@
  */
 
 import org.hisp.dhis.api.utils.ContextUtils;
+import org.hisp.dhis.calendar.Calendar;
+import org.hisp.dhis.calendar.CalendarService;
+import org.hisp.dhis.calendar.DateIntervalType;
 import org.hisp.dhis.common.CodeGenerator;
 import org.hisp.dhis.dxf2.metadata.ImportSummary;
 import org.hisp.dhis.dxf2.utils.JacksonUtils;

=== removed file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/LoadAnonymousProgramsAction.java'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/LoadAnonymousProgramsAction.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/LoadAnonymousProgramsAction.java	1970-01-01 00:00:00 +0000
@@ -1,125 +0,0 @@
-package org.hisp.dhis.caseentry.action.caseentry;
-
-/*
- * Copyright (c) 2004-2014, University of Oslo
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * Neither the name of the HISP project nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.hisp.dhis.common.comparator.IdentifiableObjectNameComparator;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.organisationunit.OrganisationUnitLevel;
-import org.hisp.dhis.organisationunit.OrganisationUnitService;
-import org.hisp.dhis.ouwt.manager.OrganisationUnitSelectionManager;
-import org.hisp.dhis.program.Program;
-import org.hisp.dhis.program.ProgramService;
-
-import com.opensymphony.xwork2.Action;
-
-/**
- * @author Chau Thu Tran
- * 
- * @version $Id: LoadAnonymousProgramsAction.java Dec 14, 2011 9:12:34 AM $
- */
-public class LoadAnonymousProgramsAction
-    implements Action
-{
-    // -------------------------------------------------------------------------
-    // Dependencies
-    // -------------------------------------------------------------------------
-
-    private OrganisationUnitSelectionManager selectionManager;
-
-    public void setSelectionManager( OrganisationUnitSelectionManager selectionManager )
-    {
-        this.selectionManager = selectionManager;
-    }
-
-    private OrganisationUnitService organisationUnitService;
-
-    public void setOrganisationUnitService( OrganisationUnitService organisationUnitService )
-    {
-        this.organisationUnitService = organisationUnitService;
-    }
-
-    private ProgramService programService;
-
-    public void setProgramService( ProgramService programService )
-    {
-        this.programService = programService;
-    }
-
-    // -------------------------------------------------------------------------
-    // Output
-    // -------------------------------------------------------------------------
-
-    private OrganisationUnit orgunit;
-
-    public OrganisationUnit getOrgunit()
-    {
-        return orgunit;
-    }
-
-    private List<Program> programs;
-
-    public List<Program> getPrograms()
-    {
-        return programs;
-    }
-
-    private List<OrganisationUnitLevel> levels;
-
-    public List<OrganisationUnitLevel> getLevels()
-    {
-        return levels;
-    }
-
-    // -------------------------------------------------------------------------
-    // Implementation Action
-    // -------------------------------------------------------------------------
-
-    public String execute()
-        throws Exception
-    {
-        orgunit = selectionManager.getSelectedOrganisationUnit();
-
-        if ( orgunit != null )
-        {
-            programs = new ArrayList<Program>( programService.getPrograms( Program.SINGLE_EVENT_WITHOUT_REGISTRATION,
-                orgunit ) );
-            programs.retainAll( programService.getProgramsByCurrentUser());
-            
-            Collections.sort( programs, IdentifiableObjectNameComparator.INSTANCE );
-        }
-
-        levels = organisationUnitService.getOrganisationUnitLevels();
-
-        return SUCCESS;
-    }
-}

=== removed file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/RemoveEmptyEventsAction.java'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/RemoveEmptyEventsAction.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/RemoveEmptyEventsAction.java	1970-01-01 00:00:00 +0000
@@ -1,103 +0,0 @@
-package org.hisp.dhis.caseentry.action.caseentry;
-
-/*
- * Copyright (c) 2004-2014, University of Oslo
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * Neither the name of the HISP project nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.ouwt.manager.OrganisationUnitSelectionManager;
-import org.hisp.dhis.program.ProgramStage;
-import org.hisp.dhis.program.ProgramStageInstanceService;
-import org.hisp.dhis.program.ProgramStageService;
-
-import com.opensymphony.xwork2.Action;
-
-/**
- * @author Chau Thu Tran
- * @version RemoveEmptyEventsAction.java Jul 3, 2012 $
- */
-public class RemoveEmptyEventsAction
-    implements Action
-{
-    // -------------------------------------------------------------------------
-    // Dependencies
-    // -------------------------------------------------------------------------
-
-    private ProgramStageService programStageService;
-
-    public void setProgramStageService( ProgramStageService programStageService )
-    {
-        this.programStageService = programStageService;
-    }
-
-    private ProgramStageInstanceService programStageInstanceService;
-
-    public void setProgramStageInstanceService( ProgramStageInstanceService programStageInstanceService )
-    {
-        this.programStageInstanceService = programStageInstanceService;
-    }
-
-    private OrganisationUnitSelectionManager selectionManager;
-
-    public void setSelectionManager( OrganisationUnitSelectionManager selectionManager )
-    {
-        this.selectionManager = selectionManager;
-    }
-
-    // -------------------------------------------------------------------------
-    // Input/Output
-    // -------------------------------------------------------------------------
-
-    private Integer programStageId;
-
-    public void setProgramStageId( Integer programStageId )
-    {
-        this.programStageId = programStageId;
-    }
-
-    // -------------------------------------------------------------------------
-    // Implementation Action
-    // -------------------------------------------------------------------------
-
-    public String execute()
-        throws Exception
-    {
-        if ( programStageId == null )
-        {
-            return INPUT;
-        }
-
-        ProgramStage programStage = programStageService.getProgramStage( programStageId );
-
-        OrganisationUnit organisationUnit = selectionManager.getSelectedOrganisationUnit();
-
-        programStageInstanceService.removeEmptyEvents( programStage, organisationUnit );
-
-        return SUCCESS;
-    }
-
-}

=== removed file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/SearchEventsAction.java'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/SearchEventsAction.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/caseentry/SearchEventsAction.java	1970-01-01 00:00:00 +0000
@@ -1,457 +0,0 @@
-package org.hisp.dhis.caseentry.action.caseentry;
-
-/*
- * Copyright (c) 2004-2014, University of Oslo
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * Neither the name of the HISP project nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.hibernate.exception.SQLGrammarException;
-import org.hisp.dhis.common.Grid;
-import org.hisp.dhis.dataelement.DataElement;
-import org.hisp.dhis.dataelement.DataElementService;
-import org.hisp.dhis.i18n.I18n;
-import org.hisp.dhis.i18n.I18nFormat;
-import org.hisp.dhis.organisationunit.OrganisationUnit;
-import org.hisp.dhis.organisationunit.OrganisationUnitService;
-import org.hisp.dhis.paging.ActionPagingSupport;
-import org.hisp.dhis.program.ProgramStage;
-import org.hisp.dhis.program.ProgramStageInstance;
-import org.hisp.dhis.program.ProgramStageInstanceService;
-import org.hisp.dhis.program.ProgramStageService;
-import org.hisp.dhis.program.TabularEventColumn;
-import org.hisp.dhis.system.util.ConversionUtils;
-import org.hisp.dhis.system.util.TextUtils;
-import org.hisp.dhis.trackedentity.TrackedEntityAttribute;
-import org.hisp.dhis.user.CurrentUserService;
-
-/**
- * @author Chau Thu Tran
- * @version $ SearchEventsAction.java Nov 22, 2013 1:06:04 PM $
- */
-public class SearchEventsAction
-    extends ActionPagingSupport<ProgramStageInstance>
-{
-    // -------------------------------------------------------------------------
-    // Dependencies
-    // -------------------------------------------------------------------------
-
-    private OrganisationUnitService organisationUnitService;
-
-    public void setOrganisationUnitService( OrganisationUnitService organisationUnitService )
-    {
-        this.organisationUnitService = organisationUnitService;
-    }
-
-    private ProgramStageService programStageService;
-
-    public void setProgramStageService( ProgramStageService programStageService )
-    {
-        this.programStageService = programStageService;
-    }
-
-    private DataElementService dataElementService;
-
-    public void setDataElementService( DataElementService dataElementService )
-    {
-        this.dataElementService = dataElementService;
-    }
-
-    private ProgramStageInstanceService programStageInstanceService;
-
-    public void setProgramStageInstanceService( ProgramStageInstanceService programStageInstanceService )
-    {
-        this.programStageInstanceService = programStageInstanceService;
-    }
-
-    private CurrentUserService currentUserService;
-
-    public void setCurrentUserService( CurrentUserService currentUserService )
-    {
-        this.currentUserService = currentUserService;
-    }
-
-    // -------------------------------------------------------------------------
-    // Input/Output
-    // -------------------------------------------------------------------------
-
-    private List<TrackedEntityAttribute> attributes = new ArrayList<TrackedEntityAttribute>();
-
-    public List<TrackedEntityAttribute> getAttributes()
-    {
-        return attributes;
-    }
-
-    private Collection<String> orgunitIds = new HashSet<String>();
-
-    public void setOrgunitIds( Collection<String> orgunitIds )
-    {
-        this.orgunitIds = orgunitIds;
-    }
-
-    private Integer programStageId;
-
-    public void setProgramStageId( Integer programStageId )
-    {
-        this.programStageId = programStageId;
-    }
-
-    private String startDate;
-
-    public void setStartDate( String startDate )
-    {
-        this.startDate = startDate;
-    }
-
-    private String endDate;
-
-    public void setEndDate( String endDate )
-    {
-        this.endDate = endDate;
-    }
-
-    private List<String> values = new ArrayList<String>();
-
-    public List<String> getValues()
-    {
-        return values;
-    }
-
-    private List<String> filterValues = new ArrayList<String>();
-
-    public void setFilterValues( List<String> filterValues )
-    {
-        this.filterValues = filterValues;
-    }
-
-    private Boolean userOrganisationUnit;
-
-    public void setUserOrganisationUnit( Boolean userOrganisationUnit )
-    {
-        this.userOrganisationUnit = userOrganisationUnit;
-    }
-
-    private Boolean userOrganisationUnitChildren;
-
-    public void setUserOrganisationUnitChildren( Boolean userOrganisationUnitChildren )
-    {
-        this.userOrganisationUnitChildren = userOrganisationUnitChildren;
-    }
-
-    private Grid grid;
-
-    public Grid getGrid()
-    {
-        return grid;
-    }
-
-    private Integer total;
-
-    public void setTotal( Integer total )
-    {
-        this.total = total;
-    }
-
-    public Integer getTotal()
-    {
-        return total;
-    }
-
-    private I18n i18n;
-
-    public void setI18n( I18n i18n )
-    {
-        this.i18n = i18n;
-    }
-
-    private I18nFormat format;
-
-    public void setFormat( I18nFormat format )
-    {
-        this.format = format;
-    }
-
-    private Boolean useCompletedEvents;
-
-    public void setUseCompletedEvents( Boolean useCompletedEvents )
-    {
-        this.useCompletedEvents = useCompletedEvents;
-    }
-
-    private List<DataElement> dataElements = new ArrayList<DataElement>();
-
-    public List<DataElement> getDataElements()
-    {
-        return dataElements;
-    }
-
-    private String type;
-
-    public void setType( String type )
-    {
-        this.type = type;
-    }
-
-    private String facilityLB; // All, children, current
-
-    public void setFacilityLB( String facilityLB )
-    {
-        this.facilityLB = facilityLB;
-    }
-
-    private List<String> valueTypes = new ArrayList<String>();
-
-    public List<String> getValueTypes()
-    {
-        return valueTypes;
-    }
-
-    private Map<Integer, List<String>> mapSuggestedValues = new HashMap<Integer, List<String>>();
-
-    public Map<Integer, List<String>> getMapSuggestedValues()
-    {
-        return mapSuggestedValues;
-    }
-
-    private String message;
-
-    public String getMessage()
-    {
-        return message;
-    }
-
-    private Boolean useFormNameDataElement;
-
-    public void setUseFormNameDataElement( Boolean useFormNameDataElement )
-    {
-        this.useFormNameDataElement = useFormNameDataElement;
-    }
-
-    // -------------------------------------------------------------------------
-    // Implementation Action
-    // -------------------------------------------------------------------------
-
-    public String execute()
-        throws Exception
-    {
-        if ( programStageId == null )
-        {
-            return INPUT;
-        }
-
-        // ---------------------------------------------------------------------
-        // Get user orgunits
-        // ---------------------------------------------------------------------
-
-        Set<OrganisationUnit> ous = new HashSet<OrganisationUnit>( organisationUnitService.getOrganisationUnitsByUid( orgunitIds ) );
-        Set<Integer> orgUnitIds = new HashSet<Integer>( ConversionUtils.getIdentifiers( OrganisationUnit.class, ous ) );
-
-        if ( userOrganisationUnit || userOrganisationUnitChildren )
-        {
-            Collection<OrganisationUnit> userOrgunits = currentUserService.getCurrentUser().getOrganisationUnits();
-            orgUnitIds = new HashSet<Integer>();
-
-            if ( userOrganisationUnit )
-            {
-                for ( OrganisationUnit userOrgunit : userOrgunits )
-                {
-                    orgUnitIds.add( userOrgunit.getId() );
-                }
-            }
-
-            if ( userOrganisationUnitChildren )
-            {
-                for ( OrganisationUnit userOrgunit : userOrgunits )
-                {
-                    if ( userOrgunit.hasChild() )
-                    {
-                        for ( OrganisationUnit childOrgunit : userOrgunit.getSortedChildren() )
-                        {
-                            orgUnitIds.add( childOrgunit.getId() );
-                        }
-                    }
-                }
-            }
-        }
-
-        // ---------------------------------------------------------------------
-        // Get orgunitIds
-        // ---------------------------------------------------------------------
-
-        Set<Integer> organisationUnits = new HashSet<Integer>();
-
-        if ( facilityLB.equals( "selected" ) )
-        {
-            organisationUnits.addAll( orgUnitIds );
-        }
-        else if ( facilityLB.equals( "childrenOnly" ) )
-        {
-            for ( Integer orgunitId : orgUnitIds )
-            {
-                OrganisationUnit selectedOrgunit = organisationUnitService.getOrganisationUnit( orgunitId );
-                organisationUnits.addAll( organisationUnitService.getOrganisationUnitHierarchy()
-                    .getChildren( orgunitId ) );
-                organisationUnits.remove( selectedOrgunit );
-            }
-        }
-        else
-        {
-            for ( Integer orgunitId : orgUnitIds )
-            {
-                organisationUnits.addAll( organisationUnitService.getOrganisationUnitHierarchy()
-                    .getChildren( orgunitId ) );
-            }
-        }
-
-        // ---------------------------------------------------------------------
-        // Get program-stage, start-date, end-date
-        // ---------------------------------------------------------------------
-
-        ProgramStage programStage = programStageService.getProgramStage( programStageId );
-        Date start = format.parseDate( startDate );
-        Date end = format.parseDate( endDate );
-        List<TabularEventColumn> columns = getTableColumns();
-
-        // ---------------------------------------------------------------------
-        // Generate tabular report
-        // ---------------------------------------------------------------------
-        try
-        {
-            if ( type == null ) // Tabular report
-            {
-                total = programStageInstanceService.searchEventsCount( programStage, columns, organisationUnits,
-                    useCompletedEvents, start, end );
-                this.paging = createPaging( total );
-
-                grid = programStageInstanceService.searchEvents( programStage, columns, organisationUnits, start, end,
-                    useCompletedEvents, paging.getStartPos(), paging.getPageSize(), i18n );
-            }
-            // Download as Excel
-            else
-            {
-                grid = programStageInstanceService.searchEvents( programStage, columns, organisationUnits, start, end,
-                    useCompletedEvents, null, null, i18n );
-            }
-        }
-        catch ( SQLGrammarException ex )
-        {
-            message = i18n.getString( "failed_to_get_events" );
-        }
-
-        return type == null ? SUCCESS : type;
-    }
-
-    // -------------------------------------------------------------------------
-    // Supportive methods
-    // -------------------------------------------------------------------------
-
-    private List<TabularEventColumn> getTableColumns()
-    {
-        List<TabularEventColumn> columns = new ArrayList<TabularEventColumn>();
-
-        int index = 0;
-
-        for ( String filterValue : filterValues )
-        {
-            String[] values = filterValue.split( "_" );
-
-            if ( values != null && values.length >= 3 )
-            {
-                String prefix = values[0];
-
-                TabularEventColumn column = new TabularEventColumn();
-                column.setPrefix( prefix );
-                column.setIdentifier( values[1] );
-                column.setHidden( Boolean.parseBoolean( values[2] ) );
-
-                column.setOperator( values.length > 3 ? TextUtils.lower( values[3] ) : TextUtils.EMPTY );
-                column.setQuery( values.length > 4 ? TextUtils.lower( values[4] ) : TextUtils.EMPTY );
-
-                if ( "de".equals( prefix ) )
-                {
-                    int objectId = Integer.parseInt( values[1] );
-                    DataElement dataElement = dataElementService.getDataElement( objectId );
-                    if ( dataElement.getType().equals( DataElement.VALUE_TYPE_INT ) )
-                    {
-                        column.setPrefix( "numberDe" );
-                    }
-                    dataElements.add( dataElement );
-
-                    String valueType = dataElement.getOptionSet() != null ? "optionSet" : dataElement
-                        .getType();
-                    valueTypes.add( valueType );
-                    mapSuggestedValues.put( index, getSuggestedDataElementValues( dataElement ) );
-                    if ( dataElement.getType().equals( DataElement.VALUE_TYPE_DATE ) )
-                    {
-                        column.setDateType( true );
-                    }
-
-                    if ( useFormNameDataElement != null && useFormNameDataElement )
-                    {
-                        column.setName( dataElement.getFormNameFallback() );
-                    }
-                    else
-                    {
-                        column.setName( dataElement.getDisplayName() );
-                    }
-                }
-
-                columns.add( column );
-
-                index++;
-            }
-        }
-
-        return columns;
-    }
-
-    private List<String> getSuggestedDataElementValues( DataElement dataElement )
-    {
-        List<String> values = new ArrayList<String>();
-        String valueType = dataElement.getType();
-
-        if ( valueType.equals( DataElement.VALUE_TYPE_BOOL ) )
-        {
-            values.add( i18n.getString( "yes" ) );
-            values.add( i18n.getString( "no" ) );
-        }
-        if ( valueType.equals( DataElement.VALUE_TYPE_TRUE_ONLY ) )
-        {
-            values.add( i18n.getString( "" ) );
-            values.add( i18n.getString( "yes" ) );
-        }
-
-        return values;
-    }
-}

=== modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/AddTrackedEntityInstanceAction.java'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/AddTrackedEntityInstanceAction.java	2014-04-12 12:12:30 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/AddTrackedEntityInstanceAction.java	2014-05-12 09:56:39 +0000
@@ -92,7 +92,7 @@
     // Input
     // -------------------------------------------------------------------------
 
-    private Integer representativeId;
+    private String representativeId;
 
     private Integer relationshipTypeId;
 
@@ -269,7 +269,7 @@
         this.attributeService = attributeService;
     }
 
-    public void setRepresentativeId( Integer representativeId )
+    public void setRepresentativeId( String representativeId )
     {
         this.representativeId = representativeId;
     }

=== modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/GetAttributesByProgramAction.java'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/GetAttributesByProgramAction.java	2014-04-12 11:34:06 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/GetAttributesByProgramAction.java	2014-05-12 09:56:39 +0000
@@ -29,7 +29,6 @@
  */
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -115,18 +114,14 @@
     public String execute()
         throws Exception
     {
-        if ( id != null )
+        if ( id != null && !id.isEmpty() )
         {
             program = programService.getProgram( id );
         }
         else
         {
             attributes = new ArrayList<TrackedEntityAttribute>(
-                attributeService.getTrackedEntityAttributesWithoutProgram() );
-            Collection<TrackedEntityAttribute> attribuesInList = attributeService
-                .getTrackedEntityAttributesDisplayInList( true );
-            attributes.removeAll( attribuesInList );
-            attributes.addAll( attribuesInList );
+                attributeService.getTrackedEntityAttributesDisplayInList( true ) );
         }
 
         Collections.sort( attributes, IdentifiableObjectNameComparator.INSTANCE );

=== removed file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/SearchPersonAction.java'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/SearchPersonAction.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/SearchPersonAction.java	1970-01-01 00:00:00 +0000
@@ -1,135 +0,0 @@
-package org.hisp.dhis.caseentry.action.trackedentity;
-
-/*
- * Copyright (c) 2004-2014, University of Oslo
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * Neither the name of the HISP project nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.hisp.dhis.trackedentity.TrackedEntityInstance;
-import org.hisp.dhis.trackedentity.TrackedEntityInstanceService;
-import org.hisp.dhis.trackedentityattributevalue.TrackedEntityAttributeValue;
-import org.hisp.dhis.trackedentityattributevalue.TrackedEntityAttributeValueService;
-
-import com.opensymphony.xwork2.Action;
-
-/**
- * @author Viet
- * @version $Id$
- */
-
-public class SearchPersonAction
-    implements Action
-{
-    // -------------------------------------------------------------------------
-    // Dependencies
-    // -------------------------------------------------------------------------
-
-    private TrackedEntityInstanceService entityInstanceService;
-
-    private TrackedEntityAttributeValueService attributeValueService;
-
-    // -------------------------------------------------------------------------
-    // Input
-    // -------------------------------------------------------------------------
-
-    private Integer attributeId;
-
-    private String searchValue;
-
-    // -------------------------------------------------------------------------
-    // Output
-    // -------------------------------------------------------------------------
-
-    private Map<String, String> attributeValueMap = new HashMap<String, String>();
-
-    private Collection<TrackedEntityInstance> entityInstances;
-
-    // -------------------------------------------------------------------------
-    // Action implementation
-    // -------------------------------------------------------------------------
-
-    public String execute()
-        throws Exception
-    {
-        entityInstances = entityInstanceService.getTrackedEntityInstance(  attributeId, searchValue );
-
-        if ( entityInstances != null && entityInstances.size() > 0 )
-        {
-            for ( TrackedEntityInstance p : entityInstances )
-            {
-                Collection<TrackedEntityAttributeValue> attributeValues = attributeValueService
-                    .getTrackedEntityAttributeValues( p );
-
-                for ( TrackedEntityAttributeValue attributeValue : attributeValues )
-                {
-                    attributeValueMap.put(
-                        p.getId() + "_" + attributeValue.getAttribute().getId(),
-                        attributeValue.getValue() );
-                }
-            }
-        }
-        
-        return SUCCESS;
-    }
-
-    // -------------------------------------------------------------------------
-    // Getter/Setter
-    // -------------------------------------------------------------------------
-
-    public void setAttributeId( Integer attributeId )
-    {
-        this.attributeId = attributeId;
-    }
-
-    public void setEntityInstanceService( TrackedEntityInstanceService entityInstanceService )
-    {
-        this.entityInstanceService = entityInstanceService;
-    }
-
-    public Collection<TrackedEntityInstance> getEntityInstances()
-    {
-        return entityInstances;
-    }
-
-    public Map<String, String> getAttributeValueMap()
-    {
-        return attributeValueMap;
-    }
-
-    public void setAttributeValueService( TrackedEntityAttributeValueService attributeValueService )
-    {
-        this.attributeValueService = attributeValueService;
-    }
-
-    public void setSearchValue( String searchValue )
-    {
-        this.searchValue = searchValue;
-    }
-}

=== modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/SelectAction.java'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/SelectAction.java	2014-04-11 00:54:51 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/SelectAction.java	2014-05-12 09:56:39 +0000
@@ -29,7 +29,6 @@
  */
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
@@ -127,12 +126,9 @@
     public String execute()
         throws Exception
     {
-
         organisationUnit = selectionManager.getSelectedOrganisationUnit();
 
-        Collection<TrackedEntityAttribute> _attributes = attributeService.getTrackedEntityAttributesWithoutProgram();
-        _attributes.addAll( attributeService.getTrackedEntityAttributesDisplayInList( true ) );
-        attributes = new ArrayList<TrackedEntityAttribute>( _attributes );
+        attributes = new ArrayList<TrackedEntityAttribute>( attributeService.getTrackedEntityAttributesDisplayInList( true )  );
         Collections.sort( attributes, IdentifiableObjectNameComparator.INSTANCE );
 
         trackedEntities = new ArrayList<TrackedEntity>( trackedEntityService.getAllTrackedEntity() );

=== modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/UpdateTrackedEntityInstanceAction.java'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/UpdateTrackedEntityInstanceAction.java	2014-04-12 12:12:30 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/java/org/hisp/dhis/caseentry/action/trackedentity/UpdateTrackedEntityInstanceAction.java	2014-05-12 09:56:39 +0000
@@ -79,7 +79,7 @@
 
     private Integer id;
 
-    private Integer representativeId;
+    private String representativeId;
 
     private Integer relationshipTypeId;
 
@@ -207,7 +207,7 @@
         return entityInstance;
     }
 
-    public void setRepresentativeId( Integer representativeId )
+    public void setRepresentativeId( String representativeId )
     {
         this.representativeId = representativeId;
     }

=== modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml	2014-04-30 12:57:22 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/META-INF/dhis/beans.xml	2014-05-12 09:56:39 +0000
@@ -325,17 +325,6 @@
 	</bean>
 
 	<bean
-		id="org.hisp.dhis.caseentry.action.caseentry.LoadAnonymousProgramsAction"
-		class="org.hisp.dhis.caseentry.action.caseentry.LoadAnonymousProgramsAction"
-		scope="prototype">
-		<property name="selectionManager"
-			ref="org.hisp.dhis.ouwt.manager.OrganisationUnitSelectionManager" />
-		<property name="organisationUnitService"
-			ref="org.hisp.dhis.organisationunit.OrganisationUnitService" />
-		<property name="programService" ref="org.hisp.dhis.program.ProgramService" />
-	</bean>
-
-	<bean
 		id="org.hisp.dhis.caseentry.action.caseentry.RemoveCurrentEncounterAction"
 		class="org.hisp.dhis.caseentry.action.caseentry.RemoveCurrentEncounterAction"
 		scope="prototype">
@@ -362,26 +351,8 @@
 		<property name="programStageService" ref="org.hisp.dhis.program.ProgramStageService" />
 	</bean>
 
-	<bean
-		id="org.hisp.dhis.caseentry.action.caseentry.RemoveEmptyEventsAction"
-		class="org.hisp.dhis.caseentry.action.caseentry.RemoveEmptyEventsAction"
-		scope="prototype">
-		<property name="programStageService" ref="org.hisp.dhis.program.ProgramStageService" />
-		<property name="programStageInstanceService"
-			ref="org.hisp.dhis.program.ProgramStageInstanceService" />
-		<property name="selectionManager"
-			ref="org.hisp.dhis.ouwt.manager.OrganisationUnitSelectionManager" />
-	</bean>
-
 	<!-- Tracked Entity Instance -->
 
-	<bean id="org.hisp.dhis.caseentry.action.trackedentity.SearchPersonAction"
-		class="org.hisp.dhis.caseentry.action.trackedentity.SearchPersonAction">
-		<property name="entityInstanceService" ref="org.hisp.dhis.trackedentity.TrackedEntityInstanceService" />
-		<property name="attributeValueService"
-			ref="org.hisp.dhis.trackedentityattributevalue.TrackedEntityAttributeValueService" />
-	</bean>
-
 	<bean id="org.hisp.dhis.caseentry.action.trackedentity.SelectAction"
 		class="org.hisp.dhis.caseentry.action.trackedentity.SelectAction" scope="prototype">
 		<property name="selectionManager"
@@ -687,18 +658,6 @@
 		scope="prototype">
 	</bean>
 
-	<bean id="org.hisp.dhis.caseentry.action.caseentry.SearchEventsAction"
-		class="org.hisp.dhis.caseentry.action.caseentry.SearchEventsAction"
-		scope="prototype">
-		<property name="programStageService" ref="org.hisp.dhis.program.ProgramStageService" />
-		<property name="programStageInstanceService"
-			ref="org.hisp.dhis.program.ProgramStageInstanceService" />
-		<property name="organisationUnitService"
-			ref="org.hisp.dhis.organisationunit.OrganisationUnitService" />
-		<property name="dataElementService" ref="org.hisp.dhis.dataelement.DataElementService" />
-		<property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
-	</bean>
-
 	<!-- Reminder -->
 
 	<bean

=== modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/struts.xml'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/struts.xml	2014-04-30 12:57:22 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/resources/struts.xml	2014-05-12 09:56:39 +0000
@@ -212,13 +212,6 @@
 			</result>
 		</action>
 
-		<action name="removeEmptyEvents"
-			class="org.hisp.dhis.caseentry.action.caseentry.RemoveEmptyEventsAction">
-			<result name="success" type="velocity-json">
-				/dhis-web-commons/ajax/jsonResponseSuccess.vm
-			</result>
-		</action>
-
 		<action name="getUsernameList"
 			class="org.hisp.dhis.caseentry.action.caseentry.GetUsernameListAction">
 			<result name="success" type="velocity-json">/dhis-web-caseentry/jsonUsernames.vm
@@ -515,13 +508,6 @@
 			<param name="requiredAuthorities">F_TRACKED_ENTITY_INSTANCE_ADD</param>
 		</action>
 
-		<action name="searchPerson"
-			class="org.hisp.dhis.caseentry.action.trackedentity.SearchPersonAction">
-			<result name="success" type="velocity-xml">responseTrackedEntityInstances.vm
-			</result>
-			<param name="requiredAuthorities">F_TRACKED_ENTITY_INSTANCE_SEARCH</param>
-		</action>
-
 		<action name="addRepresentative"
 			class="org.hisp.dhis.caseentry.action.trackedentity.AddRepresentativeAction">
 			<result name="success" type="velocity-xml">responseRepresentative.vm

=== removed file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/anonymousRegistration.vm'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/anonymousRegistration.vm	2014-04-17 16:00:32 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/anonymousRegistration.vm	1970-01-01 00:00:00 +0000
@@ -1,252 +0,0 @@
-<script type="text/javascript">
-    jQuery( document ).ready( function () {
-        datePickerInRange( 'startDate', 'endDate', true, true );
-        disableCriteriaDiv();
-    } );
-</script>
-
-<h3>$i18n.getString( "anonymous_events_management" ) #openHelp('single_event_without_registration')</h3>
-<h3 id='orgunitNameInfor' name='orgunitNameInfor'></h3>
-<h4 id='programName' name='programName'>fasdfadfa</h4>
-
-<input type='hidden' id='orgunitId' name='orgunitId' value='$orgunit.id'>
-<input type='hidden' id='programStageInstanceId' name='programStageInstanceId' value='0'>
-<input type='hidden' id='programStageId' name='programStageId' class='stage-object-selected'>
-<input type='hidden' id='listAll' name='listAll' value="true">
-
-<select multiple id='displayInReports' name='displayInReports' class='hidden'></select>
-
-<div>
-	<div id='selectDiv'>
-		<table>		
-			<tr>
-				<td><label>$i18n.getString( "registering_unit" )</label></td>
-				<td><input type="text" id='orgunitName' name='orgunitName' #if( $orgunit ) value="$encoder.htmlEncode( $orgunit.name )" #else value="[$i18n.getString( 'please_select_village' )]" #end disabled /></td>
-			</tr>
-			<tr>	       
-				<td>
-				  $i18n.getString("program") <em title="$i18n.getString( "required" )" class="required">*</em></label>
-				</td>		
-				<td>
-					<select type="text" id="programId" name="programId" onchange='getDataElements();'>
-						<option value="" psid="" reportDateDes="$i18n.getString('report_date')">[$i18n.getString("please_select")]</option>
-						#foreach( $program in $programs )
-							#foreach( $programStage in $program.programStages )
-								<option value='$program.id' psid='$programStage.id' reportDateDes="$programStage.reportDateDescription">$program.displayName</option>
-							#end
-						#end
-					</select>
-					<input type='hidden' class='stage-object-selected hidden' />
-				</td>
-				<td colspan="2" style="padding-left: 20px;">
-					<input type="button" class='large-button' id='addBtn' style="width: 145px;" value='$i18n.getString( "add_new" )' onclick="showAddEventForm();" />
-					<input type="button" id='removeBtn' value='$i18n.getString( "remove_empty_events" )' onclick="removeEmptyEvents();" style="width: 145px;" />
-				</td>
-			</tr>
-            <tr><td style="padding-top: 10px;"></td></tr>
-			<tr>
-				<td><label>$i18n.getString('from')</label></td>
-				<td>
-					<input type="text" id='startDate' name='startDate' style="width:260px;" />
-				</td>
-                <td style="padding-left: 20px;">
-                    <input type="checkbox" id="incompleted" name="incompleted" value="true">$i18n.getString("incomplete")</input>
-                </td>
-            </tr>
-            <tr>
-				<td><label>$i18n.getString('to')</label></td>
-				<td>
-					<input type="text" id='endDate' name='endDate' style="width:260px;" />
-				</td>
-				<td style="padding-left: 20px;">
-					<input type="button" class='large-button' style="width: 145px;" id='filterBtn' name="filterBtn" value='$i18n.getString( "show_filter" )' onclick="showFilterForm();" />
-					<input type="button" class='large-button' style="width: 145px;" id='listBtn' value="$i18n.getString( 'search' )" onclick="validateSearchEvents(false);" />
-				</td>
-			</tr>
-			<tr><td>&nbsp;</td></tr>
-			<tr id='minimized-advanced-search' class="hidden">
-				<td align='right' colspan='5' height="50px">
-					$i18n.getString('you_have_active_filters')&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
-					<input type="button" class='normal-button' value="$i18n.getString('show_all')" onclick='showFilterForm()'>
-					<input type="button" class='normal-button' value="$i18n.getString('clear_all')" onclick='removeAllOption()'>&nbsp;
-				</td>
-			</tr>
-		</table>
-		<table id='advanced-search' class='hidden advanced-search'>
-			<col/>
-			<col/>
-			<col/>
-			<col width="180"/>
-			<tr class="hidden">
-				<td id='searchingAttributeIdTD'>
-					<select id="searchObjectId" name="searchObjectId" onchange='dataElementOnChange(this);'></select>
-				</td>
-			</tr>
-			<tbody id='advancedSearchTB'>
-				<tr><td></td></tr>
-				<tr>
-					<td></td>
-					<td></td>
-                <tr/>
-
-                <tr id='advSearchBox0'>
-                    <td>
-                        <select id="searchObjectId" name="searchObjectId" onchange='dataElementOnChange(this);'></select>
-                    </td>
-                    <td>
-                        <input type="text" id="searchText" name="searchText" value="$!searchText">
-                        <input type="button" class='normal-button' name="clearSearchBtn" value='$i18n.getString( "clear" )' onclick="removeAttributeOption('advSearchBox0');" disabled>
-                    </td>
-                </tr>
-
-			</tbody>
-            <tfoot>
-            <tr>
-                <td colspan="2">
-                    <input type="button" class='normal-button' id='addSearchOptionBtn' name='addSearchOptionBtn' value="$i18n.getString('add')" onclick='addAttributeOption()' />
-                    <input type="button" class='normal-button' id='clearAllBtn' name='clearAllBtnaddSearchOptionBtn' value="$i18n.getString('clear_all')" onclick='removeAllOption()' />
-                </td>
-            </tr>
-            </tfoot>
-		</table>
-	</div>
-</div>
-
-<script id="offline-event-template" type="text/template">
-    <tr id="tr<%= programStageInstanceId %>" class="listRow">
-        <td><%= index %></td>
-        <td><%= executionDate %></td>
-
-        <td align="right" style="padding-right:20px;">
-            <% if( !completed ) { %>
-            <span class="incomplete-record" title="Incomplete">&nbsp;!&nbsp;</span>
-            <% } %>
-            <a href="javascript:showUpdateEvent( '<%= programStageInstanceId %>' )" title="Data entry"><img src="images/data_entry.png" alt="Data entry"></a>
-            <a href="javascript:removeEvent( '<%= programStageInstanceId %>' )" title="Remove"><img src="../images/delete.png" alt="Remove"></a>
-        </td>
-    </tr>
-</script>
-
-<script id="no-offline-event-template" type="text/template">
-    <tr class="listRow">
-        <td colspan="3">No offline events</td>
-    </tr>
-</script>
-
-<div id='offlineListDiv'>
-    <table class="listTable hidden">
-        <thead>
-        <tr>
-            <th colspan="4">Offline Events</th>
-        </tr>
-        </thead>
-        <thead>
-        <tr>
-            <th>#</th>
-            <th>Report date</th>
-            <th style="width:100px">Operations</th>
-        </tr>
-        </thead>
-
-        <tbody id="offlineEventList">
-        </tbody>
-    </table>
-</div>
-
-<div id='listDiv'></div>
-
-<div id='dataEntryInfor' class='hidden'>
-	<table style="width:600px; margin-bottom: 0;" class="listTable">
-			<tr>
-				<th style='width:220px' colspan='2'><span id="reportDateDescriptionField2">$i18n.getString( "report_date" )</span> <em title="$i18n.getString( "required" )" class="required">*</em> </th>
-				<th colspan="2"><input type="text" id="executionDate" name="executionDate" onchange="addNewEvent();" style="padding-left: 2px; margin-left:6px;width:300px;" ></th>
-					<script type="text/javascript">
-					   datePickerValid( 'executionDate', false );
-					</script> 
-			</tr>
-	</table> 
-	<div id='dataEntryFormDiv'></div>
-	
-	<div id='actionDiv' class="page inputCriteria" style="width:700px;height:29px;">	
-		<input type="button" id="completeAndNewBtn" onclick="completedAndAddNewEvent();" value="$i18n.getString('complete_and_add_new_event')" style="width:160px;">
-		<input type="button" id="completeBtn" onclick="doComplete()" value="$i18n.getString('complete')">
-		<input type="button" id="uncompleteBtn" onclick="doUnComplete()" value="$i18n.getString('incomplete')">
-		<input type="button" id="validateBtn" value="$i18n.getString('run_validation')" onclick="javascript: runValidation();">
-		<input type="button" id="completeBtn" onclick="removeCurrentEvent();" value="$i18n.getString('remove')">
-	</div>
-</div>
-
-#parse( "dhis-web-commons/loader/loader.vm" )
-
-<script>	
-	var i18n_please_select = '$encoder.jsEscape( $i18n.getString( "please_select" ) , "'")';
-	
-	var i18n_value_must_integer = '$encoder.jsEscape( $i18n.getString( "value_must_integer" ) , "'")';
-	var i18n_value_must_number = '$encoder.jsEscape( $i18n.getString( "value_must_number" ) , "'")';
-	var i18n_value_must_positive_integer = '$encoder.jsEscape( $i18n.getString( "value_must_positive_integer" ) , "'")';
-	var i18n_value_must_negative_integer = '$encoder.jsEscape( $i18n.getString( "value_must_negative_integer" ) , "'")';
-	var i18n_value_must_zero_or_positive_integer = '$encoder.jsEscape( $i18n.getString( "value_must_zero_or_positive_integer" ) , "'")';
-    var i18n_value_must_unit_interval = '$encoder.jsEscape( $i18n.getString( "value_must_unit_interval" ) , "'")';
-    var i18n_invalid_date =   '$encoder.jsEscape( $i18n.getString( "invalid_date" ) , "'")' + ".\n " 
-							+ '$encoder.jsEscape( $i18n.getString( "format_date" ) , "'")' + " '" 
-							+ dateFormat.replace('yy', 'yyyy') + " '" ; 
-    var i18n_saving_value_failed_status_code = '$encoder.jsEscape( $i18n.getString( "saving_value_failed_status_code" ) , "'")';
-    var i18n_saving_value_failed_error_code = '$encoder.jsEscape( $i18n.getString( "saving_value_failed_error_code" ) , "'")';
-    var i18n_searching_tracked_entity_instance_failed = '$encoder.jsEscape( $i18n.getString( "searching_tracked_entity_instance_failed" ) , "'")';
-    var i18n_complete_confirm_message = '$encoder.jsEscape( $i18n.getString( "complete_confirm_message" ) , "'")';
-    var i18n_error_required_field = '$encoder.jsEscape( $i18n.getString( "error_required_field" ) , "'")';
-	var i18n_violate_validation = '$encoder.jsEscape( $i18n.getString( "violate_validation" ) , "'")';
-	var i18n_date_is_greater_then_or_equals_due_date = '$encoder.jsEscape( $i18n.getString( "date_is_greater_then_or_equals_due_date" ) , "'")';
-
-	var i18n_violate_validation = '$encoder.jsEscape( $i18n.getString( "violate_validation" ) , "'")';
-	var i18n_show_all_items = '$encoder.jsEscape( $i18n.getString( "show_all_items" ) , "'")';
-	var i18n_specify_data_element = '$encoder.jsEscape( $i18n.getString( "specify_data_element" ) , "'")';
-	var i18n_comfirm_delete_event = '$encoder.jsEscape( $i18n.getString( "comfirm_delete_event" ) , "'")';
-	var i18n_delete_event_success = '$encoder.jsEscape( $i18n.getString( "delete_event_success" ) , "'")';
-	var i18n_report_date = '$encoder.jsEscape( $i18n.getString( "report_date" ) , "'")';
-	var i18n_search_events_by_dataelements = '$encoder.jsEscape( $i18n.getString( "search_events_by_dataelements" ) , "'")';
-	var i18n_list_all_events = '$encoder.jsEscape( $i18n.getString( "list_all_events" ) , "'")';
-	var i18n_no_compulsary_data_elements = '$encoder.jsEscape( $i18n.getString( "no_compulsary_data_elements" ) , "'")';
-	var i18n_remove_empty_events_success = '$encoder.jsEscape( $i18n.getString( "remove_empty_events_success" ) , "'")';
-	var i18n_confirm_remove_empty_events = '$encoder.jsEscape( $i18n.getString( "confirm_remove_empty_events" ) , "'")';
-	var i18n_report_date = '$encoder.jsEscape( $i18n.getString( "report_date" ) , "'")';
-
-	var i18n_yes = '$encoder.jsEscape( $i18n.getString( "yes" ) , "'")';
-	var i18n_no = '$encoder.jsEscape( $i18n.getString( "no" ) , "'")';
-	var i18n_specify_search_criteria = '$encoder.jsEscape( $i18n.getString( "specify_search_criteria" ) , "'")';
-	var i18n_add_filter = '$encoder.jsEscape( $i18n.getString( "add_filter" ) , "'")';
-	var i18n_clear_filter = '$encoder.jsEscape( $i18n.getString( "clear_filter" ) , "'")';
-	var i18n_specify_a_date = '$encoder.jsEscape( $i18n.getString( "specify_a_date" ) , "'")';
-	var i18n_clear = '$encoder.jsEscape( $i18n.getString( "clear" ) , "'")';
-	var i18n_insert_a_report_date = '$encoder.jsEscape( $i18n.getString( "insert_a_report_date" ) , "'")';
-    var i18n_comment_added = '$encoder.jsEscape( $i18n.getString( "comment_added" ) , "'")';
-
-    var i18n_need_to_sync_notification = '$encoder.jsEscape( $i18n.getString( "need_to_sync_notification" ) , "'")';
-    var i18n_sync_now = '$encoder.jsEscape( $i18n.getString( "sync_now" ) , "'")';
-    var i18n_sync_success = '$encoder.jsEscape( $i18n.getString( "sync_success" ) , "'")';
-    var i18n_sync_failed = '$encoder.jsEscape( $i18n.getString( "sync_failed" ) , "'")';
-    var i18n_uploading_data_notification = '$encoder.jsEscape( $i18n.getString( "uploading_data_notification" ) , "'")';
-    var i18n_incomplete_confirm_message = '$encoder.jsEscape( $i18n.getString( "incomplete_confirm_message" ) , "'")';
-    var i18n_ajax_login_failed = '$encoder.jsEscape( $i18n.getString( "ajax_login_failed" ) , "'")';
-    var i18n_online_notification = '$encoder.jsEscape( $i18n.getString( "online_notification" ) , "'")';
-    var i18n_offline_notification = '$encoder.jsEscape( $i18n.getString( "offline_notification" ) , "'")';
-    var i18n_operation_not_available_offline = '$encoder.jsEscape( $i18n.getString( "operation_not_available_offline" ) , "'")';
-    var i18n_please_wait_loading = '$encoder.jsEscape( $i18n.getString( "please_wait_loading" ) , "'")';
-    var i18n_complete_program_confirm_message = '$encoder.jsEscape( $i18n.getString( "complete_program_confirm_message" ) , "'")';
-	
-	isAjax = true;
-	contentDiv = '';
-	var unSave = false;
-	var searchTextBox = '<input type="text" id="searchText" name="searchText">';	
-	setInnerHTML('reportDateDescriptionField', jQuery('#programId option:selected').attr('reportDateDes'));
-	setInnerHTML('reportDateDescriptionField2', jQuery('#programId option:selected').attr('reportDateDes'));
-	
-	var date = new Date();
-	var d = date.getDate();
-	var m = date.getMonth();
-	var y= date.getFullYear();
-		
-	var	startDateSince = jQuery.datepicker.formatDate( dateFormat, new Date(y, m, d-7) ) ;
-	setFieldValue('startDate', startDateSince);
-	
-</script>

=== modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/index.vm'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/index.vm	2014-04-06 18:03:57 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/index.vm	2014-05-12 09:56:39 +0000
@@ -18,10 +18,6 @@
 		#introListImgItem( "singleEventSelect.action" "single_event_with_registration" "attribute" )
 	#end
 	
-	#if( $auth.hasAccess( "dhis-web-caseentry", "anonymousRegistration" ) )
-		#introListImgItem( "anonymousRegistration.action" "anonymous_events" "attribute" )
-	#end
-	
 	#if( $auth.hasAccess( "dhis-web-caseentry", "reportSelect" ) )
 		#introListImgItem( "reportSelect.action" "program_summary" "summaryreport" )
 	#end

=== removed file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/javascript/anonymousRegistration.js'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/javascript/anonymousRegistration.js	2014-03-20 10:17:37 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/javascript/anonymousRegistration.js	1970-01-01 00:00:00 +0000
@@ -1,1163 +0,0 @@
-var DAO = DAO || {};
-
-DAO.store = new dhis2.storage.Store( {
-    name: 'dhis2',
-    adapters: [ dhis2.storage.IndexedDBAdapter, dhis2.storage.DomSessionStorageAdapter, dhis2.storage.InMemoryAdapter ],
-    objectStores: [ 'programs', 'programStages', 'optionSets', 'usernames', {
-        name: 'dataValues',
-        adapters: [ dhis2.storage.IndexedDBAdapter, dhis2.storage.DomLocalStorageAdapter, dhis2.storage.InMemoryAdapter ]
-    } ]
-} );
-
-function loadPrograms() {
-    var def = $.Deferred();
-
-    $.ajax( {
-        url: 'getProgramMetaData.action',
-        dataType: 'json',
-        cache: false
-    } ).done(function ( data ) {
-        var programs = _.values( data.metaData.programs );
-        DAO.store.setAll( 'programs', programs ).then( function () {
-            def.resolve( data.metaData );
-        } );
-    } ).fail( function () {
-        def.resolve();
-    } );
-
-    return def.promise();
-}
-
-function loadProgramStages( metaData ) {
-    if ( !metaData ) {
-        return;
-    }
-
-    var def = $.Deferred();
-    var promise = def.promise();
-
-    _.each( _.values( metaData.programs ), function ( el ) {
-        var id = el.programStages[0].id;
-        promise = promise.then( makeProgramStageRequest( id ));
-    } );
-
-    promise = promise.then(function() {
-        return $.Deferred().resolve(metaData);
-    });
-
-    def.resolve( metaData );
-
-    return promise;
-}
-
-function makeProgramStageRequest( id ) {
-    return function() {
-        var data = createProgramStage( id );
-
-        return $.ajax( {
-            url: 'dataentryform.action',
-            data: data,
-            dataType: 'html',
-            cache: false
-        } ).done( function ( data ) {
-            var obj = {};
-            obj.id = id;
-            obj.form = data;
-            DAO.store.set( 'programStages', obj );
-        } );
-    }
-}
-
-function loadOptionSets( metaData ) {
-    if ( !metaData ) {
-        return;
-    }
-
-    var mainDef = $.Deferred();
-    var mainPromise = mainDef.promise();
-
-    var def = $.Deferred();
-    var promise = def.promise();
-
-    var builder = $.Deferred();
-    var build = builder.promise();
-
-    _.each( metaData.optionSets, function ( item ) {
-        build = build.then(function() {
-            var d = $.Deferred();
-            var p = d.promise();
-            DAO.store.get('optionSets', item.uid).done(function(obj) {
-                if(!obj || obj.optionSet.version !== item.v) {
-                    promise = promise.then( makeOptionSetRequest(item.uid) );
-                }
-
-                d.resolve();
-            });
-
-            return p;
-        });
-    } );
-
-    if ( metaData.usernames ) {
-        promise = promise.then( makeUsernameRequest() );
-    }
-
-    build.done(function() {
-        def.resolve();
-
-        promise = promise.done( function () {
-            mainDef.resolve( metaData );
-        } );
-    });
-
-    builder.resolve();
-
-    return mainPromise;
-}
-
-function makeUsernameRequest() {
-    return function() {
-        return $.ajax( {
-            url: 'getUsernames.action',
-            dataType: 'json',
-            cache: false
-        }).done(function( data ) {
-            var obj = {};
-            obj.id = 'usernames';
-            obj.usernames = data.usernames;
-            DAO.store.set( 'usernames', obj );
-        });
-    }
-}
-
-function makeOptionSetRequest( id ) {
-    return function() {
-        return $.ajax({
-            url: 'getOptionSet.action',
-            data: { id: id },
-            dataType: 'json',
-            cache: false
-        }).done(function(data) {
-            var obj = {};
-            obj.id = id;
-            obj.optionSet = data.optionSet;
-            DAO.store.set('optionSets', obj);
-        });
-    }
-}
-
-function updateOfflineEvents() {
-    var no_offline_template = $( '#no-offline-event-template' );
-    var no_offline_template_compiled = _.template( no_offline_template.html() );
-
-    var offline_template = $( '#offline-event-template' );
-    var offline_template_compiled = _.template( offline_template.html() );
-
-    return DAO.store.getAll( 'dataValues' ).done( function ( arr ) {
-        var orgUnitId = selection.getSelected();
-        var programId = $( '#programId' ).val();
-
-        var target = $( '#offlineEventList' );
-        target.children().remove();
-
-        if ( arr.length > 0 ) {
-            var matched = false;
-
-            $.each( arr, function ( idx, item ) {
-                var event = item.executionDate;
-
-                if ( event.organisationUnitId == orgUnitId && event.programId == programId ) {
-                    event.index = idx + 1;
-                    var html = offline_template_compiled( event );
-                    target.append( html );
-                    matched = true;
-                }
-            } );
-
-            if ( !matched ) {
-                target.append( no_offline_template_compiled() );
-            }
-        } else {
-            target.append( no_offline_template_compiled() );
-        }
-    } );
-}
-
-function showOfflineEvents() {
-    $( "#offlineListDiv table" ).removeClass( 'hidden' );
-}
-
-function hideOfflineEvents() {
-    $( "#offlineListDiv table" ).addClass( 'hidden' );
-}
-
-var haveLocalData = false;
-
-function checkOfflineData( callback ) {
-    return DAO.store.getAll( 'dataValues' ).done( function ( arr ) {
-        haveLocalData = arr.length > 0;
-        if ( callback && typeof callback == 'function' ) callback( haveLocalData );
-    } );
-}
-
-function uploadOfflineData( event ) {
-    $.ajax( {
-        url: 'uploadAnonymousEvent.action',
-        contentType: 'application/json',
-        data: JSON.stringify( event ),
-        cache: false
-    } ).done( function ( json ) {
-        if ( json.response === 'success' ) {
-            DAO.store.remove( 'dataValues', event.id ).done( function () {
-                updateOfflineEvents();
-                searchEvents( eval( getFieldValue( 'listAll' ) ) );
-            } );
-        }
-    } );
-}
-
-function uploadLocalData() {
-    setHeaderWaitMessage( i18n_uploading_data_notification );
-
-    DAO.store.getAll( 'dataValues' ).done( function ( arr ) {
-        if(arr.length == 0) {
-            setHeaderDelayMessage( i18n_sync_success );
-            return;
-        }
-
-        var deferred = $.Deferred();
-        var promise = deferred.promise();
-
-        $.each(arr, function(idx, item) {
-            promise = promise.pipe(function () {
-                uploadOfflineData( item );
-            });
-        });
-
-        deferred.done(function() {
-            setHeaderDelayMessage( i18n_sync_success );
-        });
-
-        deferred.resolve();
-    });
-}
-
-function sync_failed_button() {
-    var message = i18n_sync_failed
-        + ' <button id="sync_button" type="button">' + i18n_sync_now + '</button>';
-
-    setHeaderMessage( message );
-
-    $( '#sync_button' ).bind( 'click', uploadLocalData );
-}
-
-$( document ).ready( function () {
-    $.ajaxSetup( {
-        type: 'POST',
-        cache: false
-    } );
-
-    setHeaderWaitMessage(i18n_please_wait_loading);
-
-    $("#programId").attr('disabled', true);
-
-    $( "#orgUnitTree" ).one( "ouwtLoaded", function () {
-        var def = $.Deferred();
-        var promise = def.promise();
-
-        promise = promise.then( DAO.store.open );
-        promise = promise.then( loadPrograms );
-        promise = promise.then( loadProgramStages );
-        promise = promise.then( loadOptionSets );
-        promise = promise.then( updateOfflineEvents );
-        promise = promise.then( checkOfflineData );
-        promise.then( function () {
-            $("#programId").removeAttr('disabled');
-
-            selection.setListenerFunction( organisationUnitSelected );
-
-            dhis2.availability.startAvailabilityCheck();
-            selection.responseReceived();
-        } );
-
-        def.resolve();
-    } );
-
-    $( document ).bind( 'dhis2.online', function ( event, loggedIn ) {
-        if ( loggedIn ) {
-            checkOfflineData(function(localData) {
-                if ( localData ) {
-                    var message = i18n_need_to_sync_notification
-       	            	+ ' <button id="sync_button" type="button">' + i18n_sync_now + '</button>';
-
-       	            setHeaderMessage( message );
-
-       	            $( '#sync_button' ).bind( 'click', uploadLocalData );
-                } else {
-                    setHeaderDelayMessage( i18n_online_notification );
-                }
-
-                enableFiltering();
-                searchEvents( eval( getFieldValue( 'listAll' ) ) );
-                $('#commentInput').removeAttr('disabled');
-                $('#commentButton').removeAttr('disabled');
-                $('#validateBtn').removeAttr('disabled');
-            });
-
-            hideOfflineEvents();
-        }
-        else {
-            var form = [
-                '<form style="display:inline;">',
-                '<label for="username">Username</label>',
-                '<input name="username" id="username" type="text" style="width: 70px; margin-left: 10px; margin-right: 10px" size="10"/>',
-                '<label for="password">Password</label>',
-                '<input name="password" id="password" type="password" style="width: 70px; margin-left: 10px; margin-right: 10px" size="10"/>',
-                '<button id="login_button" type="button">Login</button>',
-                '</form>'
-            ].join( '' );
-
-            setHeaderMessage( form );
-            ajax_login();
-
-            showOfflineEvents();
-        }
-    } );
-
-    $( document ).bind( 'dhis2.offline', function () {
-        setHeaderMessage( i18n_offline_notification );
-        $('#commentInput').attr('disabled', true);
-        $('#commentInput').attr('disabled', true);
-        $('#validateBtn').attr('disabled', true);
-        disableFiltering();
-        showOfflineEvents();
-    } );
-} );
-
-function disableFiltering() {
-    $('#listDiv').hide();
-    $('#filterBtn').attr('disabled', true);
-    $('#listBtn').attr('disabled', true);
-    $('#incompleted').attr('disabled', true);
-    $('#removeBtn').attr('disabled', true);
-}
-
-function enableFiltering() {
-    var filtering = getFieldValue( 'programStageId' ) != undefined && getFieldValue( 'programStageId' ).length != 0;
-
-    if ( filtering ) {
-        $( '#filterBtn' ).removeAttr( 'disabled' );
-        $( '#listBtn' ).removeAttr( 'disabled' );
-        $( '#incompleted' ).removeAttr( 'disabled' );
-        $( '#removeBtn' ).removeAttr( 'disabled' );
-    }
-}
-
-function ajax_login()
-{
-    $( '#login_button' ).bind( 'click', function()
-    {
-        var username = $( '#username' ).val();
-        var password = $( '#password' ).val();
-
-        $.post( '../dhis-web-commons-security/login.action', {
-            'j_username' : username,
-            'j_password' : password
-        } ).success( function()
-        {
-            var ret = dhis2.availability.syncCheckAvailability();
-
-            if ( !ret )
-            {
-                alert( i18n_ajax_login_failed );
-            }
-        } );
-    } );
-}
-
-function organisationUnitSelected( orgUnits, orgUnitNames ) {
-    showById( 'dataEntryMenu' );
-    hideById( 'eventActionMenu' );
-    hideById( 'dataEntryInfor' );
-    hideById( 'advanced-search' );
-    hideById( 'minimized-advanced-search' );
-    hideById( 'listDiv' );
-    hideById( 'programName' );
-
-    setFieldValue( "listAll", true );
-    setFieldValue( "startDate", '' );
-    setFieldValue( "endDate", '' );
-    setFieldValue( "programStageId", '' );
-    setFieldValue( "programId", '' );
-
-    $( '#advancedSearchTB [name=searchText]' ).val( '' );
-
-    setFieldValue( 'orgunitId', orgUnits[0] );
-    setFieldValue( 'orgunitName', orgUnitNames[0] );
-    hideById( 'listDiv' );
-    hideById( 'dataEntryInfor' );
-
-    DAO.store.getAll( 'programs' ).done( function (arr) {
-        var programs = [];
-
-        $.each( arr, function ( idx, item ) {
-            if ( item.programAssociations.indexOf( orgUnits[0] ) != -1 ) {
-                programs.push( item );
-            }
-        } );
-
-        updateProgramList( programs );
-    } );
-
-    updateOfflineEvents();
-}
-
-function updateProgramList( arr ) {
-    $( '#searchingAttributeIdTD [id=searchObjectId] option' ).remove();
-    $( '#advancedSearchTB [id=searchObjectId] option' ).remove();
-    clearListById( 'displayInReports' );
-    clearListById( 'programId' );
-
-    $( '#programId' ).append( '<option value="" psid="" reportDateDes="' + i18n_report_date + '">[' + i18n_please_select + ']</option>' );
-
-    for ( var i = 0; i < arr.length; i++ ) {
-        $( '#programId' ).append(
-            '<option value="' + arr[i].id
-            + '" puid="' + arr[i].uid
-            + '" programType="' + arr[i].type
-            + '" psid="' + arr[i].programStages[0].id
-            + '" psuid="' + arr[i].programStages[0].uid
-            + '" reportDateDes="' + arr[i].programStages[0].reportDateDescription + '">'
-            + arr[i].name
-            + '</option>' );
-    }
-
-    disableCriteriaDiv();
-    showById( 'selectDiv' );
-}
-
-function disableCriteriaDiv() {
-    disable( 'listBtn' );
-    disable( 'addBtn' );
-    disable( 'filterBtn' );
-    disable( 'removeBtn' );
-    $( '#criteriaDiv :input' ).each( function ( idx, item ) {
-        disable( this.id );
-    } );
-}
-
-function enableCriteriaDiv() {
-    enable( 'listBtn' );
-    enable( 'addBtn' );
-    enable( 'filterBtn' );
-    enable( 'removeBtn' );
-    $( '#criteriaDiv :input' ).each( function ( idx, item ) {
-        enable( this.id );
-    } );
-}
-
-function getDataElements() {
-    hideById( 'dataEntryInfor' );
-    hideById( 'listDiv' );
-    $( '#searchingAttributeIdTD [id=searchObjectId] option' ).remove();
-    $( '#advancedSearchTB [id=searchObjectId] option' ).remove();
-    var programStageId = $( '#programId option:selected' ).attr( 'psid' );
-    setFieldValue( 'programStageId', programStageId );
-    setInnerHTML( 'reportDateDescriptionField', $( '#programId option:selected' ).attr( 'reportDateDes' ) );
-    setInnerHTML( 'reportDateDescriptionField2', $( '#programId option:selected' ).attr( 'reportDateDes' ) );
-
-    if ( programStageId == '' ) {
-        removeAllAttributeOption();
-        disableCriteriaDiv();
-        enable( 'orgunitName' );
-        enable( 'programId' );
-        hideById( 'listDiv' );
-        setFieldValue( 'searchText' );
-        updateOfflineEvents();
-        return;
-    }
-
-    $.getJSON( "getProgramStageDataElementList.action", {
-        programStageId: programStageId
-    }, function ( json ) {
-        $( '#advancedSearchTB [name=searchText]' ).val( '' );
-        $( '.stage-object-selected' ).attr( 'psid', $( '#programId option:selected' ).attr( "psid" ) );
-
-        clearListById( 'searchObjectId' );
-        clearListById( 'displayInReports' );
-
-        $('[name=searchObjectId]').append('<option value="" >[' + i18n_please_select + ']</option>');
-
-        $.each(json.programStageDataElements, function() {
-            $('[name=searchObjectId]').append('<option value="' + this.id + '" uid="' + this.uid + '" type="' + this.type + '">' + this.name + '</option>');
-
-            if( this.displayInReports == 'true' ) {
-                $('#displayInReports').append('<option value="' + this.id + '" uid="' + this.uid + '" ></option>');
-            }
-        });
-
-        enableCriteriaDiv();
-        validateSearchEvents( true );
-    } ).fail(function() {
-        enable( 'addBtn' );
-    });
-
-    updateOfflineEvents();
-}
-
-function dataElementOnChange( this_ ) {
-    var container = $(this_).parent().parent().attr('id');
-    var element = $('#' + container + ' [id=searchText]');
-    var valueType = $('#' + container + ' [id=searchObjectId] option:selected').attr('type');
-
-    if( valueType == 'date' ) {
-        element.replaceWith(getDateField(container));
-        datePickerValid('searchText_' + container);
-    }
-    else {
-        $('#searchText_' + container).datepicker("destroy");
-        $('#' + container + ' [id=dateOperator]').replaceWith("");
-
-        if( valueType == 'bool' ) {
-            element.replaceWith(getTrueFalseBox());
-        }
-        else if( valueType == 'optionset' ) {
-            element.replaceWith(searchTextBox);
-            autocompletedFilterField(container + " [id=searchText]", $(this_).find("option:selected").attr('uid'));
-        }
-        else if( valueType == 'username' ) {
-            autocompletedUsernameField($(this_).attr('id'));
-        }
-        else {
-            element.replaceWith(searchTextBox);
-        }
-    }
-}
-
-function autocompletedFilterField( idField, searchObjectId ) {
-    var input = $( "#" + idField );
-    input.css( "width", "237px" );
-    input.autocomplete( {
-        delay: 0,
-        minLength: 0,
-        source: function ( request, response ) {
-            $.ajax( {
-                url: "getOptions.action?id=" + searchObjectId + "&query=" + input.val(),
-                dataType: "json",
-                cache: false,
-                success: function ( data ) {
-                    response( $.map( data.options, function ( item ) {
-                        return {
-                            label: item.o,
-                            id: item.o
-                        };
-                    } ) );
-                }
-            } );
-        },
-        select: function ( event, ui ) {
-            input.val( ui.item.value );
-            input.autocomplete( "close" );
-        }
-    } )
-        .addClass( "ui-widget" );
-
-    input.data( "autocomplete" )._renderItem = function ( ul, item ) {
-        return $( "<li></li>" )
-            .data( "item.autocomplete", item )
-            .append( "<a>" + item.label + "</a>" )
-            .appendTo( ul );
-    };
-
-    var wrapper = this.wrapper = $( "<span style='width:200px'>" )
-        .addClass( "ui-combobox" )
-        .insertAfter( input );
-
-    var button = $( "<a style='width:20px; margin-bottom:-5px;height:20px;'>" )
-        .attr( "tabIndex", -1 )
-        .attr( "title", i18n_show_all_items )
-        .appendTo( wrapper )
-        .button( {
-            icons: {
-                primary: "ui-icon-triangle-1-s"
-            },
-            text: false
-        } )
-        .addClass( 'small-button' )
-        .click( function () {
-            if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
-                input.autocomplete( "close" );
-                return;
-            }
-            $( this ).blur();
-            input.autocomplete( "search", "" );
-            input.focus();
-        } );
-}
-
-function autocompletedUsernameField( idField ) {
-    var input = $( "#" + idField );
-    input.parent().width( input.width() + 200 );
-    var dataElementId = input.attr( 'id' ).split( '-' )[1];
-
-    input.autocomplete( {
-        delay: 0,
-        minLength: 0,
-        source: function ( request, response ) {
-            $.ajax( {
-                url: "getUsernameList.action?query=" + input.val(),
-                dataType: "json",
-                cache: false,
-                success: function ( data ) {
-                    response( $.map( data.usernames, function ( item ) {
-                        return {
-                            label: item.u,
-                            id: item.u
-                        };
-                    } ) );
-                }
-            } );
-        },
-        select: function ( event, ui ) {
-            var fieldValue = ui.item.value;
-
-            if ( !dhis2.trigger.invoke( "caseentry-value-selected", [dataElementId, fieldValue] ) ) {
-                input.val( "" );
-                return false;
-            }
-
-            input.val( fieldValue );
-            if ( !unSave ) {
-                saveVal( dataElementId );
-            }
-            input.autocomplete( "close" );
-        },
-        change: function ( event, ui ) {
-            if ( !ui.item ) {
-                var matcher = new RegExp( "^" + $.ui.autocomplete.escapeRegex( $( this ).val() ) + "$", "i" ),
-                    valid = false;
-                if ( !valid ) {
-                    $( this ).val( "" );
-                    if ( !unSave )
-                        saveVal( dataElementId );
-                    input.data( "autocomplete" ).term = "";
-                    return false;
-                }
-            }
-        }
-    } )
-        .addClass( "ui-widget" );
-
-    input.data( "autocomplete" )._renderItem = function ( ul, item ) {
-        return $( "<li></li>" )
-            .data( "item.autocomplete", item )
-            .append( "<a>" + item.label + "</a>" )
-            .appendTo( ul );
-    };
-
-    var wrapper = this.wrapper = $( "<span style='width:200px'>" )
-        .addClass( "ui-combobox" )
-        .insertAfter( input );
-
-    var button = $( "<a style='width:20px; margin-bottom:-5px;height:20px;'>" )
-        .attr( "tabIndex", -1 )
-        .attr( "title", i18n_show_all_items )
-        .appendTo( wrapper )
-        .button( {
-            icons: {
-                primary: "ui-icon-triangle-1-s"
-            },
-            text: false
-        } )
-        .addClass( 'small-button' )
-        .click( function () {
-            if ( input.autocomplete( "widget" ).is( ":visible" ) ) {
-                input.autocomplete( "close" );
-                return;
-            }
-            $( this ).blur();
-            input.autocomplete( "search", "" );
-            input.focus();
-        } );
-}
-
-function removeAllAttributeOption() {
-    $( '#advancedSearchTB tbody tr' ).each( function ( i, item ) {
-        if ( i > 0 ) {
-            $( item ).remove();
-        }
-    } )
-}
-
-function validateSearchEvents( listAll ) {
-    listAll = eval( listAll );
-    setFieldValue( 'listAll', listAll );
-
-    var flag = true;
-    if ( !listAll ) {
-        if ( getFieldValue( 'startDate' ) == "" || getFieldValue( 'endDate' ) == "" ) {
-            showWarningMessage( i18n_specify_a_date );
-            flag = false;
-        }
-
-        if ( flag && !listAll && $( '#filterBtn' ).attr( "disabled" ) == "disabled" ) {
-            $( '#advancedSearchTB tr' ).each( function ( index, row ) {
-                if ( index > 1 ) {
-                    $( row ).find( ':input' ).each( function ( idx, item ) {
-                        var input = $( item );
-                        if ( input.attr( 'type' ) != 'button' && idx == 0 && input.val() == '' ) {
-                            showWarningMessage( i18n_specify_data_element );
-                            flag = false;
-                        }
-                    } )
-                }
-            } );
-        }
-    }
-
-    if ( flag ) {
-        searchEvents( listAll );
-    }
-}
-
-function searchEvents( listAll ) {
-    var search = getFieldValue( 'programStageId' ) != undefined && getFieldValue( 'programStageId' ).length != 0;
-
-    if ( !search ) {
-        return;
-    }
-
-    hideById( 'dataEntryInfor' );
-    hideById( 'listDiv' );
-
-    var params = '';
-    $( '#displayInReports option' ).each( function ( i, item ) {
-        var input = $( item );
-        params += '&filterValues=de_' + input.val() + '_false_';
-    } );
-
-    if ( listAll ) {
-        params += '&startDate=';
-        params += '&endDate=';
-    }
-    else {
-        var value = '';
-        var searchingValue = '';
-        params += '&startDate=' + getFieldValue( 'startDate' );
-        params += '&endDate=' + getFieldValue( 'endDate' );
-        if ( byId( "incompleted" ).checked ) {
-            params += '&useCompletedEvents=false';
-        }
-        $( '#advancedSearchTB tr' ).each( function ( index, row ) {
-            if ( index > 1 ) {
-                $( row ).find( ':input' ).each( function ( idx, item ) {
-                    var input = $( item );
-                    if ( input.attr( 'type' ) != 'button' ) {
-                        if ( idx == 0 && input.val() != '' ) {
-                            searchingValue = 'de_' + input.val() + '_false_';
-                        }
-                        else if ( input.val() != '' ) {
-                            value += $.trim( input.val() ).toLowerCase();
-                        }
-                    }
-                } );
-
-                if ( value != '' ) {
-                    searchingValue += getValueFormula( value );
-                    params += '&filterValues=' + searchingValue;
-                }
-                searchingValue = '';
-                value = '';
-            }
-        } )
-    }
-
-    params += '&facilityLB=selected';
-    params += '&orgunitIds=' + getFieldValue( 'orgunitId' );
-    params += '&programStageId=' + $( '#programId option:selected' ).attr( 'psid' );
-    params += '&userOrganisationUnit=false';
-    params += '&userOrganisationUnitChildren=false';
-
-    contentDiv = 'listDiv';
-    showLoader();
-
-    $.ajax( {
-        type: "POST",
-        url: 'searchEvents.action',
-        data: params,
-        dataType: 'text',
-        cache: false,
-        success: function ( data ) {
-            if ( data.indexOf( "<!DOCTYPE" ) != 0 ) {
-                hideById( 'dataEntryInfor' );
-                setInnerHTML( 'listDiv', data );
-            }
-
-            hideLoader();
-            showById( 'listDiv' );
-        }
-    } ).fail(function() {
-        hideById( 'dataEntryInfor' );
-        hideById( 'listDiv' );
-    } ).always(function() {
-        var searchInfor = (listAll) ? i18n_list_all_events : i18n_search_events_by_dataelements;
-        setInnerHTML( 'searchInforTD', searchInfor );
-
-        if ( !listAll && $( '#filterBtn' ).attr( "disabled" ) == "disabled" ) {
-            showById( 'minimized-advanced-search' );
-            hideById( 'advanced-search' );
-        }
-        else {
-            hideById( 'minimized-advanced-search' );
-            hideById( 'advanced-search' );
-            showById( 'filterBtn' );
-        }
-
-        hideLoader();
-    });
-}
-
-function getValueFormula( value ) {
-    if ( value.indexOf( '"' ) != value.lastIndexOf( '"' ) ) {
-        value = value.replace( /"/g, "'" );
-    }
-
-    var flag = value.match( /[>|>=|<|<=|=|!=]+[ ]*/ );
-
-    if( value.indexOf("'") == -1 ) {
-        if( flag == null ) {
-            value = "='" + value + "'";
-        }
-        else {
-            value = value.replace(flag, flag + "'");
-            value += "'";
-        }
-    }
-    else {
-        if( flag == null ) {
-            value = "=" + value;
-        }
-    }
-
-    return value;
-}
-
-function removeEvent( programStageId ) {
-    DAO.store.get('dataValues', programStageId).done(function(obj) {
-        if(obj) {
-            if( confirm(i18n_comfirm_delete_event) ) {
-                DAO.store.remove('dataValues', programStageId).always(function() {
-                    updateOfflineEvents();
-                    // needed, seemed that from time-to-time the events are updated too early, could be idb related
-                    setTimeout(updateOfflineEvents, 100);
-                });
-            }
-        } else {
-            removeItem( programStageId, '', i18n_comfirm_delete_event, 'removeCurrentEncounter.action' );
-        }
-    });
-}
-
-function showUpdateEvent( programStageInstanceId ) {
-    hideById( 'dataEntryMenu' );
-    showById( 'eventActionMenu' );
-    $( "[name=eventActionLink]" ).hide();
-    hideById( 'selectDiv' );
-    hideById( 'searchDiv' );
-    hideById( 'listDiv' );
-    hideById( 'offlineListDiv' );
-    setFieldValue( 'programStageInstanceId', programStageInstanceId );
-	setInnerHTML( 'dataEntryFormDiv', '' );
-    showLoader();
-
-    service.displayProgramStage( getFieldValue( 'programStageId' ), programStageInstanceId, getFieldValue( 'orgunitId' ) );
-	jQuery('.stage-object-selected').attr('id', 'ps_' + programStageInstanceId);
-}
-
-function backEventList() {
-    showById( 'dataEntryMenu' );
-    hideById( 'eventActionMenu' );
-    hideById( 'dataEntryInfor' );
-    hideById( 'programName' );
-    showById( 'selectDiv' );
-    showById( 'searchDiv' );
-    showById( 'listDiv' );
-    showById( 'offlineListDiv' );
-
-    updateOfflineEvents();
-    searchEvents( eval( getFieldValue( 'listAll' ) ) );
-}
-
-function showAddEventForm( isCreateEvent ) {
-    showById( 'eventActionMenu' );
-    $( "[name=eventActionLink]" ).hide();
-    hideById( 'dataEntryMenu' );
-    setInnerHTML( 'dataEntryFormDiv', '' );
-    hideById( 'selectDiv' );
-    hideById( 'searchDiv' );
-    hideById( 'listDiv' );
-    hideById( 'offlineListDiv' );
-    showById( 'programName' );
-    hideById( 'actionDiv' );
-    showById( 'dataEntryInfor' );
-    setFieldValue( 'programStageInstanceId', '0' );
-    setInnerHTML( 'programName', $( '#programId option:selected' ).text() );
-	setInnerHTML( 'orgunitNameInfor', getFieldValue("orgunitName"));
-	if( isCreateEvent != undefined ){
-		addNewEvent();
-	}
-}
-
-function addNewEvent() {
-    var programStageInstanceId = getFieldValue( 'programStageInstanceId' );
-    var programId = $( '#programId option:selected' ).val();
-    var executionDate = getFieldValue( 'executionDate' );
-    var orgunitId = getFieldValue( 'orgunitId' );
-
-    $( "#executionDate" ).css( 'background-color', SAVING_COLOR );
-
-    service.saveExecutionDate( programId, programStageInstanceId, executionDate, orgunitId );
-}
-
-function completedAndAddNewEvent() {
-    doComplete( true );
-}
-
-function removeEmptyEvents() {
-    var result = window.confirm( i18n_confirm_remove_empty_events );
-
-    if ( result ) {
-        $.getJSON( "removeEmptyEvents.action",
-            {
-                programStageId: $( '#selectDiv [id=programId] option:selected' ).attr( 'psid' )
-            },
-            function ( json ) {
-                if ( json.response == 'success' ) {
-                    showSuccessMessage( i18n_remove_empty_events_success );
-                    validateSearchEvents( true )
-                }
-            } );
-    }
-}
-
-function removeCurrentEvent() {
-    var programStageInstanceId = getFieldValue( 'programStageInstanceId' );
-
-    DAO.store.get('dataValues', programStageInstanceId).done(function(obj) {
-        if(obj) {
-            if( confirm(i18n_comfirm_delete_event) ) {
-                DAO.store.remove('dataValues', programStageInstanceId).always(function() {
-                    setTimeout(backEventList, 200);
-                });
-            }
-        } else {
-            removeCurrentEventFromServer();
-        }
-    });
-}
-
-function removeCurrentEventFromServer() {
-    var result = window.confirm( i18n_comfirm_delete_event );
-
-    if ( result ) {
-        $.postJSON( "removeCurrentEncounter.action", {
-            "id": getFieldValue( 'programStageInstanceId' )
-        },
-        function ( json ) {
-            if ( json.response == "success" ) {
-                backEventList();
-            }
-            else if ( json.response == "error" ) {
-                showWarningMessage( json.message );
-            }
-        } );
-    }
-}
-
-function showFilterForm() {
-    showById( 'advanced-search' );
-    hideById( 'minimized-advanced-search' );
-    disable( 'filterBtn' );
-    setFieldValue( 'listAll', false );
-}
-
-function removeAllOption() {
-    enable( 'filterBtn' );
-
-    $( '#advancedSearchTB tr' ).each( function ( idx ) {
-        if( idx > 2 ) {
-            $(this).remove();
-        }
-        else if( idx == 2 ) {
-            $(this).find(':input').each(function( idx, item ) {
-                var input = $(item);
-                if( input.attr('type') != 'button' ) {
-                    input.val('');
-                }
-            });
-        }
-    } );
-
-    $( '#searchObjectId' ).val( "" );
-    $( '#searchText' ).val( "" );
-    searchEvents( eval( getFieldValue( "listAll" ) ) );
-}
-
-function ajaxExecutionDate( programId, programStageInstanceId, executionDate, organisationUnitId ) {
-    return $.ajax( {
-        url: 'saveExecutionDate.action',
-        data: createExecutionDate( programId, programStageInstanceId, executionDate, organisationUnitId ),
-        type: 'POST',
-        dataType: 'json',
-        cache: false
-    } );
-}
-
-// execution date module
-var service = (function () {
-    return {
-        saveExecutionDate: function( programId, programStageInstanceId, executionDate, organisationUnitId ) {
-            ajaxExecutionDate(programId, programStageInstanceId, executionDate, organisationUnitId).done(function ( json ) {
-                if ( json.response == 'success' ) {
-                    $( "#executionDate" ).css( 'background-color', SUCCESS_COLOR );
-                    setFieldValue( 'programStageInstanceId', json.message );
-					jQuery('.stage-object-selected').attr('id', json.message );
-                    showUpdateEvent( json.message );
-                }
-                else {
-                    $( "#executionDate" ).css( 'background-color', ERROR_COLOR );
-                    showWarningMessage( json.message );
-                }
-            } ).fail( function () {
-                if(programStageInstanceId == 0) {
-                    DAO.store.getKeys( 'dataValues' ).done( function ( keys ) {
-                        var i = 100;
-
-                        for(; i<10000; i++) {
-                            if( keys.indexOf("local" + i) == -1 ) break;
-                        }
-
-                        programStageInstanceId = "local"+i;
-
-                        var data = {};
-                        data.id = programStageInstanceId;
-                        data.executionDate = createExecutionDate(programId, programStageInstanceId, executionDate, organisationUnitId);
-                        data.executionDate.completed = 'false';
-
-                        this.set( 'dataValues', data).done(function() {
-                            setFieldValue( 'programStageInstanceId', programStageInstanceId );
-                            $( "#executionDate" ).css( 'background-color', SUCCESS_COLOR );
-                            showUpdateEvent( programStageInstanceId );
-                        });
-                    });
-                } else {
-                    // if we have a programStageInstanceId, just reuse that one
-                    setFieldValue( 'programStageInstanceId', programStageInstanceId );
-                    $( "#executionDate" ).css( 'background-color', SUCCESS_COLOR );
-                    showUpdateEvent( programStageInstanceId );
-                }
-            } );
-        },
-
-        displayProgramStage: function( programStageId, programStageInstanceId, organisationUnitId ) {
-            loadProgramStage( programStageId, programStageInstanceId, organisationUnitId, function ( data ) {
-                $( '#dataEntryFormDiv' ).html( data );
-                updateDataForm();
-            },function () {
-                $( '#dataEntryFormDiv' ).html( "<div class='message message-info'>Unable to load form.</div>" );
-                hideById( 'loaderDiv' );
-            } );
-        }
-    }
-})();
-
-function updateDataForm() {
-    $( '#inputCriteriaDiv' ).remove();
-    showById( 'programName' );
-    showById( 'actionDiv' );
-    var programName = $( '#programId option:selected' ).text();
-    var programStageId = $( '#programId option:selected' ).attr( 'psid' );
-    $( '.stage-object-selected' ).attr( 'psid', programStageId );
-    setInnerHTML( 'programName', programName );
-    $('#executionDate').css('width',430);
-    $('#executionDate').css('margin-right',34);
-
-    if ( getFieldValue( 'completed' ) == 'true' ) {
-        disable( "completeBtn" );
-        enable( "uncompleteBtn" );
-    }
-    else {
-        enable( "completeBtn" );
-        disable( "uncompleteBtn" );
-    }
-
-    hideById( 'loaderDiv' );
-    showById( 'dataEntryInfor' );
-    showById( 'entryFormContainer' );
-
-    $( "#entryForm :input" ).each( function () {
-        if ( ( $( this ).attr( 'options' ) != null && $( this ).attr( 'options' ) == 'true' )
-            || ( $( this ).attr( 'username' ) != null && $( this ).attr( 'username' ) == 'true' ) ) {
-            var input = $( this );
-            input.parent().width( input.width() + 200 );
-        }
-    } );
-}
-
-function createExecutionDate( programId, programStageInstanceId, executionDate, organisationUnitId ) {
-    var data = {};
-
-    if(programId)
-        data.programId = programId;
-
-    if(programStageInstanceId)
-        data.programStageInstanceId = programStageInstanceId;
-
-    if(executionDate)
-        data.executionDate = executionDate;
-
-    if(organisationUnitId) {
-        data.organisationUnitId = organisationUnitId;
-        data.organisationUnit = organisationUnits[organisationUnitId].n;
-    }
-
-    return data;
-}
-
-function createProgramStage( programStageId, programStageInstanceId, organisationUnitId ) {
-    var data = {};
-
-    if(programStageId)
-        data.programStageId = programStageId;
-
-    if(programStageInstanceId)
-        data.programStageInstanceId = programStageInstanceId;
-
-    if(organisationUnitId)
-        data.organisationUnitId = organisationUnitId;
-
-    return data;
-}
-
-function loadProgramStage( programStageId, programStageInstanceId, organisationUnitId, success, fail ) {
-    var data = createProgramStage( programStageId, programStageInstanceId, organisationUnitId );
-
-    if( programStageId === undefined ) {
-        programStageId = $('#programId option:selected').attr('psid');
-    }
-
-    DAO.store.get('programStages', programStageId ).done(function(obj) {
-        if(success) success(obj.form);
-    } ).fail(function() {
-        $.ajax( {
-            url: 'dataentryform.action',
-            data: data,
-            dataType: 'html',
-            cache: false
-        } ).done(function(data) {
-            if(success) success(data);
-        } ).fail(function() {
-            if(fail) fail();
-        });
-    });
-}

=== modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/javascript/form.js'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/javascript/form.js	2014-05-05 15:31:54 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/javascript/form.js	2014-05-12 09:56:39 +0000
@@ -154,7 +154,7 @@
 	if (statusSearching == 0) {
 		return;
 	} else if (statusSearching == 1) {
-		showById('listTrackedEntityInstanceDiv');
+		showById('listEntityInstanceDiv');
 	}
 }
 

=== modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/javascript/trackedEntityInstance.js'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/javascript/trackedEntityInstance.js	2014-05-05 15:31:54 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/javascript/trackedEntityInstance.js	2014-05-12 09:56:39 +0000
@@ -362,7 +362,7 @@
 				+ "'><img src='../images/enroll.png' alt='"
 				+ i18n_dashboard
 				+ "'></a>";
-		table += "<a href=\"javascript:isDashboard=false;showUpdateTrackedEntityInstanceForm( '"
+		table += "<a href=\"javascript:isDashboard=false;statusSearching=3;showUpdateTrackedEntityInstanceForm( '"
 				+ uid
 				+ "' )\" title='"
 				+ i18n_edit_profile
@@ -535,7 +535,7 @@
 	} else if (statusSearching == 1) {
 		validateAdvancedSearch();
 	} else if (statusSearching == 3) {
-		showById('listTrackedEntityInstanceDiv');
+		showById('listEntityInstanceDiv');
 	}
 }
 

=== modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/javascript/underage.js'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/javascript/underage.js	2014-02-10 05:42:16 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/javascript/underage.js	2014-05-12 09:56:39 +0000
@@ -23,7 +23,7 @@
 				,data: jQuery("#addRepresentativeForm").serialize()
 				,dataType : "xml"
 				,success: function(xml){ 
-					autoChoosePerson( xml );
+					autoChooseTEI( xml );
 				}
 				,error: function()
 				{
@@ -49,7 +49,7 @@
 	 else if( type == 'duplicate' )
 	 {
 		 jQuery("#formContainer").hide();
-		 showPersons("listPersonsDuplicate", messageElement);
+		 showTEIs("listPersonsDuplicate", messageElement);
 	 }
 }
 
@@ -68,55 +68,98 @@
 	return params;
 }
 
-function searchPerson()
+function searchTEI()
 {
-	jQuery.ajax({
-		   type: "POST"
-		   ,url: "searchPerson.action"
-		   ,data: jQuery("#searchForm").serialize()
-		   ,dataType : "xml"
-		   ,success: function(xmlObject){
-				showPersons( "searchForm div[id=listPersons]", xmlObject );
-			}
-		   ,error: function(request,status,errorThrown)
-		   {
-				alert(i18n_error_connect_to_server);
-		   }
-		 });
+	contentDiv = 'listEntityInstanceDiv';
+	var params  = "ou=" + getFieldValue("orgunitId");
+		params += "&ouMode=ALL";
+		params += "&attribute=" + getFieldValue("attributeId") + ":LIKE:" + getFieldValue('searchValue');
+	
+	var p = params;
+	$('#attributeIds option').each(function(i, item){
+		if ( p.indexOf(item.value) < 0 ) {
+			params += "&attribute=" + item.value;
+		}
+	});
+	
+	$.ajax({
+		type : "GET",
+		url : "../api/trackedEntityInstances.json",
+		data : params,
+		dataType : "json",
+		success : function(json) {
+			showTEIs( "searchForm div[id=listPersons]", json );
+		}
+	});
 }
 
-function showPersons( divContainer, xmlElement )
+function showTEIs( divContainer, json )
 {
-	var container = jQuery("#"+divContainer);
+	var container = jQuery( "#" + divContainer );
 	container.html("");
-	var entityInstances = $(xmlElement).find('entityInstance');
-	var sEntityInstance = "";
-	
-	if ( entityInstances.length == 0 )
-	{
-		var message = "<p>" + i18n_no_result + "</p>";
+	if ( json.rows.length == 0 ){
+		var message = "<p>" + i18n_no_result_found + "</p>";
 		container.html(message);
 	}
-	
-	$( entityInstances ).each( function( i, entityInstance )
-    {
-		sEntityInstance += "<hr style='margin:5px 0px;'><table>";
-		var attributes = $( entityInstance ).find('attribute');
-		$( attributes ).each( function( i, attribute )
-		{
-				sEntityInstance += "<tr class='attributeRow'>"
-					+ "<td class='bold'>" + $(attribute).find('name').text() + "</td>"
-					+ "<td>" + $(attribute).find('value').text() + "</td>	"	
-					+ "</tr>";
+	else{
+		var attList = new Array();
+		var attDate = new Array();
+		$('#attributeIds option').each(function(i, item) {
+			var valueType = $(item).attr('valueType');
+			var value = $(item).val();
+			if ( valueType == 'bool' || valueType == 'trueOnly' ) {
+				for (var i = idx; i < json.width; i++) {
+					if( value==json.headers[i].name ){
+						attList.push(i);
+					}
+					else if( valueType=='date'){
+						attDate.push(i);
+					}
+				}
+			}
+			else if ( valueType == 'date' ) {
+				for (var i = idx; i < json.width; i++) {
+					if( value==json.headers[i].name ){
+						attDate.push(i);
+					}
+				}
+			}
 		});
-		sEntityInstance += "<tr><td colspan='2'><input type='button' id='" + $(entityInstance).find('id' ).first().text() +"' value='" + i18n_choose_this_tracked_entity_instance + "' onclick='choosePerson(this)'/></td></tr>";
-		sEntityInstance += "</table>";
-		container.append(i18n_duplicate_warning + "<br>" + sEntityInstance);
-	 } );
+		
+		var result = "";
+		var idx = 4;
+		for ( var i in json.rows) {
+			result += "<hr style='margin:5px 0px;'><table>";
+			var cols = json.rows[i];
+			var uid = cols[0];
+			for (var j = idx; j < json.width; j++) {
+				var colVal = cols[j];
+				if( colVal!=''){
+					if (j == 4) {
+						colVal = json.metaData.names[colVal];
+					}
+					
+					if( jQuery.inArray( j, attList )>=0 && colVal!="" ){
+						colVal = (colVal=='true')? i18n_yes : i18n_no;
+					}
+					else if( jQuery.inArray( j, attDate )>=0 && colVal!="" ){
+						colVal = colVal.split(' ')[0];
+					}
+					result += "<tr class='attributeRow'>"
+							+ "<td class='bold'>" + json.headers[j].column + "</td>"
+							+ "<td>" + colVal + "</td>	"	
+							+ "</tr>";
+				}
+			}
+			result += "<tr><td colspan='2'><input type='button' id='" + uid +"' value='" + i18n_choose_this_tracked_entity_instance + "' onclick='chooseTEI(this)'/></td></tr>";
+			result += "</table>";
+		}
+		container.append(i18n_duplicate_warning + "<br>" + result);
+	}		
 }
 
-// Will be call after save new person successfully
-function autoChoosePerson( xmlElement )
+// Will be call after save new TEI successfully
+function autoChooseTEI( xmlElement )
 {
 	jQuery("#tab-2").html("<center><span class='bold'>" + i18n_add_person_successfully + "</span></center>");
 	var root = jQuery(xmlElement);
@@ -135,7 +178,7 @@
 // Set Representative information to parent page.
 //------------------------------------------------------------------------------
 
-function choosePerson(this_)
+function chooseTEI(this_)
 {
 	var relationshipTypeId = jQuery("#searchForm [id=relationshipTypeId]").val();
 	if( isBlank( relationshipTypeId ))

=== modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/menu.vm'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/menu.vm	2014-04-11 06:46:17 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/menu.vm	2014-05-12 09:56:39 +0000
@@ -1,6 +1,4 @@
-#if( $auth.hasAccess( "dhis-web-caseentry", "trackedEntityInstance" ) 
-	|| $auth.hasAccess( "dhis-web-caseentry", "activityPlanSelect" ) 
-	|| $auth.hasAccess( "dhis-web-caseentry", "smsReminderSelect" ) )
+#if( $auth.hasAccess( "dhis-web-caseentry", "trackedEntityInstance" ) || $auth.hasAccess( "dhis-web-caseentry", "activityPlanSelect" ) || $auth.hasAccess( "dhis-web-caseentry", "smsReminderSelect" ) )
 <h2>$i18n.getString( "tracked_entity_instance" )&nbsp;</h2>
 #end
 <ul>
@@ -14,22 +12,16 @@
 		<li><a href="smsReminderSelect.action">$i18n.getString( "program_tracking" )</a></li>     
 	#end
 </ul>
-#if( $auth.hasAccess( "dhis-web-caseentry", "singleEventSelect" ) 
-	|| $auth.hasAccess( "dhis-web-caseentry", "anonymousRegistration" ) )
+#if( $auth.hasAccess( "dhis-web-caseentry", "singleEventSelect" ) )
 <h2>$i18n.getString( "data_entry" )&nbsp;</h2>
 #end
 <ul>
 	#if( $auth.hasAccess( "dhis-web-caseentry", "singleEventSelect" ) )
 		<li><a href="singleEventSelect.action">$i18n.getString( "single_event_with_registration" )</a></li>
 	#end
-	#if( $auth.hasAccess( "dhis-web-caseentry", "anonymousRegistration" ) )
-		<li><a href="anonymousRegistration.action">$i18n.getString( "anonymous_events" )</a></li>
-	#end
 </ul>
 
-#if( $auth.hasAccess( "dhis-web-caseentry", "reportSelect" ) 
-	|| $auth.hasAccess( "dhis-web-caseentry", "statisticalProgramReportSelect" ) 
-	|| $auth.hasAccess( "dhis-web-caseentry", "programStageCompletenessSelect" ) )	
+#if( $auth.hasAccess( "dhis-web-caseentry", "reportSelect" ) || $auth.hasAccess( "dhis-web-caseentry", "statisticalProgramReportSelect" ) || $auth.hasAccess( "dhis-web-caseentry", "programStageCompletenessSelect" ) )	
 <h2>$i18n.getString( "reports" )&nbsp;</h2>
 #end
 <ul>

=== modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/programEnrollmentForm.vm'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/programEnrollmentForm.vm	2014-04-20 02:45:01 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/programEnrollmentForm.vm	2014-05-12 09:56:39 +0000
@@ -1,6 +1,7 @@
 #set($noGroup = $attributeGroups.size() )
 #if( $programInstance || $hasDataEntry=='true' )
 <input type='hidden' id='programInstanceId' name='programInstanceId' value='$programInstance.id' />
+<input type='hidden' id='programInstanceUid' name='programInstanceUid' value='$programInstance.uid' />
 <input type='hidden' id='programStageInstanceId' name='programStageInstanceId' value='0'>
 <input type='hidden' id='entityInstanceId' name='entityInstanceId' value='$programInstance.entityInstance.id' />
 <input type='hidden' id='entityInstanceUid' name='entityInstanceUid' value='$programInstance.entityInstance.uid' />
@@ -167,7 +168,7 @@
 			getVisitSchedule(getFieldValue('programInstanceId'));
 		}
 		else if( ui.tab.hash == '#tab-5' ){
-			programReports(getFieldValue('programInstanceId'));
+			programReports(getFieldValue('programInstanceUid'));
 		}
 		else if( ui.tab.hash == '#tab-4' ){
 			getEventMessages(getFieldValue('programInstanceId'));

=== modified file 'dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/underAgeForm.vm'
--- dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/underAgeForm.vm	2014-02-07 20:25:49 +0000
+++ dhis-2/dhis-web/dhis-web-caseentry/src/main/webapp/dhis-web-caseentry/underAgeForm.vm	2014-05-12 09:56:39 +0000
@@ -1,14 +1,13 @@
 <script type="text/javascript">
 	jQuery("#representativeDiv").ready(function() {
-		addEventForTrackedEntityInstanceForm('addRepresentativeForm');
-				
+	
 		jQuery("#searchForm").validate({
 			meta:"validate"
 			,errorElement:"span"
-			,submitHandler: function(form) { searchPerson(); }
+			,submitHandler: function(form) { searchTEI(); }
 			,rules : {
 				relationshipTypeId  : { required: true },
-				searchType			: { required: true },
+				attributeId			: { required: true },
 				searchValue			: { required: true }
 			}
 		});
@@ -35,7 +34,7 @@
 
 	<!-- Search Person TAB -->
 	<div id="tab-1">
-		<form id="searchForm" name="searchForm" action="searchPerson.action" method="post" >
+		<form id="searchForm" name="searchForm" method="post" >
 			<table>
 				<tr>
 					<td >$i18n.getString("relationship_type")<em title="$i18n.getString( "required" )" class="required">*</em></td>
@@ -48,24 +47,14 @@
 						</select>
 					</td>
 				</tr>
-				<tr>
-					<td>$i18n.getString("search_by")<em title="$i18n.getString( "required" )" class="required">*</em></td>
-					<td>
-						<select id="searchType" name="searchType" onclick="toggleSearchType(this)" style='width:18em'>
-							<option value="">[$i18n.getString( "please_select" )]</option>        
-							<option value="attribute">$i18n.getString("attribute")</option>
-							<option value="name">$i18n.getString("name")</option>		
-						</select>
-					</td>
-				</tr>
 				<tr><td colspan="2"></td></tr>
-				<tr id="rowAttribute" style="display: none">
-					<td>$i18n.getString("attribute")</td>
+				<tr id="rowAttribute">
+					<td>$i18n.getString("attribute")<em title="$i18n.getString( "required" )" class="required">*</em></td>
 					<td>
 						<select name="attributeId" id="attributeId" style='width:18em'>
 							<option value="">[$i18n.getString( "please_select" )]</option>       
 							#foreach($attribute in $attributes)
-								<option value="$attribute.id">$attribute.displayName</option>
+								<option value="$attribute.uid">$attribute.displayName</option>
 							#end
 						</select>
 					</td>
@@ -119,6 +108,9 @@
 </div>
 
 <script>
-	var i18n_no_result = '$encoder.jsEscape( $i18n.getString( "no_result" ) , "'")';
+	var i18n_no_result_found = '$encoder.jsEscape( $i18n.getString( "no_result_found" ) , "'")';
+	var i18n_duplicate_warning = '$encoder.jsEscape( $i18n.getString( "duplicate_warning" ) , "'")';
+	var i18n_choose_this_tracked_entity_instance = '$encoder.jsEscape( $i18n.getString( "choose_this_tracked_entity_instance" ) , "'")';
+	var i18n_please_select_relationshipType = '$encoder.jsEscape( $i18n.getString( "please_select_relationshipType" ) , "'")';
 </script>
 

=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/account.css'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/account.css	2013-12-30 13:12:08 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/account.css	2014-05-12 09:56:39 +0000
@@ -66,13 +66,28 @@
   color: #333;
 }
 
+/*----------------------------------------------------------------------------*/
+/* @font-face                                                                 */
+/*----------------------------------------------------------------------------*/
+
 @font-face {
-    font-family: 'LiberationSansRegular';
-    src: url('../fonts/LiberationSans-Regular-webfont.eot');
-    src: url('../fonts/LiberationSans-Regular-webfont.eot?#iefix') format('eot'),
-         url('../fonts/LiberationSans-Regular-webfont.woff') format('woff'),
-         url('../fonts/LiberationSans-Regular-webfont.ttf') format('truetype'),
-         url('../fonts/LiberationSans-Regular-webfont.svg#webfontc8rbNdBe') format('svg');
+    font-family: 'LiberationSans';
+    src: url('../../fonts/LiberationSans-Regular-webfont.eot');
+    src: url('../../fonts/LiberationSans-Regular-webfont.eot?#iefix') format('eot'),
+         url('../../fonts/LiberationSans-Regular-webfont.woff') format('woff'),
+         url('../../fonts/LiberationSans-Regular-webfont.ttf') format('truetype'),
+         url('../../fonts/LiberationSans-Regular-webfont.svg#webfontc8rbNdBe') format('svg');
     font-weight: normal;
     font-style: normal;
 }
+
+@font-face {
+    font-family: 'LiberationSans';
+    src: url('../../fonts/LiberationSans-Bold-webfont.eot');
+    src: url('../../fonts/LiberationSans-Bold-webfont.eot?#iefix') format('eot'),
+         url('../../fonts/LiberationSans-Bold-webfont.woff') format('woff'),
+         url('../../fonts/LiberationSans-Bold-webfont.ttf') format('truetype'),
+         url('../../fonts/LiberationSans-Bold-webfont.svg#webfontHyWb8e07') format('svg');
+    font-weight: bold;
+    font-style: normal;
+}

=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/green/green.css'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/green/green.css	2014-04-29 12:49:25 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/green/green.css	2014-05-12 09:56:39 +0000
@@ -5,7 +5,7 @@
 
 * 
 {
-  font-family: LiberationSansRegular, arial, sans-serif;
+  font-family: LiberationSans, arial, sans-serif;
   line-height: 140%;
 }
 
@@ -76,7 +76,7 @@
   position: absolute;
   top: 12px;
   left: 175px;
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   color: #fff;
   font-size: 16px;
 }
@@ -229,7 +229,7 @@
   margin: 16px 20px 1px 20px;
   padding: 8px 0 8px 0;
   font-weight: normal;
-  font-family: LiberationSansBold, arial;
+  font-family: LiberationSan, arial;
 }
 
 #leftBarContents ul
@@ -321,9 +321,8 @@
   text-align: left;
   color: #39547d;
   padding: 3px 0 3px 1px;
-  font-family: LiberationSansBold, arial;
   font-size: 13px;
-  font-weight: normal;
+  font-weight: bold;
   border-collapse: collapse;
   border-bottom: 1px solid #cad5e5;
   min-height: 28px;
@@ -388,12 +387,12 @@
 
 .bold, .bold td
 {
-  font-family: LiberationSansBold, arial, sans-serif;
+  font-weight: bold;
 }
 
 .normal
 {
-  font-family: LiberationSansRegular, arial, sans-serif;
+  font-weight: normal;
 }
 
 /*----------------------------------------------------------------------------*/
@@ -453,7 +452,7 @@
 
 .introItemHeader
 {
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   color: #3F693F;
   font-size: 13px;
 }
@@ -468,7 +467,7 @@
 /*----------------------------------------------------------------------------*/
 
 @font-face {
-    font-family: 'LiberationSansRegular';
+    font-family: 'LiberationSans';
     src: url('../../fonts/LiberationSans-Regular-webfont.eot');
     src: url('../../fonts/LiberationSans-Regular-webfont.eot?#iefix') format('eot'),
          url('../../fonts/LiberationSans-Regular-webfont.woff') format('woff'),
@@ -479,12 +478,12 @@
 }
 
 @font-face {
-    font-family: 'LiberationSansBold';
+    font-family: 'LiberationSans';
     src: url('../../fonts/LiberationSans-Bold-webfont.eot');
     src: url('../../fonts/LiberationSans-Bold-webfont.eot?#iefix') format('eot'),
          url('../../fonts/LiberationSans-Bold-webfont.woff') format('woff'),
          url('../../fonts/LiberationSans-Bold-webfont.ttf') format('truetype'),
          url('../../fonts/LiberationSans-Bold-webfont.svg#webfontHyWb8e07') format('svg');
-    font-weight: normal;
+    font-weight: bold;
     font-style: normal;
 }

=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/india/india.css'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/india/india.css	2014-03-30 20:47:31 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/india/india.css	2014-05-12 09:56:39 +0000
@@ -5,7 +5,7 @@
 
 * 
 {
-  font-family: LiberationSansRegular, arial, sans-serif;
+  font-family: LiberationSans, arial, sans-serif;
   line-height: 140%;
 }
 
@@ -76,7 +76,7 @@
   position: absolute;
   top: 12px;
   left: 175px;
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   color: #fff;
   font-size: 16px;
 }
@@ -227,8 +227,7 @@
   font-size: 9pt;
   margin: 16px 20px 2px 20px;
   padding: 7px 0 7px 0;
-  font-weight: normal;
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
 }
 
 #leftBarContents ul
@@ -325,9 +324,8 @@
   border-style: solid;
   border-width: 1px;
   border-color: #c8dbea;
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   font-size: 13px;
-  font-weight: normal;
 }
 
 #mainPage 
@@ -381,12 +379,12 @@
 
 .bold, .bold td
 {
-  font-family: LiberationSansBold, arial, sans-serif;
+  font-weight: bold;
 }
 
 .normal
 {
-  font-family: LiberationSansRegular, arial, sans-serif;
+  font-weight: normal;
 }
 
 /*----------------------------------------------------------------------------*/
@@ -446,7 +444,7 @@
 
 .introItemHeader
 {
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   color: #3F693F;
   font-size: 13px;
 }
@@ -461,7 +459,7 @@
 /*----------------------------------------------------------------------------*/
 
 @font-face {
-    font-family: 'LiberationSansRegular';
+    font-family: 'LiberationSans';
     src: url('../../fonts/LiberationSans-Regular-webfont.eot');
     src: url('../../fonts/LiberationSans-Regular-webfont.eot?#iefix') format('eot'),
          url('../../fonts/LiberationSans-Regular-webfont.woff') format('woff'),
@@ -472,12 +470,12 @@
 }
 
 @font-face {
-    font-family: 'LiberationSansBold';
+    font-family: 'LiberationSans';
     src: url('../../fonts/LiberationSans-Bold-webfont.eot');
     src: url('../../fonts/LiberationSans-Bold-webfont.eot?#iefix') format('eot'),
          url('../../fonts/LiberationSans-Bold-webfont.woff') format('woff'),
          url('../../fonts/LiberationSans-Bold-webfont.ttf') format('truetype'),
          url('../../fonts/LiberationSans-Bold-webfont.svg#webfontHyWb8e07') format('svg');
-    font-weight: normal;
+    font-weight: bold;
     font-style: normal;
 }

=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/light_blue/light_blue.css'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/light_blue/light_blue.css	2014-04-29 12:49:25 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/light_blue/light_blue.css	2014-05-12 09:56:39 +0000
@@ -5,7 +5,7 @@
 
 * 
 {
-  font-family: LiberationSansRegular, arial, sans-serif;
+  font-family: LiberationSans, arial, sans-serif;
   line-height: 140%;
 }
 
@@ -76,7 +76,7 @@
   position: absolute;
   top: 12px;
   left: 175px;
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   color: #fff;
   font-size: 16px;
 }
@@ -228,8 +228,7 @@
   font-size: 9pt;
   margin: 16px 20px 1px 20px;
   padding: 8px 0 8px 0;
-  font-weight: normal;
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
 }
 
 #leftBarContents ul
@@ -321,9 +320,8 @@
   text-align: left;
   color: #39547d;
   padding: 3px 0 3px 1px;
-  font-family: LiberationSansBold, arial;
   font-size: 13px;
-  font-weight: normal;
+  font-weight: bold;
   border-collapse: collapse;
   border-bottom: 1px solid #cad5e5;
   min-height: 28px;
@@ -383,12 +381,12 @@
 
 .bold, .bold td
 {
-  font-family: LiberationSansBold, arial, sans-serif;
+  font-weight: bold;
 }
 
 .normal
 {
-  font-family: LiberationSansRegular, arial, sans-serif;
+  font-weight: normal;
 }
 
 /*----------------------------------------------------------------------------*/
@@ -448,7 +446,7 @@
 
 .introItemHeader
 {
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   color: #3F693F;
   font-size: 13px;
 }
@@ -463,7 +461,7 @@
 /*----------------------------------------------------------------------------*/
 
 @font-face {
-    font-family: 'LiberationSansRegular';
+    font-family: 'LiberationSans';
     src: url('../../fonts/LiberationSans-Regular-webfont.eot');
     src: url('../../fonts/LiberationSans-Regular-webfont.eot?#iefix') format('eot'),
          url('../../fonts/LiberationSans-Regular-webfont.woff') format('woff'),
@@ -474,12 +472,12 @@
 }
 
 @font-face {
-    font-family: 'LiberationSansBold';
+    font-family: 'LiberationSans';
     src: url('../../fonts/LiberationSans-Bold-webfont.eot');
     src: url('../../fonts/LiberationSans-Bold-webfont.eot?#iefix') format('eot'),
          url('../../fonts/LiberationSans-Bold-webfont.woff') format('woff'),
          url('../../fonts/LiberationSans-Bold-webfont.ttf') format('truetype'),
          url('../../fonts/LiberationSans-Bold-webfont.svg#webfontHyWb8e07') format('svg');
-    font-weight: normal;
+    font-weight: bold;
     font-style: normal;
 }

=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/login.css'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/login.css	2014-01-10 08:25:15 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/login.css	2014-05-12 09:56:39 +0000
@@ -1,7 +1,7 @@
 
 *
 {
-  font-family: LiberationSansRegular, sans-serif;
+  font-family: LiberationSans, sans-serif;
   line-height: 125%;
   overflow: hidden;
 }

=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/menu.css'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/menu.css	2014-05-06 09:20:18 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/menu.css	2014-05-12 09:56:39 +0000
@@ -12,11 +12,16 @@
 }
 
 #apps-search {
-    width: 330px;
+    border: 1px solid #ccc;
+    border-radius: 3px;
+    outline: none;
     padding-right: 25px;
+    padding-left: 5px;
+    width: 328px;
 }
 
 .apps-search-wrap {
+    padding-bottom: 10px;
     position: relative;
     width: 360px;
 }
@@ -31,7 +36,7 @@
     padding: 0;
     position: absolute;
     right: 5px;
-    top: 24%;
+    top: 18%;
     width: 20px;
 }
 
@@ -327,7 +332,7 @@
 {
     display: table;
     height: 34px;
-    padding-top: 12px;
+    padding-top: 8px;
     text-align: center;
     width: 360px;
 	margin-top: 5px;
@@ -375,15 +380,15 @@
 .menu-drop-down-wrap
 {
     overflow: hidden;
-    height: 340px;
+    height: 375px;
 }
 
 .menu-drop-down-scroll
 {
-    height: 340px;
-    width: 384px;
+    height: 375px;
     overflow-y: auto;
     overflow-x: hidden;
+    width: 384px;
 }
 
 #appsDropDown ul.menuDropDownBox {

=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/vietnam/vietnam.css'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/vietnam/vietnam.css	2014-03-30 20:47:31 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/vietnam/vietnam.css	2014-05-12 09:56:39 +0000
@@ -5,7 +5,7 @@
 
 * 
 {
-  font-family: LiberationSansRegular, arial, sans-serif;
+  font-family: LiberationSans, arial, sans-serif;
   line-height: 140%;
 }
 
@@ -76,7 +76,7 @@
   position: absolute;
   top: 12px;
   left: 175px;
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   color: #fff;
   font-size: 16px;
 }
@@ -228,7 +228,7 @@
   margin: 16px 20px 2px 20px;
   padding: 7px 0 7px 0;
   font-weight: normal;
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
 }
 
 #leftBarContents ul
@@ -325,9 +325,8 @@
   border-style: solid;
   border-width: 1px;
   border-color: #c8dbea;
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   font-size: 13px;
-  font-weight: normal;
 }
 
 #mainPage 
@@ -381,12 +380,12 @@
 
 .bold, .bold td
 {
-  font-family: LiberationSansBold, arial, sans-serif;
+  font-weight: bold;
 }
 
 .normal
 {
-  font-family: LiberationSansRegular, arial, sans-serif;
+  font-weight: normal;
 }
 
 /*----------------------------------------------------------------------------*/
@@ -446,7 +445,7 @@
 
 .introItemHeader
 {
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   color: #3F693F;
   font-size: 13px;
 }
@@ -461,7 +460,7 @@
 /*----------------------------------------------------------------------------*/
 
 @font-face {
-    font-family: 'LiberationSansRegular';
+    font-family: 'LiberationSans';
     src: url('../../fonts/LiberationSans-Regular-webfont.eot');
     src: url('../../fonts/LiberationSans-Regular-webfont.eot?#iefix') format('eot'),
          url('../../fonts/LiberationSans-Regular-webfont.woff') format('woff'),
@@ -472,12 +471,12 @@
 }
 
 @font-face {
-    font-family: 'LiberationSansBold';
+    font-family: 'LiberationSans';
     src: url('../../fonts/LiberationSans-Bold-webfont.eot');
     src: url('../../fonts/LiberationSans-Bold-webfont.eot?#iefix') format('eot'),
          url('../../fonts/LiberationSans-Bold-webfont.woff') format('woff'),
          url('../../fonts/LiberationSans-Bold-webfont.ttf') format('truetype'),
          url('../../fonts/LiberationSans-Bold-webfont.svg#webfontHyWb8e07') format('svg');
-    font-weight: normal;
+    font-weight: bold;
     font-style: normal;
 }

=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/widgets.css'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/widgets.css	2014-04-22 16:55:51 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/css/widgets.css	2014-05-12 09:56:39 +0000
@@ -104,7 +104,7 @@
 
 #detailsArea label 
 {
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   font-size: 13px;
 }
 
@@ -181,7 +181,7 @@
   position: absolute;
   left: 22px;
   top: 50px;
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   font-size: 9pt;
   cursor: pointer;
 }
@@ -190,7 +190,7 @@
 {
   position: absolute;
   right: 2px;
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   font-size: 9pt;
   cursor: pointer;
 }
@@ -271,7 +271,7 @@
 div#orgUnitTree a.selected 
 {
   color: #000;
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
 }
 
 /*----------------------------------------------------------------------------*/
@@ -604,7 +604,7 @@
 
 div.paging span, div.paging a 
 {
-	font-family: LiberationSansBold, arial;
+    font-weight: bold;
 	padding: 0 5px;
 	font-size: 12px;
 }
@@ -705,7 +705,7 @@
   border: 1px solid #bbb;
   border-radius: 3px;
   margin-right: 4px;
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   font-size: 13px;
   background-color: #f3f3f3;
   color: #606060 !important;
@@ -725,7 +725,7 @@
   border: 1px solid #3D77B3;
   border-radius: 3px;
   margin-right: 4px;
-  font-family: LiberationSansBold, arial;
+  font-weight: bold;
   font-size: 13px;
   background-color: #3581CE;
   color: #fff !important;
@@ -778,37 +778,29 @@
 
 .ui-widget, .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button
 {
-  font-family: LiberationSansRegular, arial, sans-serif !important;
+  font-family: LiberationSans, arial, sans-serif !important;
   font-size: 9pt !important;
 }
 
 .ui-datepicker th 
 {
-  font-family: LiberationSansBold, arial, sans-serif !important;
-  font-weight: normal !important;
+  font-family: LiberationSans, arial, sans-serif !important;
   padding: 0.5em 0 !important;
   font-size: 9pt !important;
 }
 
 .ui-widget-header, .ui-widget-header a
 {
-  font-family: LiberationSansBold, arial, sans-serif !important;
-  font-weight: normal !important;
+  font-family: LiberationSans, arial, sans-serif !important;
   font-size: 10pt !important;
 }
 
 .ui-button-text
 {
-  font-family: LiberationSansBold, arial, sans-serif !important;
-  font-weight: normal !important;
+  font-family: LiberationSans, arial, sans-serif !important;
   font-size: 9pt !important;
 }
 
-.ui-state-default
-{
-  font-weight: normal !important;
-}
-
 /*----------------------------------------------------------------------------*/
 /* Messages used for sharing                                                  */
 /*----------------------------------------------------------------------------*/

=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/dhis2/dhis2.menu.js'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/dhis2/dhis2.menu.js	2014-05-06 09:20:18 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/javascripts/dhis2/dhis2.menu.js	2014-05-12 09:56:39 +0000
@@ -629,7 +629,7 @@
                 self.parent().css('width', '360px');
                 self.parent().parent().css('width', '360px');
             } else {
-                if (self.innerHeight() === 340 ) {
+                if (self.innerHeight() === 375 ) {
                     moreAppsElement.hide();
                     self.parent().css('width', '384px');
                     self.parent().parent().css('width', '384px');

=== modified file 'dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ouwt/ouwt.js'
--- dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ouwt/ouwt.js	2014-04-20 16:15:45 +0000
+++ dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/dhis-web-commons/ouwt/ouwt.js	2014-05-12 09:56:39 +0000
@@ -283,7 +283,6 @@
                     subtree.reloadTree();
 
                     $( "#ouwt_loader" ).hide();
-                    selection.scrollToSelected();
                     $( "#orgUnitTree" ).trigger( "ouwtLoaded" );
                 } );
             } );

=== removed file 'dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global_lo.properties'
--- dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global_lo.properties	2014-05-03 11:43:27 +0000
+++ dhis-2/dhis-web/dhis-web-commons/src/main/resources/i18n_global_lo.properties	1970-01-01 00:00:00 +0000
@@ -1,663 +0,0 @@
-not_logged_in=\u0e9a\u0ecd\u0ec8\u0e95\u0ec9\u0ead\u0e87\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0eaa\u0eb9\u0ec8\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a
-log_out=\u0ead\u0ead\u0e81\u0e88\u0eb2\u0e81\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a
-org_unit_tree=\u0ec2\u0e84\u0e87\u0eae\u0ec8\u0eb2\u0e87\u0e81\u0eb2\u0e99\u0e88\u0eb1\u0e94\u0e95\u0eb1\u0ec9\u0e87
-locate_organisation_unit_by_name=\u0e97\u0eb5\u0ec8\u0e95\u0eb1\u0ec9\u0e87\u0e82\u0ead\u0e87\u0eab\u0ebb\u0ea7\u0edc\u0ec8\u0ea7\u0e8d\u0e88\u0eb1\u0e94\u0e95\u0eb1\u0ec9\u0e87\u0e9b\u0eb0\u0e95\u0eb4\u0e9a\u0eb1\u0e94\u0ead\u0eb5\u0e87\u0e95\u0eb2\u0ea1\u0e8a\u0eb7\u0ec8
-error_occurred=\u0e82\u0ecd\u0ec9\u0e9c\u0eb4\u0e94\u0e9e\u0eb2\u0e94\u0e9b\u0eb0\u0e81\u0ebb\u0e94\u0e82\u0eb7\u0ec9\u0e99.
-select_organisationunit=\u0e97\u0ec8\u0eb2\u0e99\u0e95\u0ec9\u0ead\u0e87\u0ec4\u0e94\u0ec9\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec0\u0ead\u0ebb\u0eb2\u0eab\u0ebb\u0ea7\u0edc\u0ec8\u0ea7\u0e8d\u0e81\u0eb2\u0e99\u0e88\u0eb1\u0e94\u0e95\u0eb1\u0ec9\u0e87\u0e9b\u0eb0\u0e95\u0eb4\u0e9a\u0eb1\u0e94\u0e88\u0eb2\u0e81\u0ec2\u0e84\u0e87\u0eae\u0ec8\u0eb2\u0e87\u0ea5\u0ea7\u0ea1
-dhis-web-maintenance-user=\u0e9c\u0eb9\u0ec9\u0e99\u0ecd\u0eb2\u0ec3\u0e8a\u0ec9
-dhis-web-maintenance-settings=\u0e95\u0eb1\u0ec9\u0e87\u0e84\u0ec8\u0eb2
-dhis-web-maintenance-patient=\u0e84\u0ebb\u0e99 \u0ec1\u0ea5\u0eb0 \u0ec1\u0e9c\u0e99\u0e87\u0eb2\u0e99
-dhis-web-importexport=\u0e82\u0eb2\u0ec0\u0e82\u0ebb\u0ec9\u0eb2-\u0e82\u0eb2\u0ead\u0ead\u0e81
-dhis-web-light=\u0ec0\u0e84\u0eb7\u0ec8\u0ead\u0e99\u0e97\u0eb5\u0ec8 (\u0ec1\u0eaa\u0e87)
-dhis-web-dashboard-integration=\u0edc\u0ec9\u0eb2\u0e95\u0ec8\u0eb2\u0e87\u0eaa\u0eb0\u0ec1\u0e94\u0e87\u0e9c\u0ebb\u0e99\u0e97\u0eb5\u0ec8\u0ec0\u0e9b\u0eb1\u0e99\u0eae\u0eb9\u0e9a\u0e9e\u0eb2\u0e9a
-dhis-web-integration=\u0e81\u0eb2\u0e99\u0e9b\u0eb0\u0eaa\u0eb2\u0e99\u0e87\u0eb2\u0e99\u0e82\u0ead\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-dhis-web-linelisting-mp=\u0e81\u0ecd\u0eb2\u0ea5\u0eb1\u0e87\u0e84\u0ebb\u0e99
-intro_dhis-web-maintenance-appmanager=\u0e81\u0eb2\u0e99\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec0\u0e96\u0eb4\u0e87 \u0ec1\u0ea5\u0eb0 \u0e81\u0eb2\u0e99\u0eaa\u0ebb\u0ec8\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99 \u0e81\u0eb2\u0e99\u0e8a\u0ebb\u0ea1\u0ec3\u0e8a\u0ec9 \u0e97\u0eb5\u0ec8\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec0\u0e9e\u0eb5\u0ec9\u0ea1 \u0ea1\u0eb2\u0e94\u0e95\u0eb0\u0e96\u0eb2\u0e99\u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9
-intro_dhis-web-caseentry=\u0e81\u0eb2\u0e99\u0ea5\u0ebb\u0e87\u0e97\u0eb0\u0e9a\u0ebd\u0e99\u0e9c\u0eb9\u0ec9\u0ec4\u0e94\u0ec9\u0eae\u0eb1\u0e9a\u0e9c\u0ebb\u0e99\u0e9b\u0eb0\u0ec2\u0eab\u0e8d\u0e94, \u0e81\u0eb2\u0e99\u0e95\u0eb7\u0ec8\u0ea1\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99 \u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a \u0eaa\u0eb5\u0ec8\u0e87\u0e97\u0eb5\u0ec8\u0ec0\u0e81\u0eb5\u0e94\u0e82\u0eb7\u0ec9\u0e99\u0e95\u0ec8\u0eb2\u0e87\u0ec6 \u0ec1\u0ea5\u0eb0 \u0ec0\u0e9a\u0eb5\u0ec8\u0e87\u0e9a\u0ebb\u0e94\u0ea5\u0eb2\u0e8d\u0e87\u0eb2\u0e99\u0ea5\u0ea7\u0ea1
-intro_dhis-web-dataentry=\u0e81\u0eb2\u0e99\u0e95\u0eb7\u0ec8\u0ea1\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99 \u0ec3\u0eaa\u0ec8\u0ec1\u0e9a\u0e9a\u0e9f\u0ead\u0ea1 \u0ec2\u0e94\u0e8d\u0e81\u0eb2\u0e99\u0ec0\u0e8a\u0eb7\u0ec8\u0ead\u0ea1\u0e95\u0ecd\u0ec8 \u0ead\u0eb5\u0e99\u0ec0\u0e95\u0eb5\u0ec1\u0e99\u0eb1\u0e94 \u0eab\u0ea5\u0eb7\u0e9a\u0ecd\u0ec8\u0ec0\u0e8a\u0eb7\u0ec8\u0ead\u0ea1\u0e95\u0ecd\u0ec8, \u0e81\u0eb2\u0e99\u0ea2\u0eb1\u0ec9\u0e87\u0ea2\u0eb7\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99 \u0ec1\u0ea5\u0eb0 \u0eaa\u0eb1\u0e87\u0ec0\u0e81\u0e94\u0e97\u0ec8\u0eb2\u0ead\u0ec8\u0ebd\u0e87\u0e95\u0ec8\u0eb2\u0e87\u0e82\u0ead\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-intro_dhis-web-mobile=\u0e81\u0eb2\u0e99\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec0\u0e96\u0eb4\u0e87 Smartphone \u0ec1\u0ea1\u0ec8\u0e99\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0e9b\u0ec9\u0ead\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99, \u0e88\u0eb1\u0e94\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a \u0ec1\u0ea5\u0eb0 \u0eaa\u0ebb\u0ec8\u0e87\u0e82\u0ecd\u0ec9\u0e84\u0ea7\u0eb2\u0ea1\u0ec4\u0e94\u0ec9\u0eaa\u0eb0\u0e94\u0ea7\u0e81 \u0ec1\u0ea5\u0eb0 \u0ea7\u0ec8\u0ead\u0e87\u0ec4\u0ea7
-intro_dhis-web-dashboard-integration=\u0e97\u0ec8\u0eb2\u0e99\u0e8d\u0eb1\u0e87\u0eaa\u0eb2\u0ea1\u0eb2\u0e94 \u0ec0\u0e9a\u0eb5\u0ec8\u0e87 \u0e9a\u0eb1\u0e99\u0e94\u0eb2\u0e81\u0eae\u0eb2\u0e9f \u0e97\u0eb5\u0ec8\u0eaa\u0eb0\u0ec1\u0e94\u0e87\u0e9c\u0ebb\u0e99, \u0ec1\u0e9c\u0e99\u0e97\u0eb5\u0ec8 \u0ec1\u0ea5\u0eb0 \u0e82\u0ebd\u0e99\u0e82\u0ecd\u0ec9\u0e84\u0ea7\u0eb2\u0ea1\u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0eaa\u0ebb\u0ec8\u0e87\u0ec3\u0eab\u0ec9\u0e97\u0eb5\u0ea1\u0e87\u0eb2\u0e99
-intro_help_center=\u0e97\u0ec8\u0eb2\u0e99\u0e8d\u0eb1\u0e87\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0e95\u0ebb\u0ea7\u0e8a\u0ec8\u0ea7\u0e8d\u0e88\u0eb2\u0e81\u0eab\u0ea5\u0eb2\u0e8d\u0eab\u0ebb\u0ea7\u0e82\u0ecd\u0ec9\u0e97\u0eb5\u0ec8\u0e81\u0ec8\u0ebd\u0ea7\u0e82\u0ec9\u0ead\u0e87 \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0e88\u0eb1\u0e94\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a \u0ec1\u0ea5\u0eb0 \u0e99\u0ecd\u0eb2\u0ec3\u0e8a\u0ec9 DHIS 2.
-next=\u0e95\u0ecd\u0ec8\u0ec4\u0e9b
-sync_success=\u0e81\u0eb2\u0e99\u0eaa\u0ebb\u0ec8\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec4\u0e9b\u0eab\u0eb2 server (\u0edc\u0ec8\u0ea7\u0e8d\u0e84\u0ea7\u0eb2\u0ea1\u0e88\u0ecd\u0eb2) \u0ec4\u0e94\u0ec9\u0eaa\u0ecd\u0eb2\u0ec0\u0ea5\u0eb1\u0e94
-extend_menu=\u0ec0\u0e9e\u0eb5\u0ec9\u0ea1\u0ec0\u0ea1\u0e99\u0e8d\u0eb9\u0e95\u0eb7\u0ec8\u0ea1
-organisation_unit=\u0eab\u0ebb\u0ea7\u0edc\u0ec8\u0ea7\u0e8d\u0e88\u0eb1\u0e94\u0e95\u0eb1\u0ec9\u0e87\u0e9b\u0eb0\u0e95\u0eb4\u0e9a\u0eb1\u0e94
-start_date=\u0ea1\u0eb7\u0ec9\u0ec0\u0ea5\u0eb5\u0ec8\u0ea1
-end_date=\u0ea1\u0eb7\u0ec9\u0eaa\u0eb4\u0ec9\u0e99\u0eaa\u0eb8\u0e94
-operations=\u0e81\u0eb2\u0e99\u0e9b\u0eb0\u0e95\u0eb4\u0e9a\u0eb1\u0e94\u0e81\u0eb2\u0e99
-all=\u0e97\u0eb1\u0e87\u0edd\u0ebb\u0e94
-clone=\u0e81\u0eb2\u0e99\u0ea5\u0ead\u0e81\u0ec1\u0e9a\u0e9a
-reply=\u0e81\u0eb2\u0e99\u0e95\u0ead\u0e9a
-deleting=\u0e81\u0eb2\u0e99\u0ea5\u0eb6\u0e9a
-gender_male=~\u0ec0\u0e9e\u0e94\u0e8a\u0eb2\u0e8d
-confirm_password=\u0ea2\u0eb7\u0e99\u0ea2\u0eb1\u0e99\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99
-create_new_account=\u0eaa\u0ec9\u0eb2\u0e87~\u0ec0\u0ead\u0e81\u0eb0\u0eaa\u0eb2\u0e99\u0ec3\u0edd\u0ec8
-prove_you_are_not_a_robot=\u0ea2\u0eb1\u0ec9\u0e87\u0ea2\u0eb7\u0e99\u0ea7\u0ec8\u0eb2\u0e97\u0ec8\u0eb2\u0e99\u0e9a\u0ecd\u0ec8\u0ec1\u0ea1\u0ec8\u0e99\u0eab\u0eb8\u0ec8\u0e99\u0e8d\u0ebb\u0e99
-cant_read_the_words_try_another_one=\u0e96\u0ec9\u0eb2\u0ead\u0ec8\u0eb2\u0e99\u0e84\u0ecd\u0eb2\u0e99\u0eb5\u0ec9\u0e9a\u0ecd\u0ec8\u0ec4\u0e94\u0ec9\u0ec1\u0ea1\u0ec8\u0e99\u0ec3\u0eab\u0ec9\u0e9e\u0eb0\u0e8d\u0eb2\u0e8d\u0eb2\u0ea1\u0e84\u0ecd\u0eb2\u0ead\u0eb7\u0ec8\u0e99
-Monthly=\u0ec0\u0e9b\u0eb1\u0e99\u0ec0\u0e94\u0eb7\u0ead\u0e99
-Yearly=\u0ec1\u0e95\u0ec8\u0ea5\u0eb0\u0e9b\u0eb5
-TwoYearly=\u0e97\u0eb8\u0e81\u0ec6\u0eaa\u0ead\u0e87\u0e9b\u0eb5
-FinancialOct=\u0e87\u0ebb\u0e9a\u0e9b\u0eb0\u0ea1\u0eb2\u0e99\u0eaa\u0ebb\u0e81\u0e9b\u0eb5-\u0ec0\u0e94\u0eb7\u0ead\u0e99 10
-format.Monthly.startDate=MMMM yyyy
-format.Monthly.endDate=
-format.BiMonthly.endDate=\u0ec0\u0e94\u0eb7\u0ead\u0e99 \u0e9b\u0eb5
-format.SixMonthly.endDate=MMM yyyy
-format.Yearly.endDate=
-format.TwoYearly.endDate=\u0e9b\u0eb5
-format.Survey.startDate=\u0e9b\u0eb5- \u0ec0\u0e94\u0eb7\u0ead\u0e99-\u0ea1\u0eb5\u0ec9
-format.Relative.startDate=\u0e9b\u0eb5-\u0ec0\u0e94\u0eb7\u0ead\u0e99-\u0ea1\u0eb7\u0ec9 '- '
-format.FinancialApril.startDate=\u0ea1\u0eb7\u0ec9-\u0ec0\u0e94\u0eb7\u0ead\u0e99-\u0e9b\u0eb5 '\u0eab\u0eb2 '
-format.FinancialJuly.endDate=\u0ea1\u0eb7\u0ec9-\u0ec0\u0e94\u0eb7\u0ead\u0e99-\u0e9b\u0eb5
-format.FinancialOct.startDate='FY ' \u0eaa\u0ebb\u0e81\u0e9b\u0eb5\u0e87\u0ebb\u0e9a\u0e9b\u0eb0\u0ea1\u0eb2\u0e99
-month.february=\u0e81\u0eb8\u0ea1\u0e9e\u0eb2
-month.july=\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94
-month.august=\u0eaa\u0eb4\u0e87\u0eab\u0eb2
-month.september=\u0e81\u0eb2\u0e99\u0e8d\u0eb2
-month.short.january=\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99
-month.short.august=\u0ec0\u0e94\u0eb7\u0ead\u0e99\u0eaa\u0eb4\u0e87\u0eab\u0eb2
-weekday.wednesday=\u0ea7\u0eb1\u0e99\u0e9e\u0eb8\u0e94
-weekday.short.tuesday=\u0ea7\u0eb1\u0e99\u0ead\u0eb1\u0e87\u0e84\u0eb2\u0e99
-weekday.short.saturday=\u0ea7\u0eb1\u0e99\u0ec0\u0eaa\u0ebb\u0eb2
-translation_label_id=Id
-translation_label_description=\u0e9e\u0eb1\u0e99\u0ea5\u0eb0\u0e99\u0eb2\u0ead\u0eb0\u0ead\u0ebd\u0e94
-translation_label_comment=\u0e84\u0eb3\u0ec0\u0eab\u0eb1\u0e99
-translation_languagecode=\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9e\u0eb2\u0eaa\u0eb2
-translation_label_numerator_description=\u0e9e\u0eb1\u0e99\u0ea5\u0eb0\u0e99\u0eb2\u0e81\u0ec8\u0ebd\u0ea7\u0e81\u0eb1\u0e9a\u0e95\u0ebb\u0ea7\u0e95\u0eb1\u0ec9\u0e87
-translation_label_denominator_description=\u0e81\u0eb2\u0e99\u0e9e\u0eb1\u0e99\u0ea5\u0eb0\u0e99\u0eb2\u0e81\u0ec8\u0ebd\u0ea7\u0e81\u0eb1\u0e9a\u0e95\u0ebb\u0ea7\u0eab\u0eb2\u0e99
-translation_cancel=\u0e8d\u0ebb\u0e81\u0ec0\u0ea5\u0eb5\u0e81
-translation_add=\u0ec0\u0e9e\u0eb5\u0ec8\u0ea1
-translation_language_must_be_two_chars=\u0e9e\u0eb2\u0eaa\u0eb2\u0e88\u0eb0\u0e95\u0ec9\u0ead\u0e87\u0ea1\u0eb5\u0eaa\u0ead\u0e87\u0e84\u0ecd\u0eb2
-translation_locale_already_exists=\u0e97\u0eb5\u0ec8\u0e95\u0eb1\u0ec9\u0e87\u0e99\u0eb5\u0ec9\u0ea1\u0eb5\u0ec1\u0ea5\u0ec9\u0ea7
-translation_shortname_wellformed=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2 \u0e81\u0ecd\u0eb2\u0e99\u0ebb\u0e94 \u0ec0\u0e9b\u0eb1\u0e99\u0e95\u0ebb\u0ea7\u0edc\u0eb1\u0e87\u0eaa\u0eb7, \u0ec0\u0e9b\u0eb1\u0e99\u0e95\u0ebb\u0ea7\u0ec0\u0ea5\u0e81, \u0edd\u0eb2\u0e8d\u0e82\u0eb5\u0e94\u0e81\u0ec9\u0ead\u0e87 \u0ec1\u0ea5\u0eb0 \u0e8d\u0eb0\u0eab\u0ea7\u0ec8\u0eb2\u0e87 \u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a \u0e9e\u0ebd\u0e87\u0ec1\u0e95\u0ec8\u0e8a\u0eb7\u0ec8\u0eaa\u0eb1\u0ec9\u0e99
-translation_shortname_length=\u0e8a\u0eb7\u0ec8\u0eaa\u0eb1\u0ec9\u0e99\u0eaa\u0eb9\u0e87\u0eaa\u0eb8\u0e94\u0e9a\u0ecd\u0ec8\u0ec3\u0eab\u0ec9\u0e81\u0eb2\u0e8d 25 \u0e84\u0ecd\u0eb2
-translation_label_formName=\u0e8a\u0eb7\u0ec8\u200b\u0ec1\u0e9a\u0e9a\u200b\u0e9f\u0ead\u0ea1\u200b
-name_exists=\u0e8a\u0eb7\u0ec8\u0e99\u0eb5\u0ec9\u0ea1\u0eb5\u0eae\u0ebd\u0e9a\u0eae\u0ec9\u0ead\u0e8d\u0ec1\u0ea5\u0ec9\u0ea7.
-name_is_required=\u0e97\u0ec8\u0eb2\u0e99\u0e88\u0ecd\u0eb2\u0ec0\u0e9b\u0eb1\u0e99\u0e95\u0ec9\u0ead\u0e87\u0e95\u0eb7\u0ec8\u0ea1\u0e8a\u0eb7\u0ec8\u0ec3\u0eaa\u0ec8
-version=\u0ea5\u0eb9\u0ec9\u0e99
-build_revision=\u0e81\u0eb2\u0e99\u0e97\u0ebb\u0e9a\u0e97\u0ea7\u0e99\u0e81\u0eb2\u0e99\u0eaa\u0ec9\u0eb2\u0e87
-environment_variable=\u0e95\u0ebb\u0ea7\u0ec1\u0e9b\u0e97\u0eb2\u0e87\u0e94\u0ec9\u0eb2\u0e99\u0eaa\u0eb0\u0e9e\u0eb2\u0e9a\u0ec1\u0ea7\u0e94\u0ea5\u0ec9\u0ead\u0ea1
-home_page=\u0eab\u0e99\u0ec9\u0eb2\u0eab\u0ea5\u0eb1\u0e81
-launchpad_site=Launchpad \u0ec1\u0ea7\u0e9a\u0ec4\u0e8a
-enter_message=\u0e95\u0eb7\u0ec8\u0ea1\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec3\u0eaa\u0ec8
-send=\u0eaa\u0ebb\u0ec8\u0e87
-send_feedback=\u0eaa\u0ebb\u0ec8\u0e87\u0e84\u0ecd\u0eb2\u0ec0\u0eab\u0eb1\u0e99\u0e84\u0eb7\u0e99\u0ec3\u0eab\u0ec9
-feedback=\u0ea1\u0eb5\u0e84\u0ecd\u0eb2\u0ec0\u0eab\u0eb1\u0e99\u0eaa\u0ebb\u0ec8\u0e87\u0e84\u0eb7\u0e99\u0ec3\u0eab\u0ec9
-help_contents=\u0e8a\u0ec8\u0ea7\u0e8d\u0e97\u0eb2\u0e87\u0e94\u0ec9\u0eb2\u0e99\u0ec0\u0e99\u0eb5\u0eb7\u0ec9\u0ead\u0ec3\u0e99
-os_version=\u0ea5\u0eb8\u0ec9\u0e99\u0e82\u0ead\u0e87\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a
-supportive_software=\u0e8a\u0ead\u0e9a\u0ec1\u0ea7\u0e97\u0eb5\u0ec8\u0eaa\u0eb0\u0edc\u0eb1\u0e9a\u0eaa\u0eb0\u0edc\u0eb9\u0e99\u0ec3\u0eab\u0ec9\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0e97\u0ecd\u0eb2\u0e87\u0eb2\u0e99\u0ec4\u0e94\u0ec9
-foxit_description=\u0e9f\u0ea3\u0eb5 \u0ec1\u0ea5\u0eb0 \u0ea1\u0eb5\u0e97\u0eb1\u0e87\u0ec2\u0e9b\u0ebc\u0ec1\u0e81\u0ebc\u0ea1  PDF \u0e97\u0eb5\u0ec8\u0eaa\u0eb0\u0e94\u0ea7\u0e81 \u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a\u0ea7\u0eb4\u0e99\u0ec2\u0e94
-pdf_reader=\u0ec2\u0e9b\u0ebc\u0ec1\u0e81\u0ebc\u0ea1 PDF \u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a\u0ead\u0ec8\u0eb2\u0e99
-my_datamart_description=\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e9e\u0eb7\u0ec9\u0e99\u0e96\u0eb2\u0e99\u0e97\u0eb5\u0ec8\u0ea1\u0eb5\u0ec1\u0ea1\u0ec8\u0e99\u0ec4\u0e94\u0ec9\u0ec0\u0e81\u0eb1\u0e9a\u0eae\u0eb1\u0e81\u0eaa\u0eb2\u0ec4\u0ea7\u0ec9 \u0ec0\u0ea7\u0ea5\u0eb2\u0e97\u0eb5\u0ec8\u0e9a\u0ecd\u0ec8\u0ea1\u0eb5\u0e81\u0eb2\u0e99\u0ec0\u0e8a\u0eb7\u0ec8\u0ead\u0ea1\u0e95\u0ecd\u0ec8\u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0e81\u0eb2\u0e99\u0ea7\u0eb4\u0ec4\u0e88
-web_api=\u0ec0\u0e84\u0eb7\u0ead\u0e84\u0ec8\u0eb2\u0e8d API
-gender=\u0ec0\u0e9e\u0e94
-male=\u0e8a\u0eb2\u0e8d
-birthday=\u0ea7\u0eb1\u0e99-\u0ec0\u0e94\u0eb7\u0ead\u0e99-\u0e9b\u0eb5 \u0ec0\u0e81\u0eb5\u0e94
-languages=\u0e9e\u0eb2\u0eaa\u0eb2
-style=\u0eae\u0eb9\u0e9a\u0ec1\u0e9a\u0e9a
-user_message_settings=\u0e81\u0eb2\u0e99\u0e95\u0eb1\u0ec9\u0e87\u0e84\u0ec8\u0eb2\u0e82\u0ead\u0e87\u0e9c\u0eb9\u0ec9\u0e8a\u0ebb\u0ea1\u0ec3\u0e8a\u0ec9
-intro_user_general_settings=\u0e94\u0eb1\u0e94\u0e9b\u0eb1\u0e9a\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0e94\u0eb1\u0ec8\u0e87\u0e81\u0ec8\u0eb2\u0ea7\u0ec3\u0eab\u0ec9\u0ec4\u0e9b\u0e95\u0eb2\u0ea1\u0e84\u0ea7\u0eb2\u0ea1\u0e95\u0ec9\u0ead\u0e87\u0e81\u0eb2\u0e99\u0e9e\u0eb4\u0ec0\u0eaa\u0e94\u0e82\u0ead\u0e87\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9 \u0ec0\u0e8a\u0eb1\u0ec8\u0e99\u0e97\u0eb5\u0ec8\u0e95\u0eb1\u0ec9\u0e87 \u0ec1\u0ea5\u0eb0 \u0eae\u0eb9\u0e9a\u0ec1\u0e9a\u0e9a\u0e95\u0ec8\u0eb2\u0e87\u0ec6
-green=\u0e82\u0ebd\u0ea7
-settings_updated=\u0e81\u0eb2\u0e99\u0e95\u0eb1\u0ec9\u0e87\u0e84\u0ec8\u0eb2\u0ec4\u0e94\u0ec9\u0e9b\u0eb1\u0e9a\u0e9b\u0eb8\u0e87\u0ec1\u0ea5\u0ec9\u0ea7
-interface_style=\u0eae\u0eb9\u0e9a\u0ec1\u0e9a\u0e9a\u0e82\u0ead\u0e87\u0e81\u0eb2\u0e99\u0eaa\u0ebb\u0e99\u0e97\u0eb0\u0e99\u0eb2\u0ec1\u0ea5\u0e81\u0e9b\u0ec8\u0ebd\u0e99
-user_groups=\u0e81\u0eb8\u0ec8\u0ea1\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9
-browse_it_here=\u0ec0\u0e9a\u0eb5\u0ec8\u0e87\u0ea2\u0eb9\u0ec8\u0e9a\u0ec8\u0ead\u0e99\u0e99\u0eb5\u0ec9
-change_log=\u0e9b\u0ec8\u0ebd\u0e99 \u0e81\u0eb2\u0e99\u0e9a\u0eb1\u0e99\u0e97\u0eb6\u0e81
-sum=\u0e9c\u0ebb\u0e99\u0e9a\u0ea7\u0e81
-string=\u0eaa\u0eb0\u0e95\u0eb4\u0e87
-date=\u0ea7\u0eb1\u0e99\u0e97\u0eb5\u0ec8
-none=\u0e9a\u0ecd\u0ec8\u0ea1\u0eb5
-profile=\u0eaa\u0eb1\u0e87\u0ea5\u0ea7\u0ea1\u0eab\u0e8d\u0ecd\u0ec9\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0eaa\u0ec8\u0ea7\u0e99\u0e95\u0ebb\u0ea7
-account=\u0e9a\u0eb1\u0e99\u0e8a\u0eb5
-user_account=\u0e9a\u0eb1\u0e99\u0e8a\u0eb5\u0e82\u0ead\u0e87\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9
-wrong_password=\u0ea5\u0eb0\u0eab\u0eb1\u0e81\u0e9c\u0ec8\u0eb2\u0e99\u0e97\u0eb5\u0ec8\u0e9c\u0eb4\u0e94
-help_center=\u0eaa\u0eb9\u0e99\u0e81\u0eb2\u0e87\u0e8a\u0ec8\u0ea7\u0e8d\u0ec0\u0eab\u0ea5\u0eb7\u0ead\u0ec1\u0e81\u0ec9\u0ec4\u0e82
-help_intro_header=\u0e8d\u0eb4\u0e99\u0e94\u0eb5\u0e95\u0ec9\u0ead\u0e99\u0eae\u0eb1\u0e9a\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0eaa\u0eb9\u0ec8\u0eaa\u0eb9\u0e99\u0e81\u0eb2\u0e87\u0e8a\u0ec8\u0ea7\u0e8d\u0ec0\u0eab\u0ea5\u0eb7\u0ead\u0ec1\u0e81\u0ec9\u0ec4\u0e82
-organisation_unit_required_for_user=\u0e9c\u0eb9\u0ec9\u0e8a\u0ebb\u0ea1\u0ec3\u0e8a\u0ec9\u0e88\u0eb0\u0e95\u0ec9\u0ead\u0e87\u0ec4\u0e94\u0ec9\u0ea1\u0ead\u0e9a\u0edd\u0eb2\u0e8d\u0ea2\u0ec8\u0eb2\u0e87\u0edc\u0ec9\u0ead\u0e8d \u0e99\u0eb7\u0ec8\u0e87 \u0eab\u0ebb\u0ea7\u0edc\u0ec8\u0ea7\u0e8d\u0e81\u0eb2\u0e99\u0e88\u0eb1\u0e94\u0e95\u0eb1\u0ec9\u0e87
-address=\u0e97\u0eb5\u0ec8\u0ea2\u0eb9\u0ec8
-please_fix_this_field=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0ec1\u0e9b\u0e87\u0e9a\u0ec8\u0ead\u0e99\u0e99\u0eb5\u0ec9
-please_enter_the_equal_values_again=\u0e81\u0eb2\u0e99\u0e95\u0eb7\u0ec8\u0ea1\u0ea1\u0eb9\u0e99\u0e84\u0ec8\u0eb2\u0e9a\u0ecd\u0ec8\u0e96\u0eb7\u0e81\u0e95\u0ec9\u0ead\u0e87. \u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ec3\u0eaa\u0ec8\u0ec3\u0edd\u0ec8
-please_enter_at_least_than_n_character=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ec3\u0eaa\u0ec8\u0ea2\u0ec8\u0eb2\u0e87\u0e95\u0ecd\u0ec8\u0eb2  {0} \u0ec2\u0e95
-please_enter_a_value_between_a_and_b=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ea1\u0eb9\u0e99\u0e84\u0ec8\u0eb2\u0ec3\u0eaa\u0ec8 \u0ea5\u0eb0\u0eab\u0ea7\u0ec8\u0eb2\u0e87 {0} \u0ec1\u0ea5\u0eb0 {1}.
-please_enter_a_value_greater_than_or_equal_to_n=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ea1\u0eb9\u0e99\u0e84\u0ec8\u0eb2\u0ec3\u0eaa\u0ec8\u0ec3\u0eab\u0e8d\u0ec8\u0e81\u0ea7\u0ec8\u0eb2\u0eab\u0ea5\u0eb7 \u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0e81\u0eb1\u0e9a {0}
-please_letters_numbers_spaces_underscores_only=\u0ea1\u0eb5\u0ec1\u0e95\u0ec8\u0ec2\u0e95\u0edc\u0eb1\u0e87\u0eaa\u0eb7, \u0ec2\u0e95\u0ec0\u0ea5\u0e81, \u0e8d\u0eb0\u0eab\u0ea7\u0ec8\u0eb2\u0e87 \u0ec1\u0ea5\u0eb0 \u0e82\u0eb5\u0e94\u0e81\u0ec9\u0ead\u0e87 \u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0e99\u0eb1\u0ec9\u0e99\u0e97\u0eb5\u0ec8\u0ead\u0eb2\u0e99\u0eb8\u0e8d\u0eb2\u0e94
-please_enter_a_value_less_than_or_equal_to=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ea1\u0eb9\u0e99\u0e84\u0ec8\u0eb2\u0ec3\u0eaa\u0ec8\u0e95\u0ecd\u0ec8\u0eb2\u0e81\u0ea7\u0ec8\u0eb2\u0eab\u0ea5\u0eb7\u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0e81\u0eb1\u0e9a {1}
-no_white_space_please=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e9a\u0ecd\u0ec8\u0ec3\u0eab\u0ec9\u0ea1\u0eb5\u0e9e\u0eb7\u0ec9\u0e99\u0e97\u0eb5\u0ec8\u0e82\u0eb2\u0ea7
-no_start_white_space_please=\u0ec0\u0e82\u0e94\u0e99\u0eb5\u0ec9\u0ec1\u0ea1\u0ec8\u0e99\u0e9a\u0ecd\u0ec8\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec0\u0ea5\u0eb5\u0ec9\u0ea1\u0e95\u0ebb\u0ec9\u0e99\u0e94\u0ec9\u0ea7\u0e8d \u0e8d\u0eb0\u0eab\u0ea7\u0ec8\u0eb2\u0e87
-ZIP_code_must_be_in_the_range=\u0ea5\u0eb0\u0eab\u0eb1\u0e94 ZIP \u0e82\u0ead\u0e87\u0e97\u0ec8\u0eb2\u0e99\u0e88\u0eb0\u0e95\u0ec9\u0ead\u0e87\u0ea2\u0eb9\u0ec8\u0ec3\u0e99\u0ea5\u0eb0\u0eab\u0ea7\u0ec8\u0eb2\u0e87 902xx-xxxx \u0eab\u0eb2 905-xx-xxxx
-please_enter_valid_time=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec0\u0ea7\u0ea5\u0eb2\u0ec3\u0eab\u0ec9\u0e96\u0eb7\u0e81\u0e95\u0ec9\u0ead\u0e87 \u0ec0\u0e8a\u0eb5\u0ec8\u0e87\u0e88\u0eb0\u0ea2\u0eb9\u0ec8\u0ea5\u0eb0\u0eab\u0ea7\u0ec8\u0eb2\u0e87 00:00 \u0ec2\u0ea1\u0e87 \u0eab\u0eb2 23:59 \u0ec2\u0ea1\u0e87
-please_enter_at_least_n_character=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ea2\u0ec8\u0eb2\u0e87\u0edc\u0ec9\u0ead\u0e8d {0} \u0ec2\u0e95\u0edc\u0eb1\u0e87\u0eaa\u0eb7
-this_date_can_not_be_after_today=\u0ea7\u0eb1\u0e99\u0e97\u0eb5\u0e99\u0eb5\u0ec9\u0e9a\u0ecd\u0ec8\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0e9e\u0eb2\u0e8d\u0eab\u0ea5\u0eb1\u0e87\u0ea1\u0eb7\u0ec9\u0e99\u0eb5\u0ec9\u0ec4\u0e94\u0ec9
-password_must_contain_at_least_one_capital_letter_and_one_digit=\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99\u0ea2\u0ec8\u0eb2\u0e87\u0edc\u0ec9\u0ead\u0ebd\u0e88\u0eb0\u0e95\u0ec9\u0ead\u0e87\u0ea1\u0eb5\u0e95\u0ebb\u0ea7\u0edc\u0eb1\u0e87\u0eaa\u0eb7\u0e9e\u0eb5\u0ea1\u0ec3\u0eab\u0e8d\u0ec8 \u0ec1\u0ea5\u0eb0 \u0e99\u0eb7\u0ec8\u0e87\u0e95\u0ebb\u0ea7\u0ec0\u0ea5\u0e81
-closedDate_should_be_greater_than_openDate=\u0ea1\u0eb7\u0ec9\u0e9b\u0eb4\u0e94\u0ea7\u0e82\u0eb0\u0ec1\u0edc\u0e87\u0e88\u0eb0\u0e95\u0ec9\u0ead\u0e87\u0ec3\u0eab\u0e8d\u0ec8\u0e81\u0ea7\u0ec8\u0eb2\u0ea1\u0eb7\u0ec9\u0ec0\u0e9b\u0eb5\u0e94
-unrecognized_coordinate_string=\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e97\u0eb5\u0ec8\u0e95\u0eb1\u0ec9\u0e87\u0e9a\u0ecd\u0ec8\u0e96\u0eb7\u0e81\u0eae\u0eb1\u0e9a\u0eae\u0eb9\u0ec9\u0ec4\u0e94\u0ec9
-please_enter_a_letters_or_digits=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1 \u0e95\u0ebb\u0ea7\u0edc\u0eb1\u0e87\u0eaa\u0eb7 \u0eab\u0ea5\u0eb7\u0e95\u0ebb\u0ea7\u0ec0\u0ea5\u0e81
-please_enter_valid_integer=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0e95\u0ebb\u0ea7\u0ec0\u0ea5\u0e81\u0e97\u0eb5\u0ec8\u0ec4\u0e94\u0ec9\u0ea2\u0eb1\u0ec9\u0e87\u0ea2\u0eb7\u0e99\u0ec1\u0ea5\u0ec9\u0ea7
-please_enter_valid_negative_integer=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0e95\u0ebb\u0ea7\u0ec0\u0ea5\u0e81\u0e97\u0eb5\u0ec8\u0ea1\u0eb5\u0e9c\u0ebb\u0e99\u0ea5\u0ebb\u0e9a
-please_select_dataset=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0e8a\u0eb8\u0e94\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-please_select_dataelement=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ead\u0ebb\u0e87\u0e9b\u0eb0\u0e81\u0ead\u0e9a\u0e82\u0ead\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-selected=\u0ec0\u0ea5\u0eb7\u0ead\u0e81
-waiting=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0ea5\u0ecd\u0e96\u0ec9\u0eb2
-select_at_level=\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ea5\u0eb0\u0e94\u0eb1\u0e9a\u0e82\u0eb1\u0ec9\u0e99
-unselect_children=\u0e8d\u0ebb\u0e81\u0ec0\u0ea5\u0eb5\u0e81\u0e81\u0eb2\u0e99\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec0\u0e94\u0eb1\u0e81\u0e99\u0ec9\u0ead\u0ebd
-organisation_unit_selection_tree=\u0e81\u0eb2\u0e99\u0e84\u0eb1\u0e94\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0eab\u0ebb\u0ea7\u0edc\u0ec8\u0ea7\u0e8d\u0e88\u0eb1\u0e94\u0e95\u0eb1\u0ec9\u0e87\u0e9b\u0eb0\u0e95\u0eb4\u0e9a\u0eb1\u0e94
-go=\u0ec0\u0e94\u0eb5\u0e99\u0edc\u0eca\u0eb2\u0ec4\u0e9b
-delete_success=\u0ea5\u0eb7\u0e9a\u0eab\u0ebb\u0ea7\u0e82\u0ecd\u0ec9\u0ead\u0ead\u0e81
-process=\u0e81\u0ecd\u0eb2\u0ea5\u0eb1\u0e87\u0e94\u0ecd\u0eb2\u0ec0\u0e99\u0eb5\u0e99\u0e81\u0eb2\u0e99
-code=\u0ea5\u0eb0\u0eab\u0eb1\u0e94
-description=\u0e81\u0eb2\u0e99\u200b\u0ead\u0eb0\u200b\u0e97\u0eb4\u200b\u0e8d\u0eb2\u0e8d\u200b
-opening_date=\u0ea1\u0eb7\u0ec9\u0ec0\u0e9b\u0eb5\u0e94
-active=\u0e94\u0eb3\u0ec0\u0e99\u0eb5\u0e99\u0ea2\u0eb9\u0ec8
-type=\u0e8a\u0eb0\u0e99\u0eb4\u0e94
-on_time=\u0e97\u0eb1\u0e99\u0ec0\u0ea7\u0ea5\u0eb2
-indicator_groups=\u0e81\u0eb8\u0ec8\u0ea1\u0e95\u0ebb\u0ea7\u0e8a\u0eb5\u0ec9\u0ea7\u0eb1\u0e94            
-left_expression=\u0e81\u0eb2\u0e99\u0eaa\u0eb0\u0ec1\u0e94\u0e87\u0e84\u0ecd\u0eb2\u0ec0\u0eab\u0eb1\u0e99\u0e9f\u0ec8\u0eb2\u0e8d\u0e8a\u0ec9\u0eb2\u0e8d
-numerator_aggregation_operator=\u0e81\u0eb2\u0e99\u0e9a\u0ecd\u0ea5\u0eb4\u0eab\u0eb2\u0e99\u0e88\u0eb1\u0e94\u0e81\u0eb2\u0e99\u0eaa\u0eb1\u0e87\u0ea5\u0ea7\u0ea1\u0e95\u0ebb\u0ea7\u0e95\u0eb1\u0ec9\u0e87
-denominator_description=\u0e81\u0eb2\u0e99\u0e9e\u0eb1\u0e99\u0ea5\u0eb0\u0e99\u0eb2\u0e81\u0ec8\u0ebd\u0ea7\u0e81\u0eb1\u0e9a\u0e95\u0ebb\u0ea7\u0eab\u0eb2\u0e99
-id_not_numeric=\u0e81\u0eb2\u0e99\u0e88\u0ecd\u0eb2\u0ec1\u0e99\u0e81\u0e97\u0eb5\u0ec8\u0e9a\u0ecd\u0ec8\u0ec1\u0ea1\u0ec8\u0e99\u0e95\u0ebb\u0ea7\u0ec0\u0ea5\u0e81
-absolute=\u0e95\u0ebb\u0ea7\u0ec0\u0ea5\u0e81\u0e97\u0eb5\u0ec8\u0e8d\u0eb1\u0e87\u0e9a\u0ecd\u0ec8\u0e97\u0eb1\u0e99\u0ec4\u0e94\u0ec9\u0e9b\u0eb8\u0e87\u0ec1\u0e95\u0ec8\u0e87
-statistical=\u0eaa\u0eb0\u0e96\u0eb4\u0e95\u0eb4
-left_side_of_expression=\u0e84\u0ecd\u0eb2\u0ec0\u0eab\u0eb1\u0e99\u0e82\u0ead\u0e87\u0e9d\u0ec8\u0ec8\u0eb2\u0e8d\u0e8a\u0ec9\u0eb2\u0e8d
-equal_to_symbol===
-not_equal_to_symbol=!=
-not_equal_to=!=
-public_access=\u0e97\u0eb8\u0e81\u0e84\u0ebb\u0e99\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec0\u0e96\u0eb4\u0e87\u0ec4\u0e94\u0ec9 (\u0ec1\u0e95\u0ec8\u0e95\u0ec9\u0ead\u0e87 login) \u0e81\u0ec8\u0ead\u0e99
-read_only=\u0ead\u0ec8\u0eb2\u0e99\u0ec4\u0e94\u0ec9\u0ea2\u0ec8\u0eb2\u0e87\u0e94\u0ebd\u0ea7
-object_will_created_public=\u0eab\u0ebb\u0ea7\u0e82\u0ecd\u0ec9\u0e99\u0eb5\u0ec9\u0ec1\u0ea1\u0ec8\u0e99\u0e88\u0eb0\u0e96\u0eb7\u0e81\u0eaa\u0ec9\u0eb2\u0e87\u0e94\u0ec9\u0ea7\u0e8d\u0e81\u0eb2\u0e99\u0e81\u0ea7\u0e94\u0ec1\u0e81\u0ec9\u0e88\u0eb2\u0e81\u0eaa\u0eb2\u0e97\u0eb2\u0ea5\u0eb0\u0e99\u0eb0
-afghanistan=\u0ead\u0eb2\u0e9f\u0e81\u0eb2\u0e99\u0eb4\u0eaa\u0e96\u0eb2\u0e99
-burkina_faso=\u0ec0\u0e9a\u0eb5\u0e81\u0eb5\u0e99\u0eb2\u0e9f\u0eb2\u0ec2\u0e8a
-ecowas=ECOWAS
-ghana=Ghana
-guinea_bissau=Guinea Bissau
-haiti=\u0ec4\u0eae\u0e95\u0eb4
-india=\u0ead\u0eb4\u0e99\u0ec0\u0e94\u0e8d
-lesotho=\u0ec0\u0ea5\u0ec2\u0e8a\u0ec2\u0e97
-mali=\u0ea1\u0eb2\u0ea5\u0eb5
-myanmar=\u0e9e\u0eb0\u0ea1\u0ec9\u0eb2
-peru=\u0ec0\u0e9b\u0ea3\u0eb9
-rwanda=\u0ea3\u0eb0\u0ea7\u0eb1\u0e99\u0e94\u0eb2
-zanzibar=\u0e8a\u0eb2\u0e99\u0e8a\u0eb5\u0e9a\u0eb2
-login_password=\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99:
-login_username=\u0e8a\u0eb7\u0ec8\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9:
-new_user_account_name=\u0e8a\u0eb7\u0ec8
-new_user_account_first_name=\u0e97\u0eb3\u0ead\u0eb4\u0e94
-go_back=\u0e81\u0eb1\u0e9a\u0e84\u0eb7\u0e99
-dhis-web-dataentry-national=\u0e9a\u0ec8\u0ead\u0e99\u0e9b\u0ec9\u0ead\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e82\u0ead\u0e87\u0ec1\u0e95\u0ec8\u0ea5\u0eb0\u0e84\u0ebb\u0e99
-dataelement=\u0ead\u0ebb\u0e87\u0e9b\u0eb0\u0e81\u0ead\u0e9a\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-month.march=\u0ea1\u0eb5\u0e99\u0eb2
-java_vendor=\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a Java
-please_do_not_enter_same_values=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0ea2\u0ec8\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ea1\u0eb9\u0e99\u0e84\u0ec8\u0eb2\u0ec0\u0e94\u0eb5\u0ea1
-dhis-web-maintenance-datadictionary=\u0ead\u0ebb\u0e87\u0e9b\u0eb0\u0e81\u0ead\u0e9a\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99 \u0ec1\u0ea5\u0eb0 \u0e95\u0ebb\u0ea7\u0e8a\u0eb5\u0ec9\u0ea7\u0eb1\u0e94
-dhis-web-maintenance-organisationunit=\u0eab\u0ebb\u0ea7\u0edc\u0ec8\u0ea7\u0e8d\u0e81\u0eb2\u0e99\u0e88\u0eb1\u0e94\u0e95\u0eb1\u0ec9\u0e87
-dhis-web-maintenance-appmanager=\u0e81\u0eb2\u0e99\u0e9a\u0ecd\u0ea5\u0eb4\u0eab\u0eb2\u0e99\u0eab\u0ebb\u0ea7\u0edc\u0ec8\u0ea7\u0e8d\u0e81\u0eb2\u0e99\u0e8a\u0ebb\u0ea1\u0ec3\u0e8a\u0ec9
-ok=\u0e95\u0ebb\u0e81\u0ea5\u0ebb\u0e87
-format.OnChange.startDate=\u0e9b\u0eb5-\u0ec0\u0e94\u0eb7\u0ead\u0e99-\u0ea1\u0eb7\u0ec9 '- '
-ireport_description=\u0e81\u0eb2\u0e99\u0ead\u0ead\u0e81\u0ec1\u0e9a\u0e9a\u0e9a\u0ebb\u0e94\u0ea5\u0eb2\u0e8d\u0e87\u0eb2\u0e99\u0e97\u0eb5\u0ec8\u0ec0\u0e9b\u0eb1\u0e99\u0ea1\u0eb2\u0e94\u0e95\u0eb0\u0e96\u0eb2\u0e99\u0e9a\u0ebb\u0e94\u0ea5\u0eb2\u0e8d\u0e87\u0eb2\u0e99
-db_language=\u0e9e\u0eb2\u0eaa\u0eb2\u0e82\u0ead\u0e87\u0e96\u0eb2\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-please_enter_a_different_value_to_above=Please enter a different value to above.
-move_up=\u0e8d\u0ec9\u0eb2\u0e8d\u0e82\u0eb6\u0ec9\u0e99
-greater_than_or_equal_to=>=
-intro_dhis-web-light=Access a mobile device optimized version of data entry and analysis.
-format.FinancialJuly.startDate=dd MMM yyyy 'to '
-dhis2=DHIS2
-FinancialJuly=\u0e87\u0ebb\u0e9a\u0e9b\u0eb0\u0ea1\u0eb2\u0e99\u0eaa\u0ebb\u0e81\u0e9b\u0eb5-\u0ec0\u0e94\u0eb7\u0ead\u0e99\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94
-format.SixMonthly.startDate=\u0ec0\u0e94\u0eb7\u0ead\u0e99 '\u0ec0\u0e96\u0eb4\u0e87 '
-translation_label_title=\u0eab\u0ebb\u0ea7\u0e82\u0ecd\u0ec9
-os_architecture=\u0e82\u0eb0\u0edc\u0eb2\u0e94\u0e82\u0ead\u0e87\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a
-release_page=\u0edc\u0ec9\u0eb2\u0e99\u0eb5\u0ec9\u0ec1\u0ea1\u0ec8\u0e99\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec0\u0e9a\u0eb5\u0ec8\u0e87\u0ec3\u0e94\u0ec9 online
-please_enter_description=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0e81\u0eb2\u0e99\u0e9e\u0eb1\u0e99\u0ea5\u0eb0\u0e99\u0eb2\u0ec3\u0eaa\u0ec8
-delete_confirm=\u0e97\u0ec8\u0eb2\u0e99\u0e95\u0ec9\u0ead\u0e87\u0e81\u0eb2\u0e99\u0e88\u0eb0\u0ea5\u0eb7\u0e9a\u0e96\u0eb5\u0ec9\u0ea1\u0e9a\u0ecd\u0ec8?
-no_page_specified=\u0e9a\u0ecd\u0ec8\u0ec4\u0e94\u0ec9\u0ea5\u0eb0\u0e9a\u0eb8\u0edc\u0ec9\u0eb2
-exception_explanation_text=\u0e82\u0ecd\u0ead\u0eb0\u0ec4\u0e9e \u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0ea1\u0eb5\u0e81\u0eb2\u0e99\u0e82\u0eb1\u0e94\u0e82\u0ec9\u0ead\u0e87. \u0e9b\u0ebb\u0e81\u0eb0\u0e95\u0eb4\u0ec1\u0ea5\u0ec9\u0ea7 \u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e9a\u0ecd\u0ec8\u0ea1\u0eb5 \u0ec1\u0e95\u0ec8\u0e97\u0ec8\u0eb2\u0e99\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0eaa\u0eb7\u0e9a\u0e95\u0ecd\u0ec8\u0e9b\u0eb0\u0e95\u0eb4\u0e9a\u0eb1\u0e94\u0e87\u0eb2\u0e99 \u0ec2\u0e94\u0e8d\u0e95\u0ec9\u0ead\u0e87\u0e81\u0eb1\u0e9a\u0e84\u0eb7\u0e99\u0ec4\u0e9b\u0e99\u0edc\u0ec9\u0eb2\u0e97\u0eb5\u0ec8\u0e9c\u0ec8\u0eb2\u0e99\u0ea1\u0eb2
-unknown_source=\u0e9a\u0ecd\u0ec8\u0eae\u0eb9\u0ec9\u0ec1\u0eab\u0ec8\u0ea5\u0e87\u0e97\u0eb5\u0ec8\u0ea1\u0eb2
-logged_in=\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0eaa\u0eb9\u0ec8\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a
-access_denied_message=\u0e97\u0ec8\u0eb2\u0e99\u0e9a\u0ecd\u0ec8\u0ea1\u0eb5\u0eaa\u0eb4\u0e94\u0e97\u0eb5\u0ec8\u0e88\u0eb0\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec0\u0e9a\u0eb5\u0ec8\u0e87\u0edc\u0ec9\u0eb2\u0e99\u0eb5\u0ec9
-create_access_denied_message=\u0e97\u0ec8\u0eb2\u0e99\u0e9a\u0ecd\u0ec8\u0ead\u0eb2\u0e99\u0eb8\u0e8d\u0eb2\u0e94\u0ec3\u0eab\u0ec9\u0e94\u0eb1\u0e94\u0ec1\u0e9b\u0e87
-update_access_denied_message=\u0e97\u0ec8\u0eb2\u0e99\u0e9a\u0ecd\u0ec8\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0e9b\u0ec8\u0ebd\u0e99\u0ec1\u0e9b\u0e87\u0eab\u0ebb\u0ea7\u0e82\u0ecd\u0ec9\u0e99\u0eb5\u0ec9
-main_menu=\u0ec0\u0ea1\u0e99\u0e8d\u0eb9\u0eab\u0ea5\u0eb1\u0e81
-services=\u0e9a\u0ecd\u0ea5\u0eb4\u0e81\u0eb2\u0e99
-dhis-web-maintenance-dataset=\u0e8a\u0eb8\u0e94\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-dhis-web-maintenance-dataadmin=\u0e9c\u0eb9\u0ec9\u0e9a\u0ecd\u0ea5\u0eb4\u0eab\u0eb2\u0e99\u0e88\u0eb1\u0e94\u0e81\u0eb2\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-dhis-web-caseentry=\u0e81\u0eb2\u0e99\u0e9a\u0eb1\u0e99\u0e97\u0eb6\u0e81\u0eaa\u0ec8\u0ea7\u0e99\u0e95\u0ebb\u0ea7
-dhis-web-validationrule=\u0e84\u0eb8\u0e99\u0e99\u0eb0\u0e9e\u0eb2\u0e9a\u0e82\u0ead\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-dhis-web-mapping=GIS
-dhis-web-dashboard=\u0e9c\u0eb9\u0ec9\u0ea7\u0eb4\u0ec4\u0e88\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-dhis-web-spreadsheet-reporting=\u0e9a\u0ebb\u0e94\u0ea5\u0eb2\u0e8d\u0e87\u0eb2\u0e99\u0ec1\u0e9a\u0e9a\u0e95\u0eb2\u0e95\u0eb0\u0ea5\u0eb2\u0e87
-dhis-web-sms=SMS
-dhis-web-maintenance-in=\u0e81\u0eb2\u0e99\u0e81\u0eb3\u0e99\u0ebb\u0e94\u0e84\u0ec8\u0eb2
-intro_dhis-web-maintenance-dataset=\u0ec0\u0e81\u0eb1\u0e9a\u0eae\u0eb1\u0e81\u0eaa\u0eb2\u0e8a\u0eb8\u0e94\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99, \u0e94\u0eb1\u0e94\u0e9b\u0eb1\u0e9a\u0ec1\u0e9a\u0e9a\u0e9f\u0ead\u0ea1, \u0ead\u0ebb\u0e87\u0e9b\u0eb0\u0e81\u0ead\u0e9a\u0e82\u0ead\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e97\u0eb5\u0ec8\u0ec0\u0e9b\u0eb1\u0e99 \u0eaa\u0ec8\u0ea7\u0e99 \u0ec1\u0ea5\u0eb0 \u0e9e\u0eb2\u0e81\u0e9a\u0eb1\u0e87\u0e84\u0eb1\u0e9a
-intro_dhis-web-maintenance-settings=\u0eae\u0eb1\u0e81\u0eaa\u0eb2\u0e9c\u0eb9\u0ec9\u0e8a\u0ebb\u0ea1\u0ec3\u0e8a\u0ec9 \u0ec1\u0ea5\u0eb0 \u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0e81\u0eb2\u0e99\u0e95\u0eb1\u0ec9\u0e87\u0e84\u0ec8\u0eb2\u0e97\u0eb5\u0ec8\u0e81\u0ec8\u0ebd\u0ea7\u0e82\u0ec9\u0ead\u0e87 \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0e84\u0eb8\u0e99\u0ea5\u0eb1\u0e81\u0eaa\u0eb0\u0e99\u0eb0\u0ea1 \u0e81\u0eb2\u0e99\u0ec1\u0e88\u0ec9\u0e87\u0e81\u0eb2\u0e99 \u0ec1\u0ea5\u0eb0 \u0ead\u0eb7\u0ec8\u0e99\u0ec6\u0ead\u0eb5\u0e81
-intro_dhis-web-maintenance-patient=\u0eae\u0eb1\u0e81\u0eaa\u0eb2\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e9c\u0eb9\u0ec9\u0e97\u0eb5\u0ec8\u0ec4\u0e94\u0ec9\u0eae\u0eb1\u0e9a\u0e9c\u0ebb\u0e99\u0e9b\u0eb0\u0ec2\u0eab\u0e8d\u0e94 \u0ec1\u0ea5\u0eb0 \u0ec1\u0e9c\u0e99\u0e87\u0eb2\u0e99 \u0ea5\u0ea7\u0ea1\u0e97\u0eb1\u0e87 \u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0eaa\u0eb0\u0ec0\u0e9e\u0eb2\u0eb0\u0ead\u0eb7\u0ec8\u0e99\u0ec6\u0ead\u0eb5\u0e81
-intro_dhis-web-validationrule=\u0e81\u0eb2\u0e99\u0ea2\u0eb1\u0ec9\u0e87\u0ea2\u0eb7\u0e99 \u0ec1\u0ea5\u0eb0 \u0e81\u0eb2\u0e99\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec0\u0e96\u0eb4\u0e87\u0e84\u0eb8\u0e99\u0e99\u0eb0\u0e9e\u0eb2\u0e9a\u0e82\u0ead\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec2\u0e94\u0e8d\u0e99\u0ecd\u0eb2\u0ec3\u0e8a\u0ec9\u0ea1\u0eb2\u0e94\u0e95\u0eb0\u0e96\u0eb2\u0e99 \u0ec1\u0ea5\u0eb0 \u0eab\u0ea5\u0eb1\u0e81\u0e81\u0eb2\u0e99
-intro_dhis-web-reporting=\u0e81\u0eb2\u0e99\u0ea7\u0eb4\u0ec4\u0e88\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99 \u0ec1\u0ea5\u0eb0 \u0ead\u0eb1\u0e94\u0e95\u0eb2\u0e81\u0eb2\u0e99\u0ea5\u0eb2\u0e8d\u0e87\u0eb2\u0e99 \u0ec2\u0e94\u0e8d\u0e99\u0ecd\u0eb2\u0ec3\u0e8a\u0ec9 \u0e81\u0eb2\u0e99\u0e81\u0ecd\u0eb2\u0e99\u0ebb\u0e94\u0e81\u0ec8\u0ead\u0e99\u0ea5\u0ec8\u0ea7\u0e87\u0edc\u0ec9\u0eb2 \u0ec1\u0ea5\u0eb0 \u0ec0\u0e84\u0eb7\u0ec8\u0ead\u0e87\u0ea1\u0eb7\u0e81\u0eb2\u0e99\u0ea5\u0eb2\u0e8d\u0e87\u0eb2\u0e99
-intro_dhis-web-pivot=\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0eaa\u0ec9\u0eb2\u0e87\u0e95\u0eb2\u0e95\u0eb0\u0ea5\u0eb2\u0e87\u0ec4\u0e94\u0ec9\u0e95\u0eb2\u0ea1\u0ec3\u0e88\u0e81\u0eb1\u0e9a\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e97\u0eb5\u0ec8\u0eaa\u0eb1\u0e87\u0ea5\u0ea7\u0ea1 \u0ec3\u0e94\u0ec9\u0ec3\u0e99\u0eab\u0ea5\u0eb2\u0e8d\u0eae\u0eb9\u0e9a\u0ec1\u0e9a\u0e9a
-intro_dhis-web-sms=\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0eaa\u0ebb\u0ec8\u0e87 \u0e82\u0ecd\u0ec9\u0e84\u0ea7\u0eb2\u0ea1 SMS \u0ec0\u0e95\u0eb7\u0ec8\u0ead\u0e99 \u0ec1\u0ea5\u0eb0 \u0ec1\u0e88\u0ec9\u0e87\u0e81\u0eb2\u0e99\u0e95\u0ec8\u0eb2\u0e87\u0ec4\u0e94\u0ec9\u0e84\u0eb7\u0e81\u0eb1\u0e9a\u0ec2\u0e97\u0ea5\u0eb0\u0eaa\u0eb1\u0e9a \u0eab\u0eb7\u0ebc \u0e9b\u0eb0\u0e95\u0eb4\u0e97\u0eb4\u0e99\u0ec1\u0e88\u0ec9\u0e87\u0e81\u0eb4\u0e94\u0e88\u0eb0\u0e81\u0ecd\u0eb2\u0e95\u0ec8\u0eb2\u0e87\u0ec6\u0ec4\u0e94\u0ec9
-intro_web_api=\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec4\u0e9b\u0ec0\u0e9a\u0eb5\u0ec8\u0e87\u0ec3\u0e99 Web API \u0e9a\u0ec8\u0ead\u0e99\u0e97\u0eb5\u0ec8\u0e95\u0eb7\u0ec8\u0ea1\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99 \u0e97\u0eb5\u0ec8\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec1\u0ea5\u0e81\u0e9b\u0ec8\u0ebd\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e81\u0eb1\u0e9a\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0e84\u0ead\u0ea1\u0e9e\u0eb5\u0ea7\u0ec0\u0e95\u0eb5\u0ead\u0eb7\u0ec8\u0e99\u0ec6
-intro_about_dhis2=\u0ec0\u0ead\u0ebb\u0eb2\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e81\u0ec8\u0ebd\u0ea7\u0e81\u0eb1\u0e9a\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0e99\u0eb5\u0ec9 \u0ec1\u0ea5\u0eb0 \u0e9a\u0eb1\u0e99\u0e96\u0eb2\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ead\u0eb7\u0ec8\u0e99\u0ec6\u0e82\u0ead\u0e87\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a
-intro_account=\u0e9a\u0ecd\u0ea5\u0eb4\u0eab\u0eb2\u0e99 \u0e9a\u0eb1\u0e99\u0e8a\u0eb5\u0e82\u0ead\u0e87\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9 \u0ec0\u0e8a\u0eb5\u0ec8\u0e87\u0ea5\u0ea7\u0ea1\u0ea1\u0eb5 \u0e8a\u0eb7\u0ec8, \u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99, \u0e97\u0eb5\u0ec8\u0ea2\u0eb9\u0ec8 \u0ead\u0eb5\u0ec1\u0ea1\u0ea7 \u0ec1\u0ea5\u0eb0 \u0ec0\u0e9a\u0eb5\u0ec2\u0e97 \u0ec2\u0ea1\u0e9a\u0eb2\u0e8d
-offline=\u0e9a\u0ecd\u0ec8\u0ea1\u0eb5\u0e81\u0eb2\u0e99\u0ec0\u0e8a\u0eb7\u0ec8\u0ead\u0ea1\u0e95\u0ecd\u0ec8 
-online=\u0ea1\u0eb5\u0e81\u0eb2\u0e99\u0ec0\u0e8a\u0eb7\u0ec8\u0ead\u0ea1\u0e95\u0ecd\u0ec8
-online_notification=\u0e97\u0ec8\u0eb2\u0e99\u0ea2\u0eb9\u0ec8\u0ec3\u0e99\u0e81\u0eb2\u0e99\u0ec0\u0e8a\u0eb7\u0ec8\u0ead\u0ea1\u0e95\u0ecd\u0ec8\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0ead\u0eb4\u0e99\u0ec0\u0e95\u0eb5\u0ec1\u0e99\u0e94
-sync_now=\u0e81\u0eb2\u0e99\u0eaa\u0ebb\u0ec8\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ead\u0ead\u0e81\u0eaa\u0eb9\u0ec8\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a
-sync_failed=\u0e81\u0eb2\u0e99\u0eaa\u0ebb\u0ec8\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec4\u0e9b\u0eab\u0eb2\u0e96\u0eb2\u0e99\u0ec0\u0e81\u0eb1\u0e9a\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e9a\u0ecd\u0ec8\u0ec4\u0e94\u0ec9, \u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e9e\u0eb0\u0e8d\u0eb2\u0e8d\u0eb2\u0ea1\u0ead\u0eb5\u0e81\u0ec0\u0e97\u0eb7\u0ec8\u0ead\u0ec3\u0edd\u0ec8
-year=\u0e9b\u0eb5
-hide_details=\u0ec0\u0e8a\u0eb7\u0ec8\u0ead\u0e87\u0ea5\u0eb2\u0e8d\u0ea5\u0eb0\u0ead\u0ebd\u0e94
-change_password=\u0e9b\u0ec8\u0ebd\u0e99\u0ec1\u0e9b\u0e87\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99
-show_menu=\u0eaa\u0eb0\u0ec1\u0e94\u0e87\u0ec3\u0eab\u0ec9\u0ec0\u0eab\u0eb1\u0e99\u0ec0\u0ea1\u0e99\u0e8d\u0eb9
-show_main_menu=\u0eaa\u0eb0\u0ec1\u0e94\u0e87\u0ec3\u0eab\u0ec9\u0ec0\u0eab\u0eb1\u0e99\u0ec0\u0ea1\u0e99\u0e8d\u0eb9\u0eab\u0ea5\u0eb1\u0e81
-view_home_page=\u0e81\u0eb1\u0e9a\u0e84\u0eb7\u0e99\u0ea1\u0eb2\u0eab\u0eb2\u0edc\u0ec9\u0eb2\u0e97\u0ecd\u0eb2\u0ead\u0eb4\u0e94
-view_intepretations=\u0ec0\u0e9a\u0eb5\u0ec8\u0e87\u0e81\u0eb2\u0e99\u0ec1\u0e9b
-add_new=\u0ec0\u0e9e\u0eb5\u0ec9\u0ea1\u0ec3\u0eaa\u0ec8\u0ec3\u0edd\u0ec8
-remove=\u0ec0\u0ead\u0ebb\u0eb2\u0ead\u0ead\u0e81
-edit=\u0ec1\u0e81\u0ec9\u0ec4\u0e82
-close=\u0e9b\u0eb4\u0e94
-gender_female=~\u0ec0\u0e9e\u0e94\u0e8d\u0eb4\u0e87
-gender_other=\u0ead\u0eb7\u0ec8\u0e99\u0ec6
-mobile_phone=\u0ec2\u0e97\u0ea5\u0eb0\u0eaa\u0eb1\u0e9a\u0ea1\u0eb7\u0e96\u0eb7
-restore_account=\u0eae\u0ec9\u0ead\u0e87\u0e84\u0eb7\u0e99\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9a\u0eb1\u0e99\u0e8a\u0eb5
-account_recovery=\u0e9b\u0ebb\u0ea7\u0ec1\u0e9b\u0e87\u0e84\u0eb7\u0e99\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9a\u0eb1\u0e99\u0e8a\u0eb5
-recover=\u0e81\u0eb2\u0e99\u0e81\u0eb9\u0ec9\u0e84\u0eb7\u0e99
-code_from_email=\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e88\u0eb2\u0e81 email
-password_hint=\u0ea2\u0ec8\u0eb2\u0e87\u0e95\u0ecd\u0ec8\u0eb2\u0ec3\u0eab\u0ec9\u0ea1\u0eb5 8 \u0e95\u0ebb\u0ea7\u0edc\u0eb1\u0e87\u0eaa\u0eb7, \u0ec3\u0e99\u0e99\u0eb1\u0e99 \u0ea1\u0eb5\u0ec2\u0e95\u0e99\u0eb7\u0ec8\u0e87\u0ec0\u0e9b\u0eb1\u0e99\u0ec2\u0e95\u0e9e\u0eb4\u0ea1\u0ec3\u0eab\u0e8d\u0ec8 \u0ec1\u0ea5\u0eb0 \u0ea1\u0eb5\u0ec2\u0e95\u0ec0\u0ea5\u0e81 1\u200b \u0ec2\u0e95
-object_not_deleted_associated_by_objects=\u0e9a\u0ecd\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ea5\u0eb7\u0e9a\u0e9f\u0eb2\u0e8d\u0e99\u0eb5\u0ec9\u0ec4\u0e94\u0ec9\u0ec0\u0e9e\u0eb2\u0eb0\u0e8d\u0eb1\u0e87\u0ec0\u0e9b\u0eb5\u0e94\u0ec3\u0e8a\u0ec9\u0ea2\u0eb9\u0ec8
-Weekly=\u0ec0\u0e9b\u0eb1\u0e99\u0ead\u0eb2\u0e97\u0eb4\u0e94
-BiMonthly=\u0e97\u0eb8\u0e81\u0ec6\u0eaa\u0ead\u0e87\u0ec0\u0e94\u0eb7\u0ead\u0e99
-Quarterly=\u0ec1\u0e95\u0ec8\u0ea5\u0eb0\u0ec4\u0e95\u0ebc\u0ea1\u0eb2\u0e94
-Relative=\u0ec4\u0e81\u0ec9\u0e84\u0ebd\u0e87
-FinancialApril=\u0e87\u0ebb\u0e9a\u0e9b\u0eb0\u0ea1\u0eb2\u0e99\u0e81\u0eb2\u0e99\u0ec0\u0e87\u0eb4\u0e99-\u0ec0\u0e94\u0eb7\u0ead\u0e99\u0ec0\u0ea1\u0eaa\u0eb2
-format.Daily.endDate=
-format.TwoYearly.startDate=yyyy 'and '
-month.april=\u0ec0\u0ea1\u0eaa\u0eb2
-month.may=\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2
-month.november=\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2
-month.december=\u0e97\u0eb1\u0e99\u0ea7\u0eb2
-month.short.march=\u0ea1\u0eb5\u0e99\u0eb2
-month.short.june=\u0ea1\u0eb5\u0e96\u0eb8\u0e99\u0eb2
-month.short.november=\u0e9e\u0eb0\u0e88\u0eb4\u0e81
-month.short.december=\u0ec0\u0e94\u0eb7\u0ead\u0e99\u0e97\u0eb1\u0e99\u0ea7\u0eb2
-weekday.friday=\u0ea7\u0eb1\u0e99\u0eaa\u0eb8\u0e81
-weekday.saturday=\u0ea7\u0eb1\u0e99\u0ec0\u0eaa\u0ebb\u0eb2
-weekday.short.monday=\u0ea7\u0eb1\u0e99\u0e88\u0eb1\u0e99
-weekday.short.thursday=\u0ea7\u0eb1\u0e99\u0e9e\u0eb0\u0eab\u0eb1\u0e94
-weekday.short.friday=\u0ea7\u0eb1\u0e99\u0eaa\u0eb8\u0e81
-weekday.short.sunday=\u0ea7\u0eb1\u0e99\u0ead\u0eb2\u0e97\u0eb4\u0e94
-translation_addlocale=\u0e95\u0eb7\u0ec8\u0ea1\u0e97\u0eb5\u0ec8\u0e95\u0eb1\u0ec9\u0e87
-translation_select_ref=\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0eaa\u0eb7\u0ec8\u0e87\u0ead\u0ec9\u0eb2\u0e87\u0ead\u0eb5\u0e87
-translation_label_shortName=\u0e8a\u0eb7\u0ec8\u0eaa\u0eb1\u0ec9\u0e99
-translation_variant=\u0eab\u0ea5\u0eb2\u0e8d\u0ec1\u0e9a\u0e9a
-translation_countrycode=\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9b\u0eb0\u0ec0\u0e97\u0e94
-translation_country_must_be_two_chars=\u0e9b\u0eb0\u0ec0\u0e97\u0e94\u0e88\u0eb0\u0e95\u0ec9\u0ead\u0e87\u0ea1\u0eb5\u0eaa\u0ead\u0e87\u0e95\u0ebb\u0ea7\u0ead\u0eb1\u0e81\u0eaa\u0ead\u0e99
-translation_variant_must_be_specified=\u0eae\u0eb9\u0e9a\u0ec1\u0e9a\u0e9a\u0e95\u0ec8\u0eb2\u0e87\u0ec6\u0e88\u0eb0\u0e95\u0ec9\u0ead\u0e87\u0ec4\u0e94\u0ec9\u0e81\u0ecd\u0eb2\u0e99\u0ebb\u0e94
-translation_duplicated_name_with=\u0e82\u0ecd\u0ead\u0eb0\u0ec4\u0e9e \u0e8a\u0eb7\u0ec8\u0e82\u0ead\u0e87\u0e97\u0ec8\u0eb2\u0e99\u0e97\u0eb5\u0ec8\u0e95\u0eb7\u0ec8\u0ea1\u0ec3\u0eaa\u0ec8\u0e8a\u0ecd\u0ec9\u0eb2\u0e8a\u0ec9\u0ead\u0e99\u0e81\u0eb1\u0e9a\u0e8a\u0eb7\u0ec8
-build_date=\u0ea7\u0eb1\u0e99\u0eaa\u0ec9\u0eb2\u0e87
-external_configuration_directory=\u0ec2\u0e84\u0e87\u0eaa\u0ec9\u0eb2\u0e87\u0e82\u0ead\u0e87\u0eae\u0eb9\u0e9a\u0ec1\u0e9a\u0e9a\u0e9e\u0eb2\u0e8d\u0e99\u0ead\u0e81
-database_user=\u0e96\u0eb2\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e82\u0ead\u0e87\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9
-current_user=\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9\u0e9b\u0eb0\u0e88\u0eb8\u0e9a\u0eb1\u0e99
-system_status=\u0eaa\u0eb0\u0e9e\u0eb2\u0e9a\u0e82\u0ead\u0e87\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a
-about_dhis2=\u0e81\u0ec8\u0ebd\u0ea7\u0e81\u0eb1\u0e9a DHIS 2
-last_name=\u0e99\u0eb2\u0ea1\u0eaa\u0eb0\u0e81\u0eb8\u0e99
-unknown=\u0e9a\u0ecd\u0ec8\u0eae\u0eb9\u0ec9
-os_name=\u0e8a\u0eb7\u0ec8\u0e82\u0ead\u0e87\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0e9a\u0ecd\u0ea5\u0eb4\u0eab\u0eb2\u0e99\u0e88\u0eb1\u0e94\u0e81\u0eb2\u0e99
-chrome_description=web browser \u0e97\u0eb5\u0ec8\u0ea1\u0eb5\u0e84\u0ea7\u0eb2\u0ea1\u0ec4\u0ea7\u0eaa\u0eb9\u0e87
-web_browser=\u0eae\u0e87\u0e81\u0ec0\u0e9a\u0eb4\u0ec8\u0e87\u0e96\u0eb2\u0e99\u0ec0\u0e9a\u0eb4\u0ec8\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e97\u0eb5\u0ec8\u0ea1\u0eb5\u0e84\u0ea7\u0eb2\u0ea1\u0ec4\u0ea7\u0e8d\u0eb9\u0e87
-online_release_page=\u0edc\u0ec9\u0eb2\u0e97\u0eb5\u0ec8\u0eaa\u0ebb\u0ec8\u0e87\u0ead\u0ead\u0e81\u0ec4\u0e99\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0ead\u0eb4\u0e99\u0ec0\u0e95\u0eb5\u0ec1\u0e99\u0e94
-edit_profile=\u0e94\u0eb1\u0e94\u0ec1\u0e81\u0ec9 \u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-view_profile=\u0ec0\u0e9a\u0eb5\u0ec8\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-job_title=\u0e95\u0eb3\u0ec1\u0edc\u0ec8\u0e87
-introduction=\u0ec1\u0e99\u0eb0\u0e99\u0eb3
-employer=\u0e9c\u0eb9\u0ec9\u0e88\u0ec9\u0eb2\u0e87\u0e87\u0eb2\u0e99
-interests=\u0e9c\u0ebb\u0e99\u0e81\u0ecd\u0eb2\u0ec4\u0ea5
-settings=\u0e81\u0eb2\u0e99\u0e95\u0eb1\u0ec9\u0e87\u0e84\u0ec8\u0eb2
-user_settings=\u0e81\u0eb2\u0e99\u0e95\u0eb1\u0ec9\u0e87\u0e84\u0ec8\u0eb2\u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a\u0e9c\u0eb9\u0ec9\u0e8a\u0ebb\u0ea1\u0ec3\u0e8a\u0ec9
-message=\u0e82\u0ecd\u0ec9\u0e84\u0ea7\u0eb2\u0ea1
-language=\u0e9e\u0eb2\u0eaa\u0eb2\u0e97\u0eb5\u0ec8\u0ec4\u0e8a\u0ec9\u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a\u0ec3\u0e8a\u0ec9\u0eaa\u0ebb\u0e99\u0e97\u0eb0\u0e99\u0eb2\u0ec1\u0ea5\u0e81\u0e9b\u0ec8\u0ebd\u0e99
-use_db_locale_no_translation=\u0ec3\u0e8a\u0ec9\u0e96\u0eb2\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec3\u0e99\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0e82\u0ead\u0e87\u0ea1\u0eb1\u0e99 \u0e9a\u0ecd\u0ec8\u0ea1\u0eb5\u0e81\u0eb2\u0e99\u0ec1\u0e9b
-messages=\u0e82\u0ecd\u0ec9\u0e84\u0ea7\u0eb2\u0ea1
-server_memory=\u0e96\u0eb2\u0e99\u0e84\u0ea7\u0eb2\u0ea1\u0e88\u0ecd\u0eb2
-please_select=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0ec0\u0ea5\u0eb7\u0ead\u0e81
-release=\u0ec0\u0ea5\u0eb7\u0ead\u0e81
-false=No
-text=\u0e82\u0ecd\u0ec9\u0e84\u0ea7\u0eb2\u0ea1
-number=\u0e88\u0eb3\u0e99\u0ea7\u0e99
-retype_new_password=\u0e9e\u0eb4\u0ea1\u0e84\u0eb7\u0e99\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99
-email=\u0ead\u0eb5\u0ec0\u0ea1\u0ea5
-user_roles=\u0edc\u0ec9\u0eb2\u0e97\u0eb5\u0ec8\u0e82\u0ead\u0e87\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9
-update_user_success=\u0e9a\u0eb1\u0e99\u0e8a\u0eb5\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9\u0e9a\u0ecd\u0ec8\u0ec4\u0e94\u0ec9\u0e9b\u0eb1\u0e9a\u0e9b\u0eb8\u0e87\u0ec0\u0e97\u0eb7\u0ec8\u0ead
-please_wait_while_the_system_is_processing=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0ea5\u0ecd\u0e96\u0ec9\u0eb2\u0e81\u0ecd\u0eb2\u0ea5\u0eb1\u0e87\u0e94\u0ecd\u0eb2\u0ec0\u0e99\u0eb5\u0e99\u0e81\u0eb2\u0e99
-contact_details=\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0e81\u0eb2\u0e99\u0e95\u0eb4\u0e94\u0e95\u0ecd\u0ec8\u0e9e\u0ebb\u0ea7\u0e9e\u0eb1\u0e99
-please_enter_a_valid_date_iso=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ea7\u0eb1\u0e99\u0e97\u0eb5\u0ec8\u0ec3\u0eab\u0ec9\u0e96\u0eb7\u0e81\u0e95\u0ec9\u0ead\u0e87 (\u0e95\u0ebb\u0ea7\u0ea2\u0ec8\u0eb2\u0e87: 1990-01-01)
-please_enter_a_valid_digits=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ec3\u0eaa\u0ec8\u0ec1\u0e95\u0ec8\u0e95\u0ebb\u0ea7\u0ec0\u0ea5\u0e81
-please_enter_a_value_with_a_valid_expression=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ea1\u0eb9\u0e99\u0e84\u0ec8\u0eb2\u0e94\u0ec9\u0ea7\u0e8d\u0e81\u0eb2\u0e99\u0e82\u0eb0\u0eab\u0e8d\u0eb2\u0e8d
-first_character_must_be_alphabetical=\u0e95\u0ebb\u0ea7\u0e97\u0ecd\u0eb2\u0ead\u0eb4\u0e94\u0e88\u0eb0\u0e95\u0ec9\u0ead\u0e87\u0ec1\u0ea1\u0ec8\u0e99\u0e95\u0ebb\u0ea7\u0edc\u0eb1\u0e87\u0eaa\u0eb7
-please_enter_no_more_than_n_character=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ec3\u0eaa\u0ec8\u0e9a\u0ecd\u0ec8\u0ec3\u0eab\u0ec8\u0ec9\u0e81\u0eb2\u0e8d (0) \u0e95\u0ebb\u0ea7
-please_enter_a_value_between_n_character=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ea1\u0eb9\u0e99\u0e84\u0ec8\u0eb2\u0ec3\u0eaa\u0ec8 \u0ea5\u0eb0\u0eab\u0ea7\u0ec8\u0eb2\u0e87 (0) \u0ec1\u0ea5\u0eb0 (1) \u0ec0\u0e9b\u0eb1\u0e99\u0e95\u0ebb\u0ea7\u0edc\u0eb1\u0e87\u0eaa\u0eb7\u0e8d\u0eb2\u0ea7
-please_enter_a_value_less_than_or_equal_to_n=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ea1\u0eb9\u0e99\u0e84\u0ec8\u0eb2\u0ec3\u0eaa\u0ec8 \u0e95\u0ecd\u0ec8\u0eb2\u0e81\u0ea7\u0ec8\u0eb2\u0eab\u0ea5\u0eb7 \u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0e81\u0eb1\u0e9a (0)
-letters_or_punctuation_only_please=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ec3\u0eaa\u0ec8\u0ec1\u0e95\u0ec8\u0ec2\u0e95\u0edc\u0eb1\u0e87\u0eaa\u0eb7 \u0eab\u0ea5\u0eb7 \u0e88\u0ecd\u0ec9\u0eb2, \u0e88\u0eb8\u0e94 \u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0e99\u0eb1\u0ec9\u0e99
-please_enter_at_least_n_words=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ec3\u0eaa\u0ec8\u0ea2\u0ec8\u0eb2\u0e87\u0e95\u0ecd\u0ec8\u0eb2 (0) \u0e84\u0ecd\u0eb2
-available=\u0eab\u0eb2\u0ec4\u0e94\u0ec9
-select_in_group=\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec0\u0e9b\u0eb1\u0e99\u0e81\u0eb8\u0ec8\u0ea1
-move_selected=\u0e8d\u0ec9\u0eb2\u0e8d\u0e81\u0eb2\u0e99\u0ec0\u0ea5\u0eb7\u0ead\u0e81
-remove_selected=\u0ec0\u0ead\u0ebb\u0eb2\u0ead\u0eb1\u0e99\u0e97\u0eb5\u0ec8\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec4\u0ea7\u0ec9\u0e99\u0eb1\u0ec9\u0e99\u0ead\u0ead\u0e81
-move_down=\u0e8d\u0ec9\u0eb2\u0e8d\u0ea5\u0ebb\u0e87
-move_to_bottom=\u0e8d\u0ec9\u0eb2\u0e8d\u0ea5\u0ebb\u0e87\u0ec4\u0e9b\u0ea5\u0eb8\u0ec8\u0ea1
-no_of_pages=\u0e88\u0ecd\u0eb2\u0e99\u0ea7\u0e99\u0e82\u0ead\u0e87\u0edc\u0ec9\u0eb2\u0ec0\u0e88\u0ebb\u0ec9\u0eb1\u0ec9\u0ebd
-filter=\u0e95\u0ebb\u0ea7\u0e81\u0ead\u0e87
-clear=\u0e88\u0eb0\u0ec1\u0e88\u0ec9\u0e87\u0edd\u0ebb\u0e94\u0ec1\u0ea5\u0ec9\u0ea7
-find=\u0e8a\u0ead\u0e81\u0eab\u0eb2
-name=\u0e8a\u0eb7\u0ec8
-target=\u0ec0\u0e9b\u0ebb\u0ec9\u0eb2\u0edd\u0eb2\u0e8d
-data_sets=\u0e8a\u0eb8\u0e94\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-data_element_concepts=\u0ec1\u0e99\u0ea7\u0e84\u0ea7\u0eb2\u0ea1\u0e84\u0eb4\u0e94\u0e82\u0ead\u0e87\u0ead\u0ebb\u0e87\u0e9b\u0eb0\u0e81\u0ead\u0e9a\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-organisation_units=\u0eab\u0ebb\u0ea7\u0edc\u0ec8\u0ea7\u0e8d\u0e81\u0eb2\u0e99\u0e88\u0eb1\u0e94\u0e95\u0eb1\u0ec9\u0e87
-validation_rules=\u0eab\u0ea5\u0eb1\u0e81\u0e81\u0eb2\u0e99\u0e81\u0eb2\u0e99\u0ea2\u0eb1\u0ec9\u0e87\u0ea2\u0eb7\u0e99
-indicator_type=\u0e9b\u0eb0\u0ec0\u0e9e\u0e94\u0e95\u0ebb\u0ea7\u0e8a\u0eb5\u0ec9\u0ea7\u0eb1\u0e94
-aggregation_operator=\u0e81\u0eb2\u0e99\u0e9b\u0eb0\u0e95\u0eb4\u0e9a\u0eb1\u0e94\u0e87\u0eb2\u0e99\u0e81\u0eb2\u0e99\u0eaa\u0eb1\u0e87\u0ea5\u0ea7\u0ea1
-numerator_formula=\u0eaa\u0eb9\u0e94\u0e82\u0ead\u0e87\u0e95\u0ebb\u0ea7\u0e95\u0eb1\u0ec9\u0e87
-numerator_description=\u0e9e\u0eb1\u0e99\u0ea5\u0eb0\u0e99\u0eb2\u0ec0\u0e96\u0eb4\u0e87\u0e95\u0ebb\u0ea7\u0e95\u0eb1\u0ec9\u0e87
-expression_is_empty=\u0e9a\u0ecd\u0ec8\u0ea1\u0eb5\u0e81\u0eb2\u0e99\u0eaa\u0eb0\u0ec1\u0e94\u0e87\u0ead\u0ead\u0e81
-data_element_does_not_exist=\u0e9a\u0ecd\u0ec8\u0ea1\u0eb5\u0ead\u0ebb\u0e87\u0e9b\u0eb0\u0e81\u0ead\u0e9a\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-right_side_description=\u0e81\u0eb2\u0e99\u0e9e\u0eb1\u0e99\u0ea5\u0eb0\u0e99\u0eb2\u0e82\u0ead\u0e87\u0e9d\u0ec8\u0eb2\u0e8d\u0e82\u0ea7\u0eb2
-less_than_or_equal_to_symbol=<=
-greater_than=>
-constants=\u0e84\u0ec8\u0eb2\u0e84\u0ebb\u0e87\u0e97\u0eb5\u0ec8
-external_access=\u0e81\u0eb2\u0e99\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec0\u0e96\u0eb4\u0e87\u0e88\u0eb2\u0e81\u0e9e\u0eb2\u0e8d\u0e99\u0ead\u0e81(\u0ec2\u0e94\u0e8d\u0e9a\u0ecd\u0ec8\u0ec4\u0e94\u0ec9 login
-ajax_login_failed=Login \u0e9a\u0ecd\u0ec8\u0ec4\u0e94\u0ec9 \u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2 \u0e81\u0ea7\u0e94\u0e84\u0eb7\u0e99\u0ec0\u0e9a\u0eb7\u0ec8\u0e87\u0e8a\u0eb7\u0ec8\u0e9c\u0eb9\u0ec9\u0e8a\u0ebb\u0ea1\u0ec3\u0e8a\u0ec9 \u0ec1\u0ea5\u0eb0 \u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99 \u0ec1\u0ea5\u0ec9\u0ea7 \u0e9e\u0eb0\u0e8d\u0eb2\u0e8d\u0eb2\u0ea1\u0ead\u0eb5\u0e81\u0ec0\u0e97\u0eb7\u0ec8\u0ead
-no_access=\u0e9a\u0ecd\u0ec8\u0ea1\u0eb5
-search_for_user_groups=\u0e84\u0ebb\u0ec9\u0e99\u0eab\u0eb2\u0e9c\u0eb9\u0ec9\u0e8a\u0ebb\u0ea1\u0ec3\u0e8a\u0ec9\u0e97\u0eb5\u0ec8\u0ec0\u0e9b\u0eb1\u0e99\u0e81\u0eb8\u0ec8\u0ea1
-akros=Akros
-benin=\u0ec0\u0e9a\u0e99\u0eb5\u0e99
-botswana=\u0e9a\u0ead\u0eaa\u0ea7\u0eb2\u0e99\u0eb2
-colombia=\u0ec2\u0e84\u0ea5\u0eb5\u0ea1\u0ec0\u0e9a\u0e8d
-congo_brazzaville=\u0eaa\u0eb2\u0e97\u0eb2\u0ea5\u0eb0\u0e99\u0eb0\u0ea5\u0eb1\u0e94\u0e81\u0ebb\u0e87\u0ec2\u0e81
-east_africa_community=\u0e8a\u0eb8\u0ea1\u0e8a\u0ebb\u0e99\u0ead\u0e9f\u0eae\u0eb4\u0e81\u0e81\u0eb2\u0e95\u0eb2\u0ec0\u0ea7\u0eb1\u0e99\u0ead\u0ead\u0e81\u0e8a\u0ebd\u0e87\u0ec4\u0e95\u0ec9
-ecuador=\u0ec0\u0ead\u0e84\u0ebb\u0ea7\u0e94\u0ecd
-global_fund=\u0e81\u0ead\u0e87\u0e97\u0eb6\u0e99\u0ec2\u0ea5\u0e81
-guinea=Guinea
-irc=\u0e84\u0eb0\u0e99\u0eb0\u0e81\u0ecd\u0eb2\u0ea1\u0eb0\u0e81\u0eb2\u0e99\u0e8a\u0ec8\u0ea7\u0e8d\u0ec1\u0e81\u0ec9\u0ec4\u0e82\u0eaa\u0eb2\u0e81\u0ebb\u0e99
-liberia=\u0ea5\u0eb5\u0ec0\u0e9a\u0eb5\u0ec0\u0ea3\u0e8d
-namibia=\u0e99\u0eb2\u0ea1\u0eb5\u0ec0\u0e9a\u0e8d
-nepal=\u0ec0\u0e99\u0e9b\u0eb2\u0e99
-niger=\u0ec4\u0e99\u0ec0\u0e81\u0eb5
-nigeria=\u0ec4\u0e99\u0e88\u0eb5\u0ec0\u0ea3\u0e8d
-norway=\u0e99\u0ecd\u0ec0\u0ea7
-pepfar=PEPFAR
-philippines=\u0e9f\u0eb5\u0ea5\u0eb4\u0e9a\u0e9b\u0eb4\u0e99
-senegal=Senegal
-sierra_leone=Sierra Leone
-south_africa_department_of_health=South Africa Department of Health
-swaziland=\u0eaa\u0eb0\u0ea7\u0eb2\u0e8a\u0eb5\u0ec1\u0ea5\u0e99
-uganda=\u0ead\u0eb9\u0e81\u0eb2\u0e99\u0e94\u0eb2
-zambia=Zambia
-forgot_password=\u0ea5\u0eb7\u0ea1\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99
-wrong_username_or_password=\u0e97\u0eb1\u0e87\u0e8a\u0eb7\u0ec8\u0e9c\u0eb9\u0ec9\u0e8a\u0ebb\u0ea1\u0ec3\u0e8a\u0ec9 \u0ec1\u0ea5\u0eb0 \u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99\u0e9a\u0ecd\u0ec8\u0e96\u0eb7\u0e81\u0e95\u0ec9\u0ead\u0e87
-recover_success_message=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e81\u0ea7\u0e94\u0e81\u0eb2\u0ec0\u0e9a\u0eb5\u0ec8\u0e87\u0e9a\u0eb1\u0e99\u0e8a\u0eb5\u0e9c\u0eb9\u0ec9\u0e8a\u0ebb\u0ea1\u0ec3\u0e8a\u0ec9 email \u0e97\u0eb5\u0ec8\u0ec4\u0e94\u0ec9\u0ea5\u0ebb\u0e87\u0e97\u0eb0\u0e9a\u0ebd\u0e99\u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a\u0e8a\u0eb7\u0ec8\u0e99\u0eb5\u0ec9. \u0e9e\u0ea7\u0e81\u0ec0\u0eae\u0ebb\u0eb2\u0ec4\u0e94\u0ec9\u0eaa\u0ebb\u0ec8\u0e87\u0e82\u0ecd\u0ec9\u0ec1\u0e99\u0eb0\u0e99\u0ecd\u0eb2\u0e81\u0ec8\u0ebd\u0ea7\u0e81\u0eb1\u0e9a\u0ea7\u0eb4\u0e97\u0eb5\u0eae\u0ebd\u0e81\u0e84\u0eb7\u0e99\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99
-recover_error_message=\u0e82\u0ecd\u0ec2\u0e97\u0e94\u0e9e\u0ea7\u0e81\u0ec0\u0eae\u0ebb\u0eb2\u0e9a\u0ecd\u0ec8\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0eae\u0ebd\u0e81\u0e84\u0eb7\u0e99\u0e9a\u0eb1\u0e99\u0e8a\u0eb5\u0e82\u0ead\u0e87\u0e97\u0ec8\u0eb2\u0e99\u0ec4\u0e94\u0ec9. \u0e8a\u0eb7\u0ec8\u0e82\u0ead\u0e87\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9\u0ead\u0eb2\u0e94\u0e88\u0eb0\u0e9a\u0ecd\u0ec8\u0e96\u0eb7\u0e81\u0e95\u0ec9\u0ead\u0e87, \u0e9a\u0eb1\u0e99\u0e8a\u0eb5\u0e82\u0ead\u0e87\u0e97\u0ec8\u0eb2\u0e99\u0ead\u0eb2\u0e94\u0e88\u0eb0\u0e9a\u0ecd\u0ec8\u0ead\u0eb2\u0e99\u0eb8\u0e8d\u0eb2\u0e94\u0ec3\u0eab\u0ec9\u0eae\u0ebd\u0e81\u0e84\u0eb7\u0e99 \u0eab\u0ea5\u0eb7 \u0e81\u0eb2\u0e99\u0e95\u0eb7\u0ec8\u0ea1 \u0e97\u0eb5\u0ec8\u0ea2\u0eb9\u0ec8 emai \u0e9a\u0ecd\u0ec8\u0e96\u0eb7\u0e81\u0e95\u0eb2\u0ea1\u0e9a\u0eb1\u0e99\u0e8a\u0eb5\u0e82\u0ead\u0e87\u0e97\u0ec8\u0eb2\u0e99
-offline_notification=\u0e97\u0ec8\u0eb2\u0e99\u0e9a\u0ecd\u0ec8\u0ec4\u0e94\u0ec9\u0ec0\u0e8a\u0eb7\u0ec8\u0ead\u0ea1\u0e95\u0ecd\u0ec8\u0ead\u0eb4\u0e99\u0ec0\u0e95\u0eb5\u0ec1\u0e99\u0e94 \u0eaa\u0eb0\u0e99\u0eb1\u0ec9\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec1\u0ea1\u0ec8\u0e99\u0ec4\u0e94\u0ec9\u0eae\u0eb1\u0e81\u0eaa\u0eb2\u0ec3\u0ea7\u0ec9\u0ea2\u0eb9\u0ec8\u0e84\u0ead\u0ea1\u0e9e\u0eb5\u0ea7\u0ec0\u0e95\u0eb5\u0edc\u0ec8\u0ea7\u0e99\u0e99\u0eb5\u0ec9
-format.OnChange.endDate=\u0e9b\u0eb5-\u0ec0\u0e94\u0eb7\u0ead\u0e99-\u0ea1\u0eb7\u0ec9
-translation_translate=\u0ec1\u0e9b
-light_blue=\u0eaa\u0eb5\u0e9f\u0ec9\u0eb2\u0ead\u0ec8\u0ead\u0e99
-yes=\u0ec1\u0ea1\u0ec8\u0e99
-dhis-web-maintenance-mobile=\u0e81\u0eb2\u0e99\u0e81\u0ecd\u0eb2\u0e99\u0ebb\u0e94\u0e84\u0ec8\u0eb2\u0ec0\u0e84\u0eb7\u0ec8\u0ead\u0e99\u0e97\u0eb5\u0ec8
-true=Yes
-district_health_information_software=\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e82\u0ec8\u0eb2\u0ea7\u0eaa\u0eb2\u0e99\u0eaa\u0eb2\u0e97\u0eb2\u0ea5\u0eb0\u0e99\u0eb0\u0eaa\u0eb8\u0e81\u0ec0\u0ea1\u0eb7\u0ead\u0e87 2
-rename=\u0e9b\u0ec8\u0ebd\u0e99\u0e8a\u0eb7\u0ec8
-format.Weekly.endDate=
-enable_message_sms_notifications=\u0e82\u0ecd\u0ec9\u0e84\u0ea7\u0eb2\u0ea1 \u0ec1\u0ea1\u0ec8\u0e99\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0eaa\u0ebb\u0ec8\u0e87\u0e9c\u0ec8\u0eb2\u0e99 SMS \u0ec4\u0e94\u0ec9
-please_letters_numbers_spaces_or_some_special_chars_only=Only letters, numbers, spaces and the characters 
-.,-,(,)=\u0ec1\u0ea1\u0ec8\u0e99\u0ead\u0eb2\u0e99\u0eb8\u0e8d\u0eb2\u0e94\u0ec3\u0eab\u0ec9
-error=\u0e9c\u0eb4\u0e94\u0e9e\u0eb2\u0e94
-locate_by_code=\u0ec3\u0eaa\u0ec8\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0ec2\u0e84\u0e94\u0ec3\u0ea7\u0ec9
-annualized=\u0ec0\u0e9b\u0eb1\u0e99\u0ec1\u0e95\u0ec8\u0ea5\u0eb0\u0e9b\u0eb5
-kenya=\u0ec0\u0e84\u0e99\u0ea2\u0eb2
-timor_leste=\u0e95\u0eb5\u0ea1\u0ecd\u0ec0\u0ea5\u0eb1\u0e94\u0eaa\u0eb0\u0ec0\u0e95
-move=\u0e8d\u0ec9\u0eb2\u0e8d
-format.Quarterly.endDate=MMM yyyy
-user_general_settings=\u0e81\u0eb2\u0e99\u0e95\u0eb1\u0ec9\u0e87\u0e84\u0ec8\u0eb2\u0ec2\u0e94\u0e8d\u0e97\u0ebb\u0ec8\u0ea7\u0ec4\u0e9b\u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a\u0e9c\u0eb9\u0ec9\u0e8a\u0ebb\u0ea1\u0ec3\u0e8a\u0ec9
-period_type=\u0e9b\u0eb0\u0ec0\u0e9e\u0e94\u0e82\u0ead\u0e87\u0ec4\u0ea5\u0e8d\u0eb0\u0ec0\u0ea7\u0ea5\u0eb2
-less_than=\u0edc\u0ec9\u0ead\u0e8d\u0e81\u0ea7\u0ec8\u0eb2
-an_exception_occured=\u0ec0\u0e81\u0eb5\u0e94\u0e82\u0eb7\u0ec9\u0e99\u0ec2\u0e94\u0e8d\u0e9a\u0eb1\u0e87\u0ec0\u0ead\u0eb5\u0e99
-caused_by=\u0e94\u0ec9\u0ea7\u0e8d\u0ec0\u0eab\u0e94
-about=\u0e81\u0ec8\u0ebd\u0ea7\u0e81\u0eb1\u0e9a
-access_denied=\u0e81\u0eb2\u0e99\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0eaa\u0eb9\u0ec8\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0e96\u0eb7\u0e81\u0e9b\u0eb0\u0e95\u0eb4\u0ec0\u0eaa\u0e94
-read_access_denied_message=\u0e97\u0ec8\u0eb2\u0e99\u0e9a\u0ecd\u0ec8\u0ea1\u0eb5\u0eaa\u0eb4\u0e94\u0e97\u0eb5\u0ec8\u0e88\u0eb0\u0ead\u0ec8\u0eb2\u0e99\u0eab\u0ebb\u0ea7\u0e82\u0ecd\u0ec9\u0e99\u0eb5\u0ec9
-maintenance=\u0e81\u0eb2\u0e99\u0e9a\u0ebb\u0ea7\u0ea5\u0eb0\u0e9a\u0eb1\u0e94\u0eae\u0eb1\u0e81\u0eaa\u0eb2
-specify_organisationunit=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e81\u0ecd\u0eb2\u0e99\u0ebb\u0e94\u0eab\u0ebb\u0ea7\u0edc\u0ec8\u0ea7\u0e8d\u0e81\u0eb2\u0e99\u0e88\u0eb1\u0e94\u0e95\u0eb1\u0ec9\u0e87\u0e9b\u0eb0\u0e95\u0eb4\u0e9a\u0eb1\u0e94
-cannot_clear_selected_orgunits=\u0e9a\u0ecd\u0ec8\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ea5\u0eb7\u0e9a\u0eab\u0ebb\u0ea7\u0edc\u0ec8\u0ea7\u0e8d\u0e81\u0eb2\u0e99\u0e88\u0eb1\u0e94\u0e95\u0eb1\u0ec9\u0e87
-dhis-web-dataentry=\u0e81\u0eb2\u0e99\u0e9b\u0ec9\u0ead\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-dhis-web-reporting=\u0ea5\u0eb2\u0e8d\u200b\u0e87\u0eb2\u0e99\u200b
-dhis-web-visualizer=\u0e81\u0eb2\u0e99\u0eaa\u0ec9\u0eb2\u0e87\u0eae\u0eb9\u0e9a\u0e9e\u0eb2\u0e9a\u0e88\u0eb2\u0e81\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-dhis-web-pivot=\u0e95\u0eb2\u0e95\u0eb0\u0ea5\u0eb2\u0e87\u0eaa\u0eb0\u0ec1\u0e94\u0e87\u0e9c\u0ebb\u0e99
-dhis-web-reports=\u0e9a\u0ebb\u0e94\u0ea5\u0eb2\u0e8d\u0e87\u0eb2\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-intro_dhis-web-maintenance-datadictionary=\u0eae\u0eb1\u0e81\u0eaa\u0eb2\u0ead\u0ebb\u0e87\u0e9b\u0eb0\u0e81\u0ead\u0e9a\u0e82\u0ead\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99, \u0e94\u0eb1\u0e94\u0eaa\u0eb0\u0e99\u0eb5\u0edd\u0eb2\u0e8d, \u0ea7\u0eb1\u0e94\u0e88\u0eb0\u0e99\u0eb2\u0e99\u0eb8\u0e81\u0ebb\u0ea1\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99, \u0e9b\u0eb0\u0ec0\u0e9e\u0e94 \u0ec1\u0ea5\u0eb0 \u0e81\u0eb8\u0ec8\u0ea1
-intro_dhis-web-maintenance-dataadmin=\u0e95\u0eb2\u0e95\u0eb0\u0ea5\u0eb2\u0e87\u0eab\u0ea5\u0eb1\u0e81\u0e82\u0ead\u0e87\u0ec1\u0eab\u0ea5\u0ec8\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99, \u0e81\u0ea7\u0e94\u0e81\u0eb2\u0e84\u0ea7\u0eb2\u0ea1\u0edc\u0ec9\u0eb2\u0ec0\u0e8a\u0eb7\u0ec8\u0ead\u0e96\u0eb7\u0e82\u0ead\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99, \u0ec0\u0e9a\u0eb5\u0ec8\u0e87 \u0eaa\u0eb0\u0e96\u0eb4\u0e95\u0eb4 \u0ec1\u0ea5\u0eb0 \u0ead\u0eb7\u0ec8\u0e99\u0ec6\u0ead\u0eb5\u0e81
-intro_dhis-web-maintenance-mobile=\u0eae\u0eb1\u0e81\u0eaa\u0eb2\u0e8a\u0eb8\u0e94\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99 \u0ea5\u0ea7\u0ea1\u0e97\u0eb1\u0e87\u0e81\u0eb2\u0e99\u0e95\u0eb1\u0ec9\u0e87\u0e84\u0ec8\u0eb2 \u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a\u0e81\u0eb2\u0e99\u0ea5\u0eb2\u0e8d\u0e87\u0eb2\u0e99\u0ec1\u0e9a\u0e9a\u0ec0\u0e84\u0eb7\u0ec8\u0ead\u0e99\u0e97\u0eb5\u0ec8 \u0ec1\u0ea5\u0eb0 \u0ec1\u0e9a\u0e9a SMS 
-intro_dhis-web-importexport=\u0e81\u0eb2\u0e99\u0ec2\u0ead\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec0\u0e82\u0ebb\u0ec9\u0eb2 \u0ec1\u0ea5\u0eb0 \u0ead\u0ead\u0e81\u0e88\u0eb2\u0e81 DHIS \u0eab\u0ea5\u0eb7 \u0e9e\u0eb2\u0e81\u0eaa\u0ec8\u0ea7\u0e99\u0ead\u0eb7\u0ec8\u0e99 \u0ead\u0eb5\u0e87\u0e95\u0eb2\u0ea1\u0eae\u0eb9\u0e9a\u0ec1\u0e9a\u0e9a\u0e95\u0ec8\u0eb2\u0e87\u0ec6
-intro_dhis-web-visualizer=\u0eaa\u0ec9\u0eb2\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec3\u0eab\u0ec9\u0ec0\u0e9b\u0eb1\u0e99\u0eae\u0eb9\u0e9a\u0e9e\u0eb2\u0e8d \u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a\u0ead\u0ebb\u0e87\u0e9b\u0eb0\u0e81\u0ead\u0e9a\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99 \u0ec1\u0ea5\u0eb0 \u0e94\u0eb1\u0e94\u0eaa\u0eb0\u0e99\u0eb5\u0edd\u0eb2\u0e8d
-intro_dhis-web-spreadsheet-reporting=\u0eaa\u0ec9\u0eb2\u0e87 \u0ec1\u0ea5\u0eb0 \u0e99\u0ecd\u0eb2\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0e96\u0eb2\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e9a\u0ebb\u0e99\u0e9e\u0eb7\u0ec9\u0e99\u0e96\u0eb2\u0e99\u0e81\u0eb2\u0e99\u0e81\u0ecd\u0eb2\u0e99\u0ebb\u0e94\u0e81\u0ec8\u0ead\u0e99 \u0e95\u0eb2\u0e95\u0eb0\u0ea5\u0eb2\u0e87 Excel
-intro_supportive_software=\u0e97\u0ec8\u0eb2\u0e99\u0e88\u0eb0\u0ec0\u0eab\u0eb1\u0e99\u0e9e\u0eb2\u0e9a\u0ea5\u0ea7\u0ea1\u0e81\u0ec8\u0ebd\u0ea7\u0e81\u0eb1\u0e9a\u0e9c\u0ebb\u0e99\u0e9b\u0eb0\u0ec2\u0eab\u0e8d\u0e94\u0e82\u0ead\u0e87 software \u0e99\u0eb5\u0ec9 \u0ec0\u0e8a\u0eb1\u0ec8\u0e99\u0e97\u0ec8\u0eb2\u0e99\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ead\u0ead\u0e81\u0ec1\u0e9a\u0e9a\u0e9a\u0ebb\u0e94\u0ea5\u0eb2\u0e8d\u0e87\u0eb2\u0e99\u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a\u0e9b\u0eb0\u0e8a\u0eb2\u0e81\u0ead\u0e99\u0ec0\u0e84\u0eb7\u0ec8\u0ead\u0e99\u0e97\u0eb5\u0ec8
-intro_system_overview=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e81\u0eb1\u0e9a\u0ec4\u0e9b\u0ec0\u0e9a\u0eb5\u0ec8\u0e87\u0edc\u0ec9\u0eb2\u0e9e\u0eb2\u0e9a\u0ea5\u0ea7\u0ea1\u0e82\u0ead\u0e87\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0e88\u0eb0 \u0eaa\u0eb2\u0ea1\u0eb2\u0e94 \u0eaa\u0ecd\u0eb2\u0ec0\u0ea5\u0eb1\u0e94\u0e97\u0eb8\u0e81 \u0ec2\u0ea1\u0e94\u0eb9\u0e99
-intro_settings=\u0e95\u0eb1\u0ec9\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0eaa\u0ec8\u0ea7\u0e99\u0e95\u0ebb\u0ea7 \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0eaa\u0eb0\u0e94\u0ea7\u0e81\u0ec3\u0e99\u0e81\u0eb2\u0e99\u0eaa\u0ebb\u0e99\u0e97\u0eb0\u0e99\u0eb2 \u0ec1\u0ea5\u0eb0\u0e9b\u0ec8\u0ebd\u0e99, \u0eae\u0eb9\u0e9a\u0ec1\u0e9a\u0e9a \u0ec1\u0ea5\u0eb0 \u0e81\u0eb2\u0e99\u0e95\u0eb1\u0ec9\u0e87\u0e84\u0ec8\u0eb2 \u0ead\u0eb5\u0ec1\u0ea1\u0ea7\u0e95\u0ec8\u0eb2\u0e87\u0ec6
-intro_log_out=\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0e9a\u0ec8\u0ead\u0e99\u0e99\u0eb5\u0ec9 \u0ec0\u0e9e\u0eb7\u0ec8\u0ead\u0ead\u0ead\u0e81\u0e88\u0eb2\u0e81 \u0ea5\u0eb0\u0e9a\u0ebb\u0e9a \u0ec1\u0ea5\u0eb0 \u0ea2\u0eb8\u0e94\u0e81\u0eb2\u0e99\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0eaa\u0eb9\u0ec8\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0e9a\u0eb1\u0e99\u0e8a\u0eb5\u0e82\u0ead\u0e87\u0e9c\u0eb9\u0ec9\u0ec0\u0e8a\u0ebb\u0ec9\u0eb2\u0ec3\u0e8a\u0ec9
-previous=\u0e81\u0ec8\u0ead\u0e99\u0edc\u0ec9\u0eb2\u0e99\u0eb5\u0ec9
-need_to_sync_notification=\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec4\u0e94\u0ec9\u0e9a\u0eb1\u0e99\u0e97\u0eb6\u0e81\u0ec4\u0ea7\u0ec9\u0ea2\u0eb9\u0ec8\u0ec3\u0e99\u0e84\u0ead\u0ea1\u0e9e\u0eb5\u0ea7\u0ec0\u0e95\u0eb5, \u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2 \u0ead\u0eb1\u0e9a\u0ec2\u0ea5\u0e94\u0ea1\u0eb2\u0ec3\u0eaa\u0ec8 server
-show_details=\u0ec0\u0e9a\u0eb5\u0ec8\u0e87\u0ea5\u0eb2\u0e8d\u0ea5\u0eb0\u0ead\u0ebd\u0e94
-date_selector=\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ea7\u0eb1\u0e99\u0e97\u0eb5\u0ec8
-hide_menu=\u0ec0\u0e8a\u0eb7\u0ec8\u0ead\u0e87 \u0ec0\u0ea1\u0e99\u0e8d\u0eb9
-entry=\u0e9b\u0ec9\u0ead\u0e99\u0ec0\u0e82\u0ebb\u0ec9\u0eb2
-comment=\u0e84\u0eb3\u0ec0\u0eab\u0eb1\u0e99
-save=\u0e9a\u0eb1\u0e99\u0e97\u0eb6\u0e81
-new=\u0eaa\u0ec9\u0eb2\u0e87\u0ec3\u0eab\u0ea1\u0ec8
-back=\u0e81\u0eb1\u0e9a\u0e84\u0eb7\u0e99
-cancel=Cancel
-add=Add
-password=\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99
-create=Create
-restore=\u0e81\u0eb9\u0ec9\u0e84\u0eb7\u0e99
-optional=\u0e97\u0eb2\u0e87\u0ec0\u0ea5\u0eb7\u0ead\u0e81
-Daily=\u0e97\u0eb8\u0e81\u0ec6\u0ea1\u0eb7\u0ec9
-SixMonthly=\u0ec1\u0e95\u0ec8\u0ea5\u0eb0 6 \u0ec0\u0e94\u0eb7\u0ead\u0e99
-format.Daily.startDate=\u0e9b\u0eb5-\u0ec0\u0e94\u0eb7\u0ead\u0e99-\u0ea1\u0eb7\u0ec9
-format.Yearly.startDate=\u0e9b\u0eb5
-format.Relative.endDate=yyyy-MM-dd
-format.FinancialApril.endDate=\u0ea1\u0eb7\u0ec9-\u0ec0\u0e94\u0eb7\u0ead\u0e99-\u0e9b\u0eb5
-format.FinancialOct.endDate=yyyy
-month.june=\u0ea1\u0eb5\u0e96\u0eb8\u0e99\u0eb2
-month.october=\u0ec0\u0e94\u0eb7\u0ead\u0e99\u0e95\u0eb8\u0ea5\u0eb2
-month.short.february=\u0e81\u0eb8\u0ea1\u0e9e\u0eb2
-month.short.april=\u0ec0\u0ea1\u0eaa\u0eb2
-month.short.july=\u0e81\u0ecd\u0ea5\u0eb0\u0e81\u0ebb\u0e94
-month.short.september=Sep
-month.short.october=Oct
-weekday.monday=\u0ea7\u0eb1\u0e99\u0e88\u0eb1\u0e99
-weekday.thursday=\u0ea7\u0eb1\u0e99\u0e9e\u0eb0\u0eab\u0eb1\u0e94
-weekday.sunday=\u0ea7\u0eb1\u0e99\u0ead\u0eb2\u0e97\u0eb4\u0e94
-weekday.short.wednesday=\u0ea7\u0eb1\u0e99\u0e9e\u0eb8\u0e94
-translation_details=\u0ea5\u0eb2\u0e8d\u0ea5\u0eb0\u0ead\u0ebd\u0e94
-translation_save=~\u0e9a\u0eb1\u0e99\u0e97\u0eb6\u0e81
-translation_label_region=\u0e9e\u0eb2\u0e81
-translation_locale_added=\u0e95\u0eb7\u0ec8\u0ea1\u0e97\u0eb5\u0ec8\u0e95\u0eb1\u0ec9\u0e87
-translation_reference=\u0e81\u0eb2\u0e99\u0ead\u0ec9\u0eb2\u0e87\u0ead\u0eb4\u0e87
-translation_duplicated_shortname_with=\u0e82\u0ecd\u0ead\u0eb2\u0ec4\u0e9e\u0e8a\u0eb7\u0ec8\u0eaa\u0eb1\u0ec9\u0e99\u0e82\u0ead\u0e87\u0e97\u0ec8\u0eb2\u0e99\u0e8a\u0ecd\u0ec9\u0eb2\u0e8a\u0ec9\u0ead\u0e99\u0e81\u0eb1\u0e9a
-user_agent=\u0ead\u0ebb\u0e87\u0e81\u0ead\u0e99\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9
-database_type=\u0e9b\u0eb0\u0ec0\u0e9e\u0e94\u0e82\u0ead\u0e87\u0e96\u0eb2\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-database_name=\u0e8a\u0eb7\u0ec8\u0e96\u0eb2\u0e99\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-dhis2_online=\u0ec0\u0e8a\u0eb7\u0ec8\u0ead\u0ea1\u0e95\u0ecd\u0ec8\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a DHIS 2
-error_message_stack_trace=\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e9a\u0ecd\u0ec8\u0e96\u0eb7\u0e81
-help=\u0e8a\u0ec8\u0ea7\u0e8d
-status=\u0eaa\u0eb0\u0e96\u0eb2\u0e99\u0eb0\u0e9e\u0eb2\u0e9a
-java_opts=\u0e96\u0eb2\u0e99 Java \u0e8a\u0ebb\u0ec8\u0eaa\u0e84\u0eb2\u0ea7
-java_tmp_dir=\u0e96\u0eb2\u0e99 Java \u0e8a\u0ebb\u0ec8\u0ea7\u0e84\u0eb2\u0ea7
-my_datamart=MyDatamart
-mobile_client=Mobile client
-mobile_client_description=Client for data capture on mobile devices
-system_overview=\u0e9e\u0eb2\u0e9a\u0ea5\u0ea7\u0ea1\u0e82\u0ead\u0e87\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a
-server_date=\u0ea7\u0eb1\u0e99\u0e97\u0eb5\u0e95\u0ebb\u0ea7\u0e9a\u0ecd\u0ea5\u0eb4\u0e81\u0eb2\u0e99
-profile_details=\u0ea5\u0eb2\u0e8d\u0ea5\u0eb0\u0ead\u0ebd\u0e94\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-nationality=Nationality
-update_user_profile_success=\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec4\u0e94\u0ec9\u0e9b\u0eb1\u0e9a\u0e9b\u0eb8\u0e87\u0ec1\u0ea5\u0ec9\u0ea7
-property_to_display_in_analysis_modules=\u0eaa\u0eb7\u0ec8\u0e87\u0e97\u0eb5\u0ec8\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0e99\u0ecd\u0eb2\u0eaa\u0eb0\u0ec0\u0edc\u0eb5 \u0ec3\u0e99\u0ec2\u0ea1\u0e94\u0eb9\u0e99\u0e82\u0ead\u0e87\u0e81\u0eb2\u0e99\u0ea7\u0eb4\u0ec4\u0e88
-enable_message_email_notifications=Enable message email notifications
-intro_user_message_settings=Customize the system with user specific settings for message email and sms notification.
-dashboard=\u0e95\u0eb2\u0edc\u0ec8\u0eb2\u0e87\u0eaa\u0eb1\u0e87\u0ea5\u0ea7\u0ea1\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e82\u0ec8\u0eb2\u0ea7\u0eaa\u0eb2\u0e99
-interpretations=\u0e81\u0eb2\u0e99\u0ec1\u0e9b
-cpu_cores=CPU cores
-yes_only=\u0ea1\u0eb5\u0ec1\u0e95\u0ec8\u0e96\u0eb7\u0e81\u0e95\u0ec9\u0ead\u0e87
-user_name=~\u0e8a\u0eb7\u0ec8\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9
-old_password=\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99~\u0ec0\u0e81\u0ebb\u0ec8\u0eb2
-new_password=\u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99\u0ec3\u0edd\u0ec8
-surname=\u0e99\u0eb2\u0ea1\u0eaa\u0eb0\u0e81\u0eb8\u0e99
-first_name=\u0e8a\u0eb7\u0ec8\u0ec1\u0e97\u0ec9
-username=\u0e8a\u0eb7\u0ec8\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9\u0e87\u0eb2\u0e99
-phone_number=\u0ec0\u0e9a\u0eb5\u0ec2\u0e97\u0ec2\u0ea1\u0e9a\u0eb2\u0e8d
-help_intro_text=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec0\u0ead\u0ebb\u0eb2\u0ea5\u0eb2\u0e8d\u0e81\u0eb2\u0e99\u0e95\u0ec8\u0eb2\u0e87\u0ec6\u0e88\u0eb2\u0e81 menu \u0ec4\u0e9b\u0e97\u0eb2\u0e87\u0e8a\u0ec9\u0eb2\u0e8d
-contact_person=\u0e9c\u0eb9\u0ec9\u0e9b\u0eb0\u0eaa\u0eb2\u0e99\u0e87\u0eb2\u0e99
-this_field_is_required=\u0ea2\u0eb9\u0ec8\u0e9a\u0ec8\u0ead\u0e99\u0e99\u0eb5\u0ec9\u0e95\u0ec9\u0ead\u0e87\u0ec4\u0e94\u0ec9\u0e95\u0eb7\u0ec8\u0ea1\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0ec3\u0eaa\u0ec8
-please_enter_a_valid_email_address=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2 \u0e95\u0eb7\u0ec8\u0ea1 \u0ec1\u0ea5\u0eb0 \u0ea2\u0eb1\u0ec9\u0e87\u0ea2\u0eb7\u0e99\u0e97\u0eb5\u0ec8\u0ea2\u0eb9\u0ec8 \u0ead\u0eb5\u0ec1\u0ea1\u0ea7 \u0e82\u0ead\u0e87\u0e97\u0ec8\u0eb2\u0e99
-please_enter_a_valid_date=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ec3\u0eaa\u0ec8 \u0ec1\u0ea5\u0eb0 \u0ea2\u0eb1\u0ec9\u0e87\u0ea2\u0eb7\u0e99\u0ea7\u0eb1\u0e99\u0e97\u0eb5
-digits_decimal_only_please=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ec1\u0e95\u0ec8\u0e95\u0ebb\u0ea7\u0ec0\u0ea5\u0e81. 3 \u0e95\u0ebb\u0ea7\u0ec0\u0ea5\u0e81 \u0e81\u0ead\u0ec8\u0e99\u0ec0\u0e84\u0eb7\u0ec8\u0ead\u0e87\u0edd\u0eb2\u0e8d\u0e88\u0ecd\u0ec9\u0eb2\u0e88\u0eb8\u0e94 \u0ec1\u0ea5\u0eb0 2 \u0e95\u0ebb\u0ea7\u0ec0\u0ea5\u0e81 \u0eab\u0ea5\u0eb1\u0e87\u0e88\u0ecd\u0ec9\u0eb2\u0e88\u0eb8\u0e94 \u0ec1\u0ea1\u0ec8\u0e99\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec0\u0eae\u0eb1\u0e94\u0ec4\u0e94\u0ec9
-please_enter_betwwen_a_and_b_words=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ec3\u0eaa\u0ec8 \u0ea5\u0eb0\u0eab\u0ea7\u0ec8\u0eb2\u0e87\u0e84\u0ecd\u0eb2 {0} \u0ec1\u0ea5\u0eb0  {1}
-letters_only_please=\u0ea1\u0eb5\u0ec1\u0e95\u0ec8\u0e95\u0ebb\u0ea7\u0edc\u0eb1\u0e87\u0eaa\u0eb7\u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0e99\u0eb1\u0ec9\u0e99
-please_enter_valid_phone_number=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e82\u0ebd\u0e99\u0ec2\u0e9a\u0ec2\u0e97\u0ea5\u0eb0\u0eaa\u0eb1\u0e9a\u0e97\u0eb5\u0ec8\u0eaa\u0eb2\u0ea1\u0e94\u0ec3\u0e8a\u0ec9\u0ec4\u0e94\u0ec9
-please_fill_out_at_least_one_of_these_fields=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ec3\u0eaa\u0ec8 \u0ea2\u0ec8\u0eb2\u0e87\u0e95\u0ecd\u0ec8\u0eb2 \u0e99\u0eb7\u0ec8\u0e87\u0ec3\u0e99\u0e9a\u0eb1\u0e99\u0e94\u0eb2 \u0e82\u0eb0\u0ec1\u0edc\u0e87\u0ea7\u0eb4\u0e8a\u0eb2\u0e95\u0ec8\u0eb2\u0e87\u0ec6
-please_select_at_least_one_option_for_these_fields=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ea2\u0ec8\u0eb2\u0e87\u0e95\u0ecd\u0ec8\u0eb2 \u0e99\u0eb7\u0ec8\u0e87\u0e97\u0eb2\u0e87\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a\u0e9a\u0eb1\u0e99\u0e94\u0eb2\u0e82\u0eb0\u0ec1\u0edc\u0e87\u0ea7\u0eb4\u0e8a\u0eb2\u0e95\u0ec8\u0eb2\u0e87\u0ec6
-please_unicode_chars_only=\u0ead\u0eb2\u0e99\u0eb8\u0e9a\u0eb2\u0e94\u0ec3\u0eab\u0ec9\u0ec3\u0eaa\u0ec8\u0ec4\u0e94\u0ec9\u0ec1\u0e95\u0ec8 \u0e95\u0ebb\u0ea7\u0edc\u0eb1\u0e87\u0eaa\u0eb7\u0e97\u0eb5\u0ec8\u0ea1\u0eb5 \u0ea2\u0eb9\u0e99\u0eb5 \u0ec2\u0e84\u0e94
-please_enter_valid_number=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0e95\u0ebb\u0ea7\u0ec0\u0ea5\u0e81\u0e97\u0eb5\u0ec8\u0e96\u0eb7\u0e81\u0e95\u0ec9\u0ead\u0e87\u0ec3\u0eaa\u0ec8
-please_enter_valid_positive_integer=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0e95\u0ebb\u0ea7\u0ec0\u0ea5\u0e81\u0e97\u0eb5\u0ec8\u0ec0\u0e9b\u0eb1\u0e99\u0e9c\u0ebb\u0e99\u0ea5\u0ebb\u0e9a
-please_enter_name=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0e8a\u0eb7\u0ec8\u0ec3\u0eaa\u0ec8
-please_select_indicator=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0e95\u0ebb\u0ea7\u0e8a\u0eb5\u0ec9\u0ea7\u0eb1\u0e94
-success=\u0eaa\u0eb3\u0ec0\u0ea5\u0eb1\u0e94
-select_all=\u0ec0\u0ea5\u0eb7\u0ead\u200b\u0e81\u0e97\u0eb1\u0e87\u0edd\u0ebb\u0e94
-unselect_in_group=\u0e9a\u0ecd\u0ec8\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ec0\u0e9b\u0eb1\u0e99\u0e81\u0eb8\u0ec8\u0ea1
-remove_all=\u0ea5\u0eb7\u0e9a\u0e96\u0eb5\u0ec9\u0ea1\u0edd\u0ebb\u0e94
-move_to_top=Move to top
-jump_to_page=Jump to page
-filter_by_name=Filter by name
-get_pdf=Get PDF
-no_item_to_export=There is no item to export
-short_name=Short name
-alternative_name=\u0e97\u0eb2\u0e87\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a\u0e8a\u0eb7\u0ec8\u0ead\u0eb7\u0ec8\u0e99\u0ec6
-value_type=\u0e9b\u0eb0\u0ec0\u0e9e\u0e94\u0e82\u0ead\u0e87\u0ea1\u0eb9\u0e99\u0e84\u0ec8\u0eb2
-data_dictionary=\u0ea7\u0eb1\u0e94\u0e88\u0eb0\u0e99\u0eb2\u0e99\u0eb8\u0e81\u0ebb\u0ea1\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-indicators=\u0e94\u0eb1\u0e94\u0eaa\u0eb0\u0e99\u0eb5\u0edd\u0eb2\u0e8d
-data_element_groups=\u0ead\u0ebb\u0e87\u0e9b\u0eb0\u0e81\u0ead\u0e9a\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0e97\u0eb5\u0ec8\u0ec0\u0e9b\u0eb1\u0e99\u0e81\u0eb8\u0ec8\u0ea1
-organisation_unit_hierarchy=\u0e82\u0eb1\u0ec9\u0e99\u0e95\u0ec8\u0eb2\u0e87\u0ec6\u0e82\u0ead\u0e87\u0eab\u0ebb\u0ea7\u0edc\u0ec8\u0ea7\u0e8d\u0e81\u0eb2\u0e99\u0e88\u0eb1\u0e94\u0e95\u0eb1\u0ec9\u0e87
-expression=\u0e81\u0eb2\u0e99\u0eaa\u0eb0\u0ec1\u0e94\u0e87\u0ead\u0ead\u0e81
-right_expression=\u0e81\u0eb2\u0e99\u0eaa\u0eb0\u0ec1\u0e94\u0e87\u0ead\u0ead\u0e81\u0e97\u0eb5\u0ec8\u0e96\u0eb7\u0e81\u0e95\u0ec9\u0ead\u0e87
-numerator=\u0e95\u0ebb\u0ea7\u0e95\u0eb1\u0ec9\u0e87
-denominator=\u0e95\u0ebb\u0ea7\u0eab\u0eb2\u0e99
-denominator_formula=\u0eaa\u0eb9\u0e94\u0e82\u0ead\u0e87\u0e95\u0ebb\u0ea7\u0eab\u0eb2\u0e99
-denominator_aggregation_operator=\u0e81\u0eb2\u0e99\u0e9b\u0eb0\u0e95\u0eb4\u0e9a\u0eb1\u0e94\u0e81\u0eb2\u0e99\u0eaa\u0eb1\u0e87\u0ea5\u0ea7\u0ea1\u0e95\u0ebb\u0ea7\u0eab\u0eb2\u0e99
-category_option_combo_does_not_exist=\u0e97\u0eb2\u0e87\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0eaa\u0ec8\u0ea7\u0e99\u0e9b\u0eb0\u0e81\u0ead\u0e9a\u0e9a\u0ecd\u0ec8\u0ea1\u0eb5\u0ec4\u0e99\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a
-left_side_description=\u0e81\u0eb2\u0e99\u0e9e\u0eb1\u0e99\u0ea5\u0eb0\u0e99\u0eb2\u0e97\u0eb2\u0e87\u0e8a\u0ec9\u0eb2\u0e8d\u0ea1\u0eb7
-right_side_of_expression=Right side of Expression
-operator=Operator
-greater_than_symbol=>
-greater_than_or_equal_to_symbol=>=
-less_than_symbol=<
-less_than_or_equal_to=<=
-constant=Constant
-multiple_choice=Multiple Choice
-user_group_access=\u0e81\u0eb2\u0e99\u0ec0\u0e82\u0ebb\u0ec9\u0eb2\u0ec0\u0e96\u0eb4\u0e87\u0e81\u0eb8\u0ec8\u0ea1\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9
-group_name=\u0e8a\u0eb7\u0ec8\u0e81\u0eb8\u0ec8\u0ea1
-sharing_settings=\u0e95\u0eb4\u0e94\u0e95\u0eb1\u0ec9\u0e87\u0e81\u0eb2\u0e99\u0e81\u0eb0\u0e88\u0eb2\u0e8d\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99
-read_write=\u0ead\u0ec8\u0eb2\u0e99 \u0ec1\u0ea5\u0eb0 \u0e82\u0ebd\u0e99
-can_edit_and_view=\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0e94\u0eb1\u0e94\u0ec1\u0e81\u0ec9\u0ec4\u0e94\u0ec9 \u0ec1\u0ea5\u0eb0 \u0ec0\u0e9a\u0eb5\u0ec8\u0e87
-can_view=\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ec0\u0e9a\u0eb5\u0ec8\u0e87\u0ec4\u0e94\u0ec9
-object_will_created_private=This object will be private to yourself
-algeria=Algeria
-armenia=Armenia
-bangladesh=Bangladesh
-bhutan=Bhutan
-burkina_faso_coat_of_arms=Burkina Faso Coat of Arms
-china=China
-congo_kinshasa=Democratic Republic of the Congo
-ethiopia=Ethiopia
-gambia=Gambia
-indonesia=Indonesia
-ivory_coast=Ivory Coast
-laos=Lao People's Democratic Republic
-mozambique=Mozambique
-nicaragua=Nicaragua
-psi=PSI
-republic_of_trinidad_and_tobago=Republic of Trinidad & Tobago
-sierra_leone_coat_of_arms=Sierra Leone Coat of Arms
-solomon_islands=Solomon Islands
-south_africa=South Africa
-tajikistan=Tajikistan
-togo=Togo
-who=WHO
-zimbabwe=Zimbabwe
-login=Login
-new_user_account_last_name=Last
-uploading_data_notification=Uploading locally stored data to the server
-details=\u0ea5\u0eb2\u0e8d\u0ea5\u0eb0\u0ead\u0ebd\u0e94
-month.january=\u0ea1\u0eb1\u0e87\u0e81\u0ead\u0e99
-translation_select_locale=[ Select locale ]
-message_to_the_dhis2_development_team=\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0eaa\u0ecd\u0eb2\u0ea5\u0eb1\u0e9a\u0e97\u0eb4\u0ea1\u0e87\u0eb2\u0e99\u0e97\u0eb5\u0ec8\u0e9e\u0eb1\u0e94\u0e97\u0eb0\u0e99\u0eb2 \u0ea5\u0eb0\u0e9a\u0ebb\u0e9a DHIS 2
-intro=Intro
-education=Education
-general=\u0ec2\u0e94\u0e8d\u0e97\u0ebb\u0ec8\u0ea7\u0ec4\u0e9b
-average=\u0eaa\u0eb0\u0ec0\u0ea5\u0ec8\u0e8d
-please_enter_a_value_greater_than_or_equal_to=Please enter a value greater than or equal to {1}
-unselect_at_level=\u0e8d\u0ebb\u0e81\u0ec0\u0ea5\u0eb5\u0e81\u0e81\u0eb2\u0e99\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0ea5\u0eb0\u0e94\u0eb1\u0e9a\u0e82\u0eb1\u0ec9\u0e99
-tanzania=\u0e95\u0eb2\u0e99\u0e8a\u0eb2\u0ec0\u0e99\u0eb1\u0ebd
-intro_dhis-web-maintenance-user=\u0eae\u0eb1\u0e81\u0eaa\u0eb2\u0e9c\u0eb9\u0ec9\u0e8a\u0ebb\u0ea1\u0ec3\u0e8a\u0ec9 \u0ec3\u0e99\u0ec1\u0e87\u0ec8\u0e82\u0ead\u0e87 \u0e81\u0eb2\u0e99\u0ead\u0eb2\u0e99\u0eb8\u0e8d\u0eb2\u0e94 \u0ec1\u0ea5\u0eb0 \u0ea5\u0eb0\u0eab\u0eb1\u0e94\u0e9c\u0ec8\u0eb2\u0e99, \u0edc\u0ec9\u0eb2\u0e97\u0eb5\u0ec8\u0e82\u0ead\u0e87\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9 \u0ec1\u0ea5\u0eb0 \u0ec0\u0e9b\u0eb1\u0e99\u0e81\u0eb8\u0ec8\u0ea1
-update_user=\u0e9b\u0eb1\u0e9a\u0e9b\u0eb8\u0e87\u0e84\u0eb7\u0e99\u0e9c\u0eb9\u0ec9\u0ec3\u0e8a\u0ec9
-only_digits_are_not_allowed=\u0ea1\u0eb5\u0ec1\u0e95\u0ec8\u0ec2\u0e95\u0ec0\u0ea5\u0e81\u0ec0\u0e97\u0ebb\u0ec8\u0eb2\u0e99\u0eb1\u0ec9\u0e99\u0e97\u0eb5\u0ec8\u0e9a\u0ecd\u0ec8\u0ead\u0eb2\u0e99\u0eb8\u0e8d\u0eb2\u0e94
-select_children=\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0e81\u0eb8\u0ec8\u0ea1\u0ec0\u0e94\u0eb1\u0e81
-format.Weekly.startDate=yyyy 'W' w
-format.Survey.endDate=
-not_set=\u0e9a\u0ecd\u0ec8\u0e97\u0eb1\u0e99\u0ec4\u0e94\u0ec9\u0e95\u0eb1\u0ec9\u0e87
-no=\u0e9a\u0ecd\u0ec8\u0ec1\u0ea1\u0ec8\u0e99
-please_enter_a_valid_number=Please enter a valid number.
-warning=\u0e81\u0eb2\u0e99\u0ec0\u0e95\u0eb7\u0ead\u0e99
-unselect_all=\u0e9a\u0ecd\u0ec8\u0ec0\u0ea5\u0eb7\u0ead\u0e81\u0e97\u0eb1\u0e87\u0edd\u0ebb\u0e94
-closed_date=\u0ea1\u0eb7\u0ec9\u0e9b\u0eb4\u0e94
-vanuatu=Vanuatu
-vietnam=Vietnam
-create_an_account=Create an account
-exception=\u0e8d\u0ebb\u0e81\u0ec0\u0ea7\u0eb1\u0ec9\u0e99
-delete_access_denied_message=\u0e97\u0ec8\u0eb2\u0e99\u0e9a\u0ecd\u0ec8\u0eaa\u0eb2\u0ea1\u0eb2\u0e94\u0ea5\u0eb7\u0e9a\u0eab\u0ebb\u0ea7\u0e82\u0ecd\u0ec9\u0e99\u0eb5\u0ec9
-dhis-web-mobile=Mobile (Smartphone)
-dhis-web-validationrule-local-in=\u0e81\u0eb2\u0e99\u0ea2\u0eb1\u0ec9\u0e87\u0ea2\u0eb7\u0e99\u0e81\u0eb2\u0e99\u0ea7\u0eb4\u0ec4\u0e88
-dhis-web-survey=\u0e81\u0eb2\u0e99\u0eaa\u0ecd\u0eb2\u0eab\u0ea5\u0ea7\u0e94-\u0ec0\u0e9b\u0ebb\u0ec9\u0eb2\u0edd\u0eb2\u0e8d
-intro_dhis-web-maintenance-organisationunit=Maintain organisation units and its hierarchy, groups and group sets.
-intro_dhis-web-mapping=\u0e82\u0ea1\u0eb9\u0e99\u0e97\u0eb5\u0ec8\u0ec0\u0e9b\u0eb1\u0e99\u0eae\u0eb9\u0e9a\u0e9e\u0eb2\u0e9a \u0ec1\u0ea5\u0eb0 \u0ec1\u0e9c\u0e99\u0e97\u0eb5\u0ec8 \u0ec2\u0e94\u0e8d\u0e99\u0ecd\u0eb2\u0ec3\u0e8a\u0ec9 \u0ec0\u0e84\u0eb7\u0ec8\u0ead\u0e87\u0edd\u0eb2\u0e8d \u0e97\u0eb5\u0ec8\u0e88\u0eb1\u0e94\u0ea7\u0eb2\u0e87\u0ec0\u0e9b\u0eb1\u0e99\u0eab\u0ea5\u0eb2\u0e8d\u0e8a\u0eb1\u0ec9\u0e99
-intro_profile=\u0e95\u0eb1\u0ec9\u0e87\u0e82\u0ecd\u0ec9\u0ea1\u0eb9\u0e99\u0eaa\u0ec8\u0ea7\u0e99\u0e95\u0ebb\u0ea7\u0e82\u0ead\u0e87\u0e97\u0ec8\u0eb2\u0e99 \u0ec0\u0e8a\u0eb1\u0e99\u0e95\u0ebb\u0ea7\u0ea2\u0ec8\u0eb2\u0e87 \u0edc\u0ec9\u0eb2\u0e97\u0eb5\u0ec8\u0e95\u0ecd\u0eb2\u0ec1\u0edc\u0ec8\u0e87\u0edd \u0e9a\u0ec8\u0ead\u0e99\u0ec0\u0eae\u0eb1\u0e94\u0ea7\u0ebd\u0e81 \u0ec1\u0ea5\u0eb0 \u0ead\u0eb7\u0ec8\u0e99\u0ec6
-required=\u0e95\u0ec9\u0ead\u0e87\u0e81\u0eb2\u0e99
-update=Update
-delete=Delete
-OnChange=On-change
-Survey=Survey
-format.BiMonthly.startDate=MMM 'to '
-format.Quarterly.startDate=MMM 'to '
-month.short.may=\u0e9e\u0eb6\u0e94\u0eaa\u0eb0\u0e9e\u0eb2
-weekday.tuesday=Tuesday
-translation_label_name=Name
-translation_locale=Locale
-java_version=\u0e95\u0eb2\u0ea1\u0ea5\u0eb0\u0e9a\u0ebb\u0e9a\u0e82\u0ead\u0e87 Java
-report_designer=Report designer
-female=Female
-other=Other
-count=\u0e99\u0eb1\u0e9a
-int=\u0e88\u0eb3\u0e99\u0ea7\u0e99
-yes_no=Yes/No
-bool=Yes/No
-please_enter_a_valid_url=\u0e81\u0eb0\u0ea5\u0eb8\u0e99\u0eb2\u0e95\u0eb7\u0ec8\u0ea1\u0ec3\u0eaa\u0ec8 \u0ec1\u0ea5\u0eb0 \u0ea2\u0eb1\u0ec9\u0e99\u0ea2\u0eb7\u0e99 URL
-please_enter_n_words_or_less=Please enter {0} words or less.
-please_select_period=Please select period!
-move_all=Move all
-rows_in_page=No. of rows per page
-actual=Actual
-percent=Percent
-data_elements=Data elements
-organisation_unit_groups=Organisation unit groups
-users=Users
-expression_not_well_formed=Expression is not well-formed
-equal_to===
-no_constant_to_select=No constants to select
-cambodia=Cambodia
-fhi360=FHI360
-malawi=Malawi
-paraguay=Paraguay
-sri_lanka=Sri Lanka
-powered_by=Powered by

=== modified file 'dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/event-capture.appcache'
--- dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/event-capture.appcache	2014-04-14 06:37:04 +0000
+++ dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/event-capture.appcache	2014-05-12 09:56:39 +0000
@@ -2,9 +2,9 @@
 
 CACHE:
 ../dhis-web-commons/javascripts/jQuery/jquery.min.js
-../dhis-web-commons/javascripts/jQuery/ui/jquery-ui-1.9.1.custom.min.js
+../dhis-web-commons/javascripts/jQuery/ui/jquery-ui.min.js
 ../dhis-web-commons/javascripts/jQuery/jquery.tmpl.js
-../dhis-web-commons/javascripts/jQuery/ui/css/redmond/jquery-ui-1.9.1.custom.css
+../dhis-web-commons/javascripts/jQuery/ui/css/redmond/jquery-ui.css
 
 
 ../dhis-web-commons/fonts/LiberationSans-Regular-webfont.eot

=== modified file 'dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/index.html'
--- dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/index.html	2014-04-20 16:30:35 +0000
+++ dhis-2/dhis-web/dhis-web-event-capture/src/main/webapp/dhis-web-event-capture/index.html	2014-05-12 09:56:39 +0000
@@ -8,9 +8,9 @@
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
         
         <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/jquery.min.js"></script>
-        <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/ui/jquery-ui-1.9.1.custom.min.js"></script>        
+        <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/ui/jquery-ui.min.js"></script>        
         <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/jquery.tmpl.js"></script>      
-        <link rel="stylesheet" type="text/css" href="../dhis-web-commons/javascripts/jQuery/ui/css/redmond/jquery-ui-1.9.1.custom.css">    
+        <link rel="stylesheet" type="text/css" href="../dhis-web-commons/javascripts/jQuery/ui/css/redmond/jquery-ui.css">    
         
         <script type="text/javascript" src="../dhis-web-commons/bootstrap/js/bootstrap.min.js"></script>        
                 

=== modified file 'dhis-2/dhis-web/dhis-web-event-reports/src/main/webapp/dhis-web-event-reports/app/scripts/app.js'
--- dhis-2/dhis-web/dhis-web-event-reports/src/main/webapp/dhis-web-event-reports/app/scripts/app.js	2014-05-01 17:07:09 +0000
+++ dhis-2/dhis-web/dhis-web-event-reports/src/main/webapp/dhis-web-event-reports/app/scripts/app.js	2014-05-12 09:56:39 +0000
@@ -6170,7 +6170,7 @@
 						iconCls: 'ns-menu-item-datasource',
 						handler: function() {
 							if (ns.core.init.contextPath && ns.app.paramString) {
-								window.open(ns.core.init.contextPath + ns.core.web.analytics.getParamString(ns.app.layout, 'html'), '_blank');
+								window.open(ns.core.init.contextPath + ns.core.web.analytics.getParamString(ns.app.layout, 'html', true), '_blank');
 							}
 						}
 					},
@@ -6179,7 +6179,7 @@
 						iconCls: 'ns-menu-item-datasource',
 						handler: function() {
 							if (ns.core.init.contextPath && ns.app.paramString) {
-								window.open(ns.core.init.contextPath + ns.core.web.analytics.getParamString(ns.app.layout, 'json'), '_blank');
+								window.open(ns.core.init.contextPath + ns.core.web.analytics.getParamString(ns.app.layout, 'json', true), '_blank');
 							}
 						}
 					},
@@ -6188,7 +6188,7 @@
 						iconCls: 'ns-menu-item-datasource',
 						handler: function() {
 							if (ns.core.init.contextPath && ns.app.paramString) {
-								window.open(ns.core.init.contextPath + ns.core.web.analytics.getParamString(ns.app.layout, 'xml'), '_blank');
+								window.open(ns.core.init.contextPath + ns.core.web.analytics.getParamString(ns.app.layout, 'xml', true), '_blank');
 							}
 						}
 					},
@@ -6197,7 +6197,7 @@
 						iconCls: 'ns-menu-item-datasource',
 						handler: function() {
 							if (ns.core.init.contextPath && ns.app.paramString) {
-								window.open(ns.core.init.contextPath + ns.core.web.analytics.getParamString(ns.app.layout, 'xls'), '_blank');
+								window.open(ns.core.init.contextPath + ns.core.web.analytics.getParamString(ns.app.layout, 'xls', true), '_blank');
 							}
 						}
 					},
@@ -6206,7 +6206,7 @@
 						iconCls: 'ns-menu-item-datasource',
 						handler: function() {
 							if (ns.core.init.contextPath && ns.app.paramString) {
-								window.open(ns.core.init.contextPath + ns.core.web.analytics.getParamString(ns.app.layout, 'csv'), '_blank');
+								window.open(ns.core.init.contextPath + ns.core.web.analytics.getParamString(ns.app.layout, 'csv', true), '_blank');
 							}
 						}
 					}
@@ -6444,8 +6444,6 @@
 			}
 		});
 
-
-
         getLayoutWindow = function(dataType) {
             if (dataType === 'aggregated_values') {
                 return ns.app.aggregateLayoutWindow;

=== modified file 'dhis-2/dhis-web/dhis-web-event-reports/src/main/webapp/dhis-web-event-reports/app/scripts/core.js'
--- dhis-2/dhis-web/dhis-web-event-reports/src/main/webapp/dhis-web-event-reports/app/scripts/core.js	2014-05-01 11:03:40 +0000
+++ dhis-2/dhis-web/dhis-web-event-reports/src/main/webapp/dhis-web-event-reports/app/scripts/core.js	2014-05-12 09:56:39 +0000
@@ -1313,10 +1313,13 @@
 				}
 
 				// add span and children
-				for (var i = 0; i < aaAllFloorObjects.length; i++) {
+				for (var i = 0, aAboveFloorObjects, doorIds, uniqueDoorIds; i < aaAllFloorObjects.length; i++) {
+                    doorIds = [];
+
 					for (var j = 0, obj, doorCount = 0, oldestObj; j < aaAllFloorObjects[i].length; j++) {
 
 						obj = aaAllFloorObjects[i][j];
+                        doorIds.push(obj.id);
 
 						if (doorCount === 0) {
 
@@ -1324,8 +1327,9 @@
 							obj[spanType] = aFloorSpan[i];
 
 							// children
-							//obj.children = Ext.isDefined(aFloorSpan[i + 1]) ? aFloorSpan[i] / aFloorSpan[i + 1] : 0;
-							obj.children = obj.leaf ? 0 : aFloorSpan[i];
+                            if (obj.leaf) {
+                                obj.children = 0;
+                            }
 
 							// first sibling
 							obj.oldest = true;
@@ -1345,6 +1349,16 @@
 							doorCount = 0;
 						}
 					}
+
+                    // set above floor door children to number of unique door ids on this floor
+                    if (i > 0) {
+                        aAboveFloorObjects = aaAllFloorObjects[i-1];
+                        uniqueDoorIds = Ext.Array.unique(doorIds);
+
+                        for (var j = 0; j < aAboveFloorObjects.length; j++) {
+                            aAboveFloorObjects[j].children = uniqueDoorIds.length;
+                        }
+                    }
 				}
 
 				// add parents if more than 1 floor
@@ -1790,7 +1804,7 @@
 			// analytics
 			web.analytics = {};
 
-			web.analytics.getParamString = function(view, format) {
+			web.analytics.getParamString = function(view, format, skipPaging) {
                 var paramString,
                     dimensions = Ext.Array.clean([].concat(view.columns || [], view.rows || [])),
                     ignoreKeys = ['longitude', 'latitude'],
@@ -1838,8 +1852,19 @@
 					for (var i = 0, dim; i < view.filters.length; i++) {
 						dim = view.filters[i];
 
-						paramString += '&filter=' + dim.dimension;
-						paramString += dim.filter ? ':' + encodeURIComponent(dim.filter) : '';
+                        paramString += '&filter=' + dim.dimension;
+
+                        if (dim.items) {
+                            paramString += ':';
+
+                            for (var i = 0; i < dim.items.length; i++) {
+                                paramString += encodeURIComponent(dim.items[i].id);
+                                paramString += i < dim.items.length - 1 ? ';' : '';
+                            }
+                        }
+                        else {
+                            paramString += dim.filter ? ':' + encodeURIComponent(dim.filter) : '';
+                        }
 					}
 				}
 
@@ -1864,7 +1889,7 @@
                 }
 
                 // paging
-                if (view.dataType === 'individual_cases' && view.paging) {
+                if (view.dataType === 'individual_cases' && view.paging && !skipPaging) {
                     paramString += view.paging.pageSize ? '&pageSize=' + view.paging.pageSize : '';
                     paramString += view.paging.page ? '&page=' + view.paging.page : '';
                 }

=== modified file 'dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/message/action/AddRecipientAction.java'
--- dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/message/action/AddRecipientAction.java	2014-05-06 06:43:36 +0000
+++ dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/message/action/AddRecipientAction.java	2014-05-12 09:56:39 +0000
@@ -1,10 +1,36 @@
 package org.hisp.dhis.light.message.action;
 
+/*
+ * Copyright (c) 2004-2014, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.hisp.dhis.user.User;
 import org.hisp.dhis.user.UserService;
 
@@ -18,8 +44,6 @@
 public class AddRecipientAction
     implements Action
 {
-    private static final Log log = LogFactory.getLog( AddRecipientAction.class );
-
     public AddRecipientAction()
     {
     }

=== modified file 'dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/messaging/action/FindUserAction.java'
--- dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/messaging/action/FindUserAction.java	2014-05-06 06:43:36 +0000
+++ dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/messaging/action/FindUserAction.java	2014-05-12 09:56:39 +0000
@@ -32,8 +32,6 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.hisp.dhis.user.User;
 import org.hisp.dhis.user.UserService;
 
@@ -42,8 +40,6 @@
 public class FindUserAction
     implements Action
 {
-    private static final Log log = LogFactory.getLog( FindUserAction.class );
-
     private static final String REDIRECT = "redirect";
 
     private UserService userService;

=== modified file 'dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/namebaseddataentry/action/FindBeneficiarytAction.java'
--- dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/namebaseddataentry/action/FindBeneficiarytAction.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/namebaseddataentry/action/FindBeneficiarytAction.java	2014-05-12 09:56:39 +0000
@@ -28,11 +28,17 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import java.util.Collection;
-import java.util.HashSet;
+
+import java.util.List;
 import java.util.Set;
 
-import org.hisp.dhis.trackedentity.TrackedEntityInstance;
+import org.hisp.dhis.common.Grid;
+import org.hisp.dhis.common.OrganisationUnitSelectionMode;
+import org.hisp.dhis.common.QueryItem;
+import org.hisp.dhis.common.QueryOperator;
+import org.hisp.dhis.organisationunit.OrganisationUnitService;
+import org.hisp.dhis.trackedentity.TrackedEntityAttributeService;
+import org.hisp.dhis.trackedentity.TrackedEntityInstanceQueryParams;
 import org.hisp.dhis.trackedentity.TrackedEntityInstanceService;
 import org.hisp.dhis.trackedentityattributevalue.TrackedEntityAttributeValue;
 
@@ -54,32 +60,34 @@
         this.patientService = patientService;
     }
 
+    private OrganisationUnitService organisationUnitService;
+
+    public void setOrganisationUnitService( OrganisationUnitService organisationUnitService )
+    {
+        this.organisationUnitService = organisationUnitService;
+    }
+
+    private TrackedEntityAttributeService trackedEntityAttributeService;
+
+    public void setTrackedEntityAttributeService( TrackedEntityAttributeService trackedEntityAttributeService )
+    {
+        this.trackedEntityAttributeService = trackedEntityAttributeService;
+    }
+
     // -------------------------------------------------------------------------
     // Input & Output
     // -------------------------------------------------------------------------
 
-    private Collection<TrackedEntityInstance> patients;
-
-    public Collection<TrackedEntityInstance> getPatients()
-    {
-        return patients;
-    }
-
-    public void setPatients( Collection<TrackedEntityInstance> patients )
-    {
-        this.patients = patients;
-    }
-
-    private Set<TrackedEntityAttributeValue> pavSet;
-
-    public Set<TrackedEntityAttributeValue> getPavSet()
-    {
-        return pavSet;
-    }
-
-    public void setPavSet( Set<TrackedEntityAttributeValue> pavSet )
-    {
-        this.pavSet = pavSet;
+    private List<List<Object>> trackedEntityList;
+
+    public List<List<Object>> getTrackedEntityList()
+    {
+        return trackedEntityList;
+    }
+
+    public void setTrackedEntityList( List<List<Object>> trackedEntityList )
+    {
+        this.trackedEntityList = trackedEntityList;
     }
 
     private Set<TrackedEntityAttributeValue> patientAttributes;
@@ -130,16 +138,16 @@
         this.patientAttributeId = patientAttributeId;
     }
 
-    private Integer patientId;
+    private String patientUID;
 
-    public Integer getPatientId()
+    public String getPatientUID()
     {
-        return patientId;
+        return patientUID;
     }
 
-    public void setPatientId( Integer patientId )
+    public void setPatientUID( String patientUID )
     {
-        this.patientId = patientId;
+        this.patientUID = patientUID;
     }
 
     // Use in search related patient
@@ -172,21 +180,30 @@
     public String execute()
         throws Exception
     {
-
-        patients = patientService.searchTrackedEntityInstancesForMobile( keyword, organisationUnitId,
-            patientAttributeId );
-
-        pavSet = new HashSet<TrackedEntityAttributeValue>();
-
-        for ( TrackedEntityInstance p : patients )
-        {
-            pavSet.addAll( p.getAttributeValues() );
-        }
-
-        if ( patients.size() == 1 )
-        {
-            TrackedEntityInstance patient = patients.iterator().next();
-            patientId = patient.getId();
+        TrackedEntityInstanceQueryParams param = new TrackedEntityInstanceQueryParams();
+        QueryItem queryItem = new QueryItem(
+            trackedEntityAttributeService.getTrackedEntityAttribute( patientAttributeId ), QueryOperator.EQ, keyword,
+            false );
+
+        if ( organisationUnitId == null || organisationUnitId == 0 )
+        {
+            param.setOrganisationUnitMode( OrganisationUnitSelectionMode.ALL );
+        }
+        else
+        {
+            param.addOrganisationUnit( organisationUnitService.getOrganisationUnit( organisationUnitId ) );
+        }
+
+        param.addAttribute( queryItem );
+
+        Grid trackedEntityGrid = patientService.getTrackedEntityInstances( param );
+        trackedEntityList = trackedEntityGrid.getRows();
+
+
+        if ( trackedEntityList.size() == 1 )
+        {
+            List<Object> firstRow = trackedEntityList.iterator().next();
+            patientUID = firstRow.get( 0 ).toString();
 
             return REDIRECT;
         }

=== modified file 'dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/namebaseddataentry/action/GetPatientProgramListAction.java'
--- dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/namebaseddataentry/action/GetPatientProgramListAction.java	2014-03-18 08:10:10 +0000
+++ dhis-2/dhis-web/dhis-web-light/src/main/java/org/hisp/dhis/light/namebaseddataentry/action/GetPatientProgramListAction.java	2014-05-12 09:56:39 +0000
@@ -126,16 +126,16 @@
     // Input & Output
     // -------------------------------------------------------------------------
 
-    private Integer patientId;
+    private String patientUID;
 
-    public Integer getPatientId()
+    public String getPatientUID()
     {
-        return patientId;
+        return patientUID;
     }
 
-    public void setPatientId( Integer patientId )
+    public void setPatientUID( String patientUID )
     {
-        this.patientId = patientId;
+        this.patientUID = patientUID;
     }
 
     private Set<ProgramInstance> programInstances = new HashSet<ProgramInstance>();
@@ -249,7 +249,7 @@
         programInstances.clear();
         relatedPeople = new HashMap<Relationship, TrackedEntityInstance>();
 
-        patient = patientService.getTrackedEntityInstance( patientId );
+        patient = patientService.getTrackedEntityInstance( patientUID );
         Collection<Program> programByCurrentUser = programService.getProgramsByCurrentUser();
         for ( ProgramInstance programInstance : patient.getProgramInstances() )
         {

=== modified file 'dhis-2/dhis-web/dhis-web-light/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-web/dhis-web-light/src/main/resources/META-INF/dhis/beans.xml	2014-05-06 06:43:36 +0000
+++ dhis-2/dhis-web/dhis-web-light/src/main/resources/META-INF/dhis/beans.xml	2014-05-12 09:56:39 +0000
@@ -245,6 +245,8 @@
 		class="org.hisp.dhis.light.namebaseddataentry.action.FindBeneficiarytAction"
 		scope="prototype">
 		  <property name="patientService" ref="org.hisp.dhis.trackedentity.TrackedEntityInstanceService" />
+		  <property name="organisationUnitService" ref="org.hisp.dhis.organisationunit.OrganisationUnitService" />
+		  <property name="trackedEntityAttributeService" ref="org.hisp.dhis.trackedentity.TrackedEntityAttributeService" />
 	</bean>
 
 

=== modified file 'dhis-2/dhis-web/dhis-web-light/src/main/resources/struts.xml'
--- dhis-2/dhis-web/dhis-web-light/src/main/resources/struts.xml	2014-05-06 06:43:36 +0000
+++ dhis-2/dhis-web/dhis-web-light/src/main/resources/struts.xml	2014-05-12 09:56:39 +0000
@@ -200,7 +200,7 @@
 
 		<action name="findBeneficiary"
 			class="org.hisp.dhis.light.namebaseddataentry.action.FindBeneficiarytAction">
-			<result name="redirect" type="redirect">showPatientProgramList.action?patientId=${patientId}
+			<result name="redirect" type="redirect">showPatientProgramList.action?patientUID=${patientUID}
 			</result>
 			<result name="success" type="velocity">/dhis-web-light/main.vm</result>
 			<param name="page">/dhis-web-light/namebased/beneficiaryList.vm</param>

=== modified file 'dhis-2/dhis-web/dhis-web-light/src/main/webapp/dhis-web-light/namebased/beneficiaryList.vm'
--- dhis-2/dhis-web/dhis-web-light/src/main/webapp/dhis-web-light/namebased/beneficiaryList.vm	2014-03-07 08:27:33 +0000
+++ dhis-2/dhis-web/dhis-web-light/src/main/webapp/dhis-web-light/namebased/beneficiaryList.vm	2014-05-12 09:56:39 +0000
@@ -2,14 +2,14 @@
 
 <p>
 <ul>
-#foreach( $pav in $pavSet )
-	#if($pav.getAttribute().getDisplayInListNoProgram()== true)
-<li><a href="showPatientProgramList.action?patientId=$pav.getEntityInstance().getId()">$!encoder.htmlEncode( ${pav.value} )</a></li>
-#end	
+#foreach( $row in $trackedEntityList )
+	
+<li><a href="showPatientProgramList.action?patientUID=$row.get(0)">$!encoder.htmlEncode( ${row.get(5)} )</a></li>
+	
 #end
 </ul>
 </p>
-<p><strong>Total found: $patients.size()</strong></p>
+<p><strong>Total found: $trackedEntityList.size()</strong></p>
 <div id="footer">
 <h2>$i18n.getString( "navigate_to" )</h2>
 <ul>

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunit/AddOrganisationUnitAction.java'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunit/AddOrganisationUnitAction.java	2014-05-05 08:08:38 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunit/AddOrganisationUnitAction.java	2014-05-12 09:56:39 +0000
@@ -28,13 +28,17 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import com.opensymphony.xwork2.Action;
+import static org.hisp.dhis.system.util.TextUtils.nullIfEmpty;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+
 import org.hisp.dhis.attribute.AttributeService;
 import org.hisp.dhis.calendar.CalendarService;
 import org.hisp.dhis.calendar.DateUnit;
 import org.hisp.dhis.common.IdentifiableObjectManager;
 import org.hisp.dhis.dataset.DataSetService;
-import org.hisp.dhis.i18n.I18nFormat;
 import org.hisp.dhis.organisationunit.OrganisationUnit;
 import org.hisp.dhis.organisationunit.OrganisationUnitGroup;
 import org.hisp.dhis.organisationunit.OrganisationUnitGroupService;
@@ -44,11 +48,7 @@
 import org.hisp.dhis.system.util.ValidationUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-
-import static org.hisp.dhis.system.util.TextUtils.nullIfEmpty;
+import com.opensymphony.xwork2.Action;
 
 /**
  * @author Torgeir Lorange Ostby
@@ -60,13 +60,6 @@
     // Dependencies
     // -------------------------------------------------------------------------
 
-    private I18nFormat format;
-
-    public void setFormat( I18nFormat format )
-    {
-        this.format = format;
-    }
-
     private OrganisationUnitService organisationUnitService;
 
     public void setOrganisationUnitService( OrganisationUnitService organisationUnitService )

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunit/UpdateOrganisationUnitAction.java'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunit/UpdateOrganisationUnitAction.java	2014-05-05 08:08:38 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-organisationunit/src/main/java/org/hisp/dhis/oum/action/organisationunit/UpdateOrganisationUnitAction.java	2014-05-12 09:56:39 +0000
@@ -28,14 +28,22 @@
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-import com.opensymphony.xwork2.Action;
+import static org.hisp.dhis.system.util.TextUtils.nullIfEmpty;
+import static org.hisp.dhis.system.util.ValidationUtils.coordinateIsValid;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Date;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 import org.hisp.dhis.attribute.AttributeService;
 import org.hisp.dhis.calendar.CalendarService;
 import org.hisp.dhis.calendar.DateUnit;
 import org.hisp.dhis.common.IdentifiableObjectManager;
 import org.hisp.dhis.dataset.DataSet;
 import org.hisp.dhis.dataset.DataSetService;
-import org.hisp.dhis.i18n.I18nFormat;
 import org.hisp.dhis.organisationunit.OrganisationUnit;
 import org.hisp.dhis.organisationunit.OrganisationUnitGroup;
 import org.hisp.dhis.organisationunit.OrganisationUnitGroupService;
@@ -45,15 +53,7 @@
 import org.hisp.dhis.system.util.ValidationUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import static org.hisp.dhis.system.util.TextUtils.nullIfEmpty;
-import static org.hisp.dhis.system.util.ValidationUtils.coordinateIsValid;
+import com.opensymphony.xwork2.Action;
 
 /**
  * @author Torgeir Lorange Ostby
@@ -65,13 +65,6 @@
     // Dependencies
     // -------------------------------------------------------------------------
 
-    private I18nFormat format;
-
-    public void setFormat( I18nFormat format )
-    {
-        this.format = format;
-    }
-
     private OrganisationUnitService organisationUnitService;
 
     public void setOrganisationUnitService( OrganisationUnitService organisationUnitService )

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/caseAggregationForm.vm'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/caseAggregationForm.vm	2014-03-25 06:23:18 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/caseAggregationForm.vm	2014-05-12 09:56:39 +0000
@@ -114,7 +114,6 @@
 						<option value="[PSIC:*]">$i18n.getString( "completed" )</option>
 						<option value="[PS:*.COUNT]" name="multiProgram">$i18n.getString( "visit_selected_program_stage_x_th_time" )</option>
 						<option value="[PS:*] AND [PSP:DATE@executionDate#-DATE@dueDate#]" name="multiProgram">$i18n.getString( "report_date" ) - $i18n.getString( "due_date" )</option>
-						<option value="[PS:*] AND [PC:DATE@executionDate#-DATE@birthDate#]" name="multiProgram">$i18n.getString( "age_at_visit_days_since_birth" )</option>
 					</select>
 					</select>
 				</td>

=== modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/responseValidationCriteria.vm'
--- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/responseValidationCriteria.vm	2010-05-18 03:42:26 +0000
+++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-program/src/main/webapp/dhis-web-maintenance-program/responseValidationCriteria.vm	2014-05-12 09:56:39 +0000
@@ -5,9 +5,4 @@
   <description>$encoder.xmlEncode($validationCriteria.description )</description>
   <property>$i18n.getString($validationCriteria.property)</property>
   <operator>$validationCriteria.operator</operator>
-  #if($validationCriteria.property == 'birthDate')
-	<value>$format.formatDate($validationCriteria.value)</value>
-  #else
-	<value>$validationCriteria.value</value>
-  #end
 </validationCriteria>
\ No newline at end of file

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/app/scripts/app.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/app/scripts/app.js	2014-04-05 11:52:49 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/app/scripts/app.js	2014-05-12 09:56:39 +0000
@@ -1435,13 +1435,14 @@
 			text: GIS.i18n.labels,
 			iconCls: 'gis-menu-item-icon-labels',
 			handler: function() {
-				if (layer.labelWindow) {
-					layer.labelWindow.show();
-				}
-				else {
-					layer.labelWindow = GIS.app.LabelWindow(layer);
-					layer.labelWindow.show();
-				}
+                var window = layer.labelWindow || (layer.labelWidow = GIS.app.LabelWindow(layer));
+
+                if (layer.id === 'boundary') {
+                    window.updateLabels();
+                }
+                else {
+                    window.show();
+                }
 			}
 		};
 		items.push(item);
@@ -2033,23 +2034,48 @@
 			}
 		});
 
-		getLabelConfig = function() {
-			return {
+		getLabelConfig = function(isLabel) {
+			var style = {
 				fontSize: fontSize.getValue(),
 				strong: strong.getValue(),
 				italic: italic.getValue(),
 				color: color.getValue()
-			};
+            };
+
+            if (isLabel) {
+                style.label = '\${label}';
+                style.fontFamily = 'arial,sans-serif,ubuntu,consolas';
+			}
+
+            return style;
 		};
 
 		updateLabels = function() {
-			if (layer.hasLabels) {
-				layer.styleMap = GIS.core.StyleMap(layer.id, getLabelConfig());
-
-				var loader = layer.core.getLoader();
-				loader.hideMask = true;
-				loader.loadLegend();
-			}
+            var loader = layer.core.getLoader();
+            loader.hideMask = true;
+
+            if (layer.hasLabels) {
+                layer.hasLabels = false;
+
+                if (layer.id === 'boundary') {
+                    layer.core.setFeatureLabelStyle(false);
+                }
+                else {
+                    layer.styleMap = GIS.core.StyleMap(layer.id);
+                    loader.loadLegend();
+                }
+            }
+            else {
+                layer.hasLabels = true;
+
+                if (layer.id === 'boundary') {
+                    layer.core.setFeatureLabelStyle(true);
+                }
+                else {
+                    layer.styleMap = GIS.core.StyleMap(layer.id, getLabelConfig(true));
+                    loader.loadLegend();
+                }
+            }
 		};
 
 		window = Ext.create('Ext.window.Window', {
@@ -2059,6 +2085,7 @@
 			width: gis.conf.layout.tool.window_width,
 			resizable: false,
 			closeAction: 'hide',
+            updateLabels: updateLabels,
 			items: {
 				layout: 'fit',
 				cls: 'gis-container-inner',
@@ -2119,18 +2146,7 @@
 					xtype: 'button',
 					text: GIS.i18n.showhide,
 					handler: function() {
-						if (layer.hasLabels) {
-							layer.hasLabels = false;
-							layer.styleMap = GIS.core.StyleMap(layer.id);
-						}
-						else {
-							layer.hasLabels = true;
-							layer.styleMap = GIS.core.StyleMap(layer.id, getLabelConfig());
-						}
-
-						var loader = layer.core.getLoader();
-						loader.hideMask = true;
-						loader.loadLegend();
+                        updateLabels();
 					}
 				}
 			],
@@ -8114,6 +8130,7 @@
 							viewport.favoriteWindow.show();
 						}
 					});
+
 					if (gis.init.user.isAdmin) {
 						a.push({
 							text: GIS.i18n.legend,

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/app/scripts/core.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/app/scripts/core.js	2014-05-03 11:20:30 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/app/scripts/core.js	2014-05-12 09:56:39 +0000
@@ -185,9 +185,26 @@
             selectHandlers,
 			dimConf = gis.conf.finals.dimension,
             defaultHoverWindow,
-            eventWindow;
+            eventWindow,
+            isBoundary = layer.id === 'boundary',
+            isEvent = layer.id === 'event';
 
 		defaultHoverSelect = function fn(feature) {
+            if (isBoundary) {
+                var style = layer.core.getDefaultFeatureStyle();
+
+                style.fillOpacity = 0.15;
+                style.strokeColor = feature.style.strokeColor;
+                style.strokeWidth = feature.style.strokeWidth;
+                style.label = feature.style.label;
+                style.fontFamily = feature.style.fontFamily;
+                style.fontWeight = feature.style.strokeWidth > 1 ? 'bold' : 'normal';
+                style.labelAlign = feature.style.labelAlign;
+                style.labelYOffset = feature.style.labelYOffset;
+
+                layer.drawFeature(feature, style);
+            }
+
 			if (defaultHoverWindow) {
 				defaultHoverWindow.destroy();
 			}
@@ -625,7 +642,7 @@
             onClickSelect: defaultClickSelect
         };
 
-		if (layer.id === 'event') {
+		if (isEvent) {
 			options.onClickSelect = function fn(feature) {
                 var ignoreKeys = ['label', 'value', 'nameColumnMap', 'psi', 'ps', 'longitude', 'latitude', 'eventdate', 'ou', 'oucode', 'ouname'],
                     attributes = feature.attributes,
@@ -726,29 +743,24 @@
 		var defaults = {
 				fillOpacity: 1,
 				strokeColor: '#fff',
-				strokeWidth: 1
+				strokeWidth: 1,
+                pointRadius: 5,
+                labelAlign: 'cr',
+                labelYOffset: 13
 			},
 			select = {
 				fillOpacity: 0.9,
 				strokeColor: '#fff',
 				strokeWidth: 1,
-				cursor: 'pointer'
+                pointRadius: 5,
+				cursor: 'pointer',
+                labelAlign: 'cr',
+                labelYOffset: 13
 			};
 
-		if (id === 'boundary') {
-			defaults.fillOpacity = 0;
-			defaults.strokeColor = '#000';
-			defaults.strokeWidth = 1;
-
-			select.fillColor = '#000';
-			select.fillOpacity = 0.15;
-			select.strokeColor = '#000';
-			select.strokeWidth = 1;
-		}
-
 		if (labelConfig) {
-			defaults.label = '\${label}';
-			defaults.fontFamily = 'arial,sans-serif,ubuntu,consolas';
+            defaults.label = labelConfig.label;
+            defaults.fontFamily = labelConfig.fontFamily;
 			defaults.fontSize = (labelConfig.fontSize || 13) + 'px';
 			defaults.fontWeight = labelConfig.strong ? 'bold' : 'normal';
 			defaults.fontStyle = labelConfig.italic ? 'italic' : 'normal';
@@ -1087,7 +1099,7 @@
                     }
 
                     // name-column map
-                    map = Ext.clone(r.metaData.names);
+                    map = r.metaData.names;
 
                     for (var i = 0; i < r.headers.length; i++) {
                         map[r.headers[i].name] = r.headers[i].column;
@@ -1510,9 +1522,12 @@
 				scope: this,
 				disableCaching: false,
 				success: function(r) {
-					var geojson = gis.util.geojson.decode(r),
+					var geojson = gis.util.geojson.decode(r, 'DESC'),
 						format = new OpenLayers.Format.GeoJSON(),
-						features = gis.util.map.getTransformedFeatureArray(format.read(geojson));
+						features = gis.util.map.getTransformedFeatureArray(format.read(geojson)),
+                        colors = ['black', 'blue', 'red', 'green', 'yellow'],
+                        levels = [],
+                        levelObjectMap = {};
 
 					if (!Ext.isArray(features)) {
 						olmap.mask.hide();
@@ -1526,6 +1541,35 @@
 						return;
 					}
 
+                    // get levels, colors, map
+                    for (var i = 0; i < features.length; i++) {
+                        levels.push(parseFloat(features[i].attributes.level));
+                    }
+
+                    levels = Ext.Array.unique(levels).sort();
+
+                    for (var i = 0; i < levels.length; i++) {
+                        levelObjectMap[levels[i]] = {
+                            strokeColor: colors[i]
+                        };
+                    }
+
+                    // style
+                    for (var i = 0, feature, obj, strokeWidth; i < features.length; i++) {
+                        feature = features[i];
+                        obj = levelObjectMap[feature.attributes.level];
+                        strokeWidth = levels.length === 1 ? 1 : feature.attributes.level == 2 ? 2 : 1;
+
+                        feature.style = {
+                            strokeColor: obj.strokeColor || 'black',
+                            strokeWidth: strokeWidth,
+                            fillOpacity: 0,
+                            pointRadius: 5,
+                            labelAlign: 'cr',
+                            labelYOffset: 13
+                        };
+                    }
+
 					layer.core.featureStore.loadFeatures(features.slice(0));
 
 					loadData(view, features);
@@ -1549,6 +1593,11 @@
 			layer.removeFeatures(layer.features);
 			layer.addFeatures(features);
 
+            // labels
+            if (layer.hasLabels) {
+                layer.core.setFeatureLabelStyle(true, true);
+            }
+
 			loadLegend(view);
 		};
 
@@ -2351,7 +2400,7 @@
 
 			util.geojson = {};
 
-			util.geojson.decode = function(doc) {
+			util.geojson.decode = function(doc, levelOrder) {
 				var geojson = {};
 				geojson.type = 'FeatureCollection';
 				geojson.crs = {
@@ -2362,6 +2411,11 @@
 				};
 				geojson.features = [];
 
+                levelOrder = levelOrder || 'ASC';
+
+                // sort
+                doc.geojson = util.array.sort(doc.geojson, levelOrder, 'le');
+
 				for (var i = 0; i < doc.geojson.length; i++) {
 					geojson.features.push({
 						geometry: {
@@ -2918,6 +2972,8 @@
 		gis.olmap.addLayers(layers);
 
 		GIS.core.instances.push(gis);
+g = gis;
+b = gis.layer.boundary;
 
 		return gis;
 	};

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/app/scripts/mapfish/core/GeoStat/all.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/app/scripts/mapfish/core/GeoStat/all.js	2013-12-22 11:58:26 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/app/scripts/mapfish/core/GeoStat/all.js	2014-05-12 09:56:39 +0000
@@ -405,6 +405,47 @@
 		return;
 	},
 
+    getDefaultFeatureStyle: function() {
+        return {
+            fillOpacity: 0,
+            fillColor: '#000',
+            strokeColor: '#000',
+            strokeWidth: 1,
+            pointRadius: 5,
+            cursor: 'pointer'
+        };
+    },
+
+    setFeatureStyle: function(style) {
+        for (var i = 0; i < this.layer.features.length; i++) {
+            this.layer.features[i].style = style;
+        }
+
+        this.layer.redraw();
+    },
+
+    setFeatureLabelStyle: function(isLabel, skipDraw) {
+        for (var i = 0, feature, style, label; i < this.layer.features.length; i++) {
+            feature = this.layer.features[i];
+            style = feature.style;
+
+            if (isLabel) {
+                style.label = feature.attributes.label;
+                style.fontColor = style.strokeColor;
+                style.fontWeight = style.strokeWidth > 1 ? 'bold' : 'normal';
+                style.labelAlign = 'cr';
+                style.labelYOffset = 13;
+            }
+            else {
+                style.label = null;
+            }
+        }
+
+        if (!skipDraw) {
+            this.layer.redraw();
+        }
+    },
+
     updateOptions: function(newOptions) {
         var oldOptions = OpenLayers.Util.extend({}, this.options);
         this.addOptions(newOptions);

=== modified file 'dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/app/scripts/plugin.js'
--- dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/app/scripts/plugin.js	2014-05-04 10:49:11 +0000
+++ dhis-2/dhis-web/dhis-web-mapping/src/main/webapp/dhis-web-mapping/app/scripts/plugin.js	2014-05-12 09:56:39 +0000
@@ -3153,7 +3153,6 @@
 		gis.olmap.addLayers(layers);
 
 		GIS.core.instances.push(gis);
-e = gis.layer.event;
 
 		return gis;
 	};

=== modified file 'dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/scripts/core.js'
--- dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/scripts/core.js	2014-05-01 10:38:21 +0000
+++ dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/scripts/core.js	2014-05-12 09:56:39 +0000
@@ -175,7 +175,7 @@
 				},
 				displayDensity: {
 					'compact': '3px',
-					'normal': '5px',
+					'normal': '6px',
 					'comfortable': '10px',
 				},
 				fontSize: {
@@ -1445,10 +1445,13 @@
 				}
 
 				// add span and children
-				for (var i = 0; i < aaAllFloorObjects.length; i++) {
+				for (var i = 0, aAboveFloorObjects, doorIds, uniqueDoorIds; i < aaAllFloorObjects.length; i++) {
+                    doorIds = [];
+
 					for (var j = 0, obj, doorCount = 0, oldestObj; j < aaAllFloorObjects[i].length; j++) {
 
 						obj = aaAllFloorObjects[i][j];
+                        doorIds.push(obj.id);
 
 						if (doorCount === 0) {
 
@@ -1456,7 +1459,9 @@
 							obj[spanType] = aFloorSpan[i];
 
 							// children
-							obj.children = obj.leaf ? 0 : aFloorSpan[i];
+                            if (obj.leaf) {
+                                obj.children = 0;
+                            }
 
 							// first sibling
 							obj.oldest = true;
@@ -1476,6 +1481,16 @@
 							doorCount = 0;
 						}
 					}
+
+                    // set above floor door children to number of unique door ids on this floor
+                    if (i > 0) {
+                        aAboveFloorObjects = aaAllFloorObjects[i-1];
+                        uniqueDoorIds = Ext.Array.unique(doorIds);
+
+                        for (var j = 0; j < aAboveFloorObjects.length; j++) {
+                            aAboveFloorObjects[j].children = uniqueDoorIds.length;
+                        }
+                    }
 				}
 
 				// add parents if more than 1 floor
@@ -1980,7 +1995,7 @@
 						displayDensity,
 						fontSize,
 						isNumeric = Ext.isObject(config) && Ext.isString(config.type) && config.type.substr(0,5) === 'value' && !config.empty,
-						isValue = Ext.isObject(config) && Ext.isString(config.type) && config.type === 'value' && !config.empty,
+						isValue = isNumeric && config.type === 'value',
 						cls = '',
 						html = '';
 
@@ -1996,7 +2011,7 @@
                     tdCount = tdCount + 1;
 
 					// background color from legend set
-					if (isNumeric && xLayout.legendSet) {
+					if (isValue && xLayout.legendSet) {
 						var value = parseFloat(config.value);
 						mapLegends = xLayout.legendSet.mapLegends;
 
@@ -2017,7 +2032,8 @@
 					cls += config.hidden ? ' td-hidden' : '';
 					cls += config.collapsed ? ' td-collapsed' : '';
 					cls += isValue ? ' pointer' : '';
-					cls += bgColor ? ' legend' : (config.cls ? ' ' + config.cls : '');
+					//cls += bgColor ? ' legend' : (config.cls ? ' ' + config.cls : '');
+                    cls += config.cls ? ' ' + config.cls : '';
 
 					// if sorting
 					if (Ext.isString(metaDataId)) {
@@ -2030,19 +2046,20 @@
 					}
 
 					html += '<td ' + (config.uuid ? ('id="' + config.uuid + '" ') : '');
-					html += ' class="' + cls + '" ' + colSpan + rowSpan
+					html += ' class="' + cls + '" ' + colSpan + rowSpan;
 
-					if (bgColor) {
-						html += '>';
-						html += '<div class="legendCt">';
-						html += '<div class="number ' + config.cls + '" style="padding:' + displayDensity + '; padding-right:3px; font-size:' + fontSize + '">' + htmlValue + '</div>';
-						html += '<div class="arrowCt ' + config.cls + '">';
-						html += '<div class="arrow" style="border-bottom:8px solid transparent; border-right:8px solid ' + bgColor + '">&nbsp;</div>';
-						html += '</div></div></div></td>';
-					}
-					else {
-						html += 'style="padding:' + displayDensity + '; font-size:' + fontSize + ';"' + '>' + htmlValue + '</td>';
-					}
+					//if (bgColor && isValue) {
+                        //html += 'style="color:' + bgColor + ';padding:' + displayDensity + '; font-size:' + fontSize + ';"' + '>' + htmlValue + '</td>';
+						//html += '>';
+						//html += '<div class="legendCt">';
+						//html += '<div class="number ' + config.cls + '" style="padding:' + displayDensity + '; padding-right:3px; font-size:' + fontSize + '">' + htmlValue + '</div>';
+						//html += '<div class="arrowCt ' + config.cls + '">';
+						//html += '<div class="arrow" style="border-bottom:8px solid transparent; border-right:8px solid ' + bgColor + '">&nbsp;</div>';
+						//html += '</div></div></div></td>';
+					//}
+					//else {
+						html += 'style="' + (bgColor && isValue ? 'color:' + bgColor + '; ' : '') + 'padding:' + displayDensity + '; font-size:' + fontSize + ';"' + '>' + htmlValue + '</td>';
+					//}
 
 					return html;
 				};

=== modified file 'dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/scripts/plugin.js'
--- dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/scripts/plugin.js	2014-05-03 13:51:53 +0000
+++ dhis-2/dhis-web/dhis-web-pivot/src/main/webapp/dhis-web-pivot/app/scripts/plugin.js	2014-05-12 09:56:39 +0000
@@ -1079,7 +1079,6 @@
 
 					getUpdatedAxis = function(axis) {
 						var dimension;
-						axis = Ext.clone(axis);
 
 						for (var i = 0; i < axis.length; i++) {
 							if (axis[i].dimension === objectName) {
@@ -2693,6 +2692,7 @@
 	css += '.x-mask-msg { \n padding: 0; \n	border: 0 none; \n background-image: none; \n background-color: transparent; \n } \n';
 	css += '.x-mask-msg div { \n background-position: 11px center; \n } \n';
 	css += '.x-mask-msg .x-mask-loading { \n border: 0 none; \n	background-color: #000; \n color: #fff; \n border-radius: 2px; \n padding: 12px 14px 12px 30px; \n opacity: 0.65; \n } \n';
+    css += '.x-mask { opacity: 0 } \n';
 
 	css += '.pivot td.legend { \n padding: 0; \n } \n';
 	css += '.pivot div.legendCt { \n display: table; \n float: right; \n width: 100%; \n } \n';
@@ -2967,6 +2967,12 @@
 				config = web.pivot.getHtml(xLayout, xResponse, xColAxis, xRowAxis);
 				ns.app.centerRegion.update(config.html);
 
+                Ext.defer( function() {
+                    Ext.get(ns.core.init.el).fadeIn({
+                        duration: 400
+                    });
+                }, 300 );
+
 				// after render
 				ns.app.layout = layout;
 				ns.app.xLayout = xLayout;
@@ -3028,6 +3034,8 @@
 			}
 
 			ns.core = PT.getCore(Ext.clone(init));
+            ns.core.init.el = config.el;
+            Ext.get(ns.core.init.el).setStyle('opacity', 0);
 			extendInstance(ns);
 
 			ns.app.viewport = createViewport();

=== modified file 'dhis-2/dhis-web/dhis-web-portal/india-pom.xml'
--- dhis-2/dhis-web/dhis-web-portal/india-pom.xml	2014-04-22 15:46:19 +0000
+++ dhis-2/dhis-web/dhis-web-portal/india-pom.xml	2014-05-12 09:56:39 +0000
@@ -2,21 +2,21 @@
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd";>
   <modelVersion>4.0.0</modelVersion>
-  
+
   <parent>
     <groupId>org.hisp.dhis</groupId>
     <artifactId>dhis-web</artifactId>
     <version>2.16-SNAPSHOT</version>
   </parent>
-  
+
   <artifactId>dhis-web-india-portal</artifactId>
   <packaging>war</packaging>
   <name>DHIS Web Portal</name>
-  
+
   <build>
     <finalName>dhis</finalName>
   </build>
-  
+
   <dependencies>
 
     <dependency>
@@ -28,6 +28,10 @@
 
     <dependency>
       <groupId>org.hisp.dhis</groupId>
+      <artifactId>dhis-api</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.hisp.dhis</groupId>
       <artifactId>dhis-web-commons</artifactId>
     </dependency>
     <dependency>
@@ -35,6 +39,10 @@
       <artifactId>dhis-web-commons-resources</artifactId>
       <type>war</type>
     </dependency>
+    <dependency>
+      <groupId>org.hisp.dhis</groupId>
+      <artifactId>dhis-service-core</artifactId>
+    </dependency>
 
     <!-- Web-API modules -->
 
@@ -176,26 +184,43 @@
       <version>${project.version}</version>
       <type>war</type>
     </dependency>
-    
-	
-	<!-- India modules -->    
+    <dependency>
+      <groupId>org.hisp.dhis</groupId>
+      <artifactId>dhis-web-event-capture</artifactId>
+      <version>${project.version}</version>
+      <type>war</type>
+    </dependency>
+    <dependency>
+      <groupId>org.hisp.dhis</groupId>
+      <artifactId>dhis-web-event-reports</artifactId>
+      <version>${project.version}</version>
+      <type>war</type>
+    </dependency>
+    <dependency>
+      <groupId>org.hisp.dhis</groupId>
+      <artifactId>dhis-web-tracker-capture</artifactId>
+      <version>${project.version}</version>
+      <type>war</type>
+    </dependency>
+    <dependency>
+      <groupId>org.hisp.dhis</groupId>
+      <artifactId>dhis-web-maintenance-appmanager</artifactId>
+      <version>${project.version}</version>
+      <type>war</type>
+    </dependency>
+	
+	
+	<!-- India Modules -->
+	
 	<dependency>
       <groupId>org.hisp.dhis</groupId>
-      <artifactId>dhis-web-maintenance-ccem</artifactId>
-      <version>${project.version}</version>
-      <type>war</type>
-    </dependency>
-    <dependency>
-      <groupId>org.hisp.dhis</groupId>
-      <artifactId>dhis-web-coldchain</artifactId>
+      <artifactId>dhis-web-maintenance-pbf</artifactId>
       <version>${project.version}</version>
       <type>war</type>
     </dependency>
 	
   </dependencies>
-  
   <properties>
     <rootDir>../../</rootDir>
   </properties>
-
 </project>

=== modified file 'dhis-2/dhis-web/dhis-web-sms/src/main/java/org/hisp/dhis/sms/outcoming/SearchPatientAction.java'
--- dhis-2/dhis-web/dhis-web-sms/src/main/java/org/hisp/dhis/sms/outcoming/SearchPatientAction.java	2014-04-23 23:45:11 +0000
+++ dhis-2/dhis-web/dhis-web-sms/src/main/java/org/hisp/dhis/sms/outcoming/SearchPatientAction.java	2014-05-12 09:56:39 +0000
@@ -38,7 +38,6 @@
 import org.hisp.dhis.organisationunit.OrganisationUnit;
 import org.hisp.dhis.ouwt.manager.OrganisationUnitSelectionManager;
 import org.hisp.dhis.paging.ActionPagingSupport;
-import org.hisp.dhis.program.ProgramInstance;
 import org.hisp.dhis.program.ProgramService;
 import org.hisp.dhis.trackedentity.TrackedEntityInstance;
 import org.hisp.dhis.trackedentity.TrackedEntityInstanceService;
@@ -55,7 +54,7 @@
     private OrganisationUnitSelectionManager selectionManager;
 
     @Autowired
-    private TrackedEntityInstanceService patientService;
+    private TrackedEntityInstanceService trackedEntityInstanceService;
 
     @Autowired
     private ProgramService programService;
@@ -123,11 +122,12 @@
         // List all patients
         if ( listAll )
         {
-            total = patientService.countGetTrackedEntityInstancesByOrgUnit( organisationUnit );
+            //TODO re-implement using TrackedEntityInstanceService.getTrackedEntityInstances( TrackedEntityInstanceQueryParams )
+            
+            //total = patientService.countGetTrackedEntityInstancesByOrgUnit( organisationUnit );
             this.paging = createPaging( total );
 
-            patients = new ArrayList<TrackedEntityInstance>( patientService.getTrackedEntityInstances( organisationUnit, paging.getStartPos(),
-                paging.getPageSize() ) );
+            //patients = new ArrayList<TrackedEntityInstance>( patientService.getTrackedEntityInstances( organisationUnit, paging.getStartPos(), paging.getPageSize() ) );
 
         }
         // search patients
@@ -139,10 +139,12 @@
                 orgunits.add( organisationUnit );
             }
 
-            total = patientService.countSearchTrackedEntityInstances( searchTexts, orgunits, null, ProgramInstance.STATUS_ACTIVE );
+            //TODO re-implement using TrackedEntityInstanceService.getTrackedEntityInstances( TrackedEntityInstanceQueryParams )
+            
+            //total = patientService.countSearchTrackedEntityInstances( searchTexts, orgunits, null, ProgramInstance.STATUS_ACTIVE );
             this.paging = createPaging( total );
-            patients = patientService.searchTrackedEntityInstances( searchTexts, orgunits, null, null, ProgramInstance.STATUS_ACTIVE,
-                paging.getStartPos(), paging.getPageSize() );
+            //patients = patientService.searchTrackedEntityInstances( searchTexts, orgunits, null, null, ProgramInstance.STATUS_ACTIVE,
+            //    paging.getStartPos(), paging.getPageSize() );
 
             if ( !searchBySelectedOrgunit )
             {

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/i18n/en.json'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/i18n/en.json	2014-04-11 07:13:54 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/i18n/en.json	2014-05-12 09:56:39 +0000
@@ -61,5 +61,13 @@
     "not_like": "NOT LIKE",
     "move_to_selected": "Move to selected",
     "move_all_to_selected": "Move all to selected",
-    "more": "More"
+    "more": "More",    
+    "profile": "Profile",
+    "applications": "Apps",
+    "more_applications": "More apps",
+    "settings": "Settings",
+    "account": "Account",
+    "help": "Help",
+    "log_out": "Log out",
+    "about_dhis2": "About DHIS 2"
 }
\ No newline at end of file

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/index.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/index.html	2014-04-08 15:37:00 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/index.html	2014-05-12 09:56:39 +0000
@@ -9,8 +9,9 @@
         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">              
 
         <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/jquery.min.js"></script>
-        <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/ui/jquery-ui-1.9.1.custom.min.js"></script>
-        <link rel="stylesheet" type="text/css" href="../dhis-web-commons/javascripts/jQuery/ui/css/redmond/jquery-ui-1.9.1.custom.css">       
+        <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/ui/jquery-ui.min.js"></script>
+        <script type="text/javascript" src="../dhis-web-commons/javascripts/jQuery/jquery.tmpl.js"></script> 
+        <link rel="stylesheet" type="text/css" href="../dhis-web-commons/javascripts/jQuery/ui/css/redmond/jquery-ui.css">       
 
         <script type="text/javascript" src="../dhis-web-commons/bootstrap/js/bootstrap.min.js"></script>
         <link rel="stylesheet" type="text/css" href="../dhis-web-commons/bootstrap/css/bootstrap.min.css">
@@ -58,11 +59,16 @@
         <script type="text/javascript" src="scripts/services.js"></script>
         <script type="text/javascript" src="scripts/filters.js"></script>
         <script type="text/javascript" src="scripts/directives.js"></script>
-        <script type="text/javascript" src="scripts/controllers.js"></script>        
+        <script type="text/javascript" src="scripts/controllers.js"></script>   
+        
+        <!-- Menu scripts -->
+        <script type="text/javascript" src="../dhis-web-commons/javascripts/dhis2/dhis2.translate.js"></script>
+        <script type="text/javascript" src="../dhis-web-commons/javascripts/dhis2/dhis2.menu.js"></script>
 
         <link type="text/css" rel="stylesheet" href="../dhis-web-commons/font-awesome/css/font-awesome.min.css"/>
         <link type="text/css" rel="stylesheet" media="screen,print" href="../dhis-web-commons/css/light_blue/light_blue.css"/>
         <link type="text/css" rel="stylesheet" media="screen,print" href="../dhis-web-commons/css/widgets.css"/>
+        <link type="text/css" rel="stylesheet" media="screen" href="../dhis-web-commons/css/menu.css">
 
         <link type="text/css" rel="stylesheet" href="styles/style.css">
         
@@ -71,10 +77,81 @@
         <div id="header" ng-controller="HeaderController">
             <div class="container-heading">
                 <img ng-click="home()" id="headerBanner" src="../dhis-web-commons/css/light_blue/logo_banner.png" style="cursor:pointer" title="{{'dhis2_home'| translate}}">                    
-            </div>
-            <div id="headerMessage" class="bold"></div>        
-        </div>
+            </div>            
+            <div id="headerMessage" class="bold"></div>
+            
+            <!-- Menu html -->
+            <ul id="menuLinkArea">
+                <li id="profileDropDown_button">
+                    <a id="profileMenuLink" class="menu-link drop-down-menu-link">
+                        <i class="fa fa-user"></i>{{'profile'| translate}}
+                    </a>
+                </li>
+                <li id="appsDropDown_button">
+                    <a id="appsMenuLink" class="menu-link drop-down-menu-link">
+                        <i class="fa fa-th"></i>{{'applications'| translate}}
+                    </a>
+                </li>
+            </ul>
+
+            <div id="appsDropDown" class="menuDropDownArea app-menu-dropdown appsMenuLink_menu" >
+                <div class="caret-up-border"></div>
+                <div class="caret-up-background"></div>
+                <div class="menu-drop-down-wrap">
+                    <div class="menu-drop-down-scroll">
+                        <ul class="menuDropDownBox"><li class="menu-placeholder"><img src="../images/ajax-loader-bar.gif"></li></ul>
+                    </div>
+                </div>
+                <div class="apps-menu-more"><a href="../dhis-web-commons-about/modules.action">{{'more_applications'| translate}}</a></div>
+            </div>
+
+            <div id="profileDropDown" class="menuDropDownArea app-menu-dropdown ui-helper-clearfix profileMenuLink_menu">
+                <div class="caret-up-border"></div>
+                <div class="caret-up-background"></div>
+                <ul class="menuDropDownBox">
+                    <li>
+                        <a class="app-menu-item" href="../dhis-web-commons-about/userSettings.action">
+                            <img src="../icons/usersettings.png" alt="{{'settings'| translate}}">
+                            <span>{{'settings'| translate}}&nbsp;</span>
+                        </a>
+                    </li>
+                    <li>
+                        <a class="app-menu-item" href="../dhis-web-commons-about/showUpdateUserProfileForm.action">
+                            <img src="../icons/function-profile.png" alt="{{'profile'| translate}}">
+                            <span>{{'settings'| translate}}&nbsp;</span>
+                        </a>
+                    </li>
+                    <li>
+                        <a class="app-menu-item" href="../dhis-web-commons-about/showUpdateUserAccountForm.action">
+                            <img src="../icons/function-account.png" alt="{{'account' | translate}}">
+                            <span>{{'account' | translate}}&nbsp;</span>
+                        </a>
+                    </li>
+                    <li>
+                        <a class="app-menu-item" href="../dhis-web-commons-about/help.action">
+                            <img src="../icons/function-help-center.png" alt="{{'help' | translate}}">
+                            <span>{{'help' | translate}}&nbsp;</span>
+                        </a>
+                    </li>
+                    <li>
+                        <a class="app-menu-item" href="../dhis-web-commons-security/logout.action">
+                            <img src="../icons/function-log-out.png" alt="{{'log_out' | translate}}">
+                            <span>{{'log_out' | translate}}&nbsp;</span>
+                        </a>
+                    </li>
+                    <li>
+                        <a class="app-menu-item" href="../dhis-web-commons-about/about.action">
+                            <img src="../icons/function-about-dhis2.png" alt="{{'about_dhis2' | translate}}">
+                            <span>{{'about_dhis2' | translate}}&nbsp;</span>
+                        </a>
+                    </li>
+                </ul>
+            </div>
+            <!-- /Menu html -->
+
+        </div>    
         
         <div class="container-1" data-ng-view=''></div>    
+        
     </body>
 </html>
\ No newline at end of file

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/app.js'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/app.js	2014-04-04 11:55:55 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/app.js	2014-05-12 09:56:39 +0000
@@ -21,7 +21,7 @@
     delete $httpProvider.defaults.headers.common['X-Requested-With'];
     
     $routeProvider.when('/', {
-        templateUrl:'views/selection.html',
+        templateUrl:'views/home.html',
         controller: 'SelectionController'
     }).when('/dashboard',{
         templateUrl:'views/dashboard.html',

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js	2014-04-08 15:37:00 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/scripts/controllers.js	2014-05-12 09:56:39 +0000
@@ -417,8 +417,7 @@
                     }
                 }); 
             
-                $scope.programStages = [];
-
+                $scope.programStages = [];        
                 angular.forEach($scope.selectedProgram.programStages, function(stage){
                    $scope.programStages.push(storage.get(stage.id)); 
                 });
@@ -433,6 +432,10 @@
             });            
         }        
     };
+    
+    $scope.enroll = function(){        
+        console.log('Enrollment', $scope.selectedEntity, ' ', $scope.selectedProgram);
+    };
 })
 
 //Controller for the data entry section

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/styles/style.css'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/styles/style.css	2014-04-08 15:37:00 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/styles/style.css	2014-05-12 09:56:39 +0000
@@ -318,7 +318,6 @@
 
 .container-heading {
     color: white;
-    padding: 12px;
 }
 
 div.paging a.active

=== modified file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/tracker-capture-appcache'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/tracker-capture-appcache	2014-03-18 10:09:53 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/tracker-capture-appcache	2014-05-12 09:56:39 +0000
@@ -2,8 +2,8 @@
 
 CACHE:
 ../dhis-web-commons/javascripts/jQuery/jquery.min.js
-../dhis-web-commons/javascripts/jQuery/ui/jquery-ui-1.9.1.custom.min.js
-../dhis-web-commons/javascripts/jQuery/ui/css/redmond/jquery-ui-1.9.1.custom.css
+../dhis-web-commons/javascripts/jQuery/ui/jquery-ui.min.js
+../dhis-web-commons/javascripts/jQuery/ui/css/redmond/jquery-ui.css
 
 ../dhis-web-commons/fonts/LiberationSans-Regular-webfont.eot
 ../dhis-web-commons/fonts/LiberationSans-Regular-webfont.woff

=== added file 'dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/home.html'
--- dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/home.html	1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-tracker-capture/src/main/webapp/dhis-web-tracker-capture/views/home.html	2014-05-12 09:56:39 +0000
@@ -0,0 +1,131 @@
+<script src="../dhis-web-commons/ouwt/ouwt.js"></script>
+<script src="scripts/tracker-capture.js"></script>
+
+<div id="leftBar">
+    <div id="orgUnitTree" style="margin-top:20px">
+        <ul>
+        </ul>
+    </div>
+    <img id="ouwt_loader" src="../images/ajax-loader-bar.gif"/>
+</div>
+<div class="page" id="mainPage">
+    <h1>
+        <span ng-show="!selectedProgram">
+            {{'search'| translate}} {{selectedProgram.trackedEntity.name}}
+        </span>
+        <span ng-show="selectedProgram">
+            {{'search_for'| translate}} {{selectedProgram.trackedEntity.name}}
+        </span>            
+        <a href ng-click="getHelpContent()" title="{{'help'| translate}}"><i class="fa fa-question-circle"></i></a>
+    </h1>
+
+    <div class="row">
+        <input type="text" selected-org-unit ng-model="selectedOrgUnit.name" ng-hide=true>
+        <div class="input-group col-md-6">
+            <input type="text" class="form-control" ng-focus="hideSearch()">
+            <span class="input-group-btn">
+                <button class="btn btn-default" type="button" title="{{'more' | translate}}" ng-click="showSearch()"><i class="fa fa-caret-down"></i></button>
+            </span>                
+        </div>
+        <div class="btn-group col-md-6">
+            <button type="button" class="btn btn-default">{{'search'| translate}}</button>
+            <button type="button" class="btn btn-default" ng-click="loadTrackedEntities()">{{'list_all_entities'| translate}}</button>
+            <button type="button" class="btn btn-default" ng-click="showRegisteration()">{{'add_new'| translate}}</button>
+        </div>
+    </div>
+    <div class="row" ng-show="showSearchDiv">
+        <div class="col-md-6">
+            <div ng-include="'views/search.html'" ng-controller='SearchController'></div>             
+        </div>
+    </div>
+
+
+    <!-- entity grid begins -->
+    <div ng-show="trackedEntityList">
+        <div id="listDiv" ng-switch="trackedEntityList">                    
+            <div ng-switch-when=""></div>
+            <div ng-switch-default>
+                <h2>
+                    {{selectedProgram.trackedEntity.name|| 'entity' | translate}} {{'list'| translate}}
+                </h2>
+                <div ng-switch="trackedEntityList.rows.length">
+                    <div ng-switch-when="undefined">
+                        <p>
+                            {{'empty'| translate}} {{selectedProgram.trackedEntity.name|| 'entity' | translate}} {{'list'| translate}}                        
+                        </p>
+                    </div>
+                    <div ng-switch-when="0">
+                        <p>
+                            {{'empty'| translate}} {{selectedProgram.trackedEntity.name|| 'entity' | translate}} {{'list'| translate}}
+                        </p>
+                    </div>
+                    <div ng-switch-default>
+
+                        <!-- entity begins -->
+                        <table class="listTable dhis2-table-striped-border dhis2-table-hover">                    
+                            <thead>                        
+                                <tr>
+                                    <th ng-show="!gridColumn.hide" 
+                                        class="max-column-width"                                                
+                                        ng-repeat="gridColumn in gridColumns">
+
+                                        <!-- sort icon begins -->
+                                        <span ng-hide="gridColumn.showFilter" class="bold" ng-click="sortGrid(gridColumn)">
+                                            <i ng-show="sortHeader == gridColumn.id && !reverse" class="fa fa-sort-desc"></i>
+                                            <i ng-show="sortHeader == gridColumn.id && reverse" class="fa fa-sort-asc"></i>
+                                            {{gridColumn.name}}
+                                        </span>
+                                        <!-- sort icon ends -->
+
+                                        <!-- filter icon begins -->
+                                        <span class='pull-right'>
+                                            <span ng-show="gridColumn.type !== 'date'">
+                                                <a href ng-click="filterInGrid(gridColumn)" title="{{'filter'| translate}}"><span ng-class="{true: 'filter - without - content', false: 'filter - with - content'} [filterText[gridColumn.id] == undefined || filterText[gridColumn.id] == '']"><i class="fa fa-filter"></i></span></a>
+                                            </span>
+                                            <span ng-show="gridColumn.type === 'date'">
+                                                <a href ng-click="filterInGrid(gridColumn)" title="{{'filter'| translate}}"><span ng-class="{true: 'filter - without - content', false: 'filter - with - content'} [(filterText[gridColumn.id].start == 'undefined' || filterText[gridColumn.id].start == '') && (filterText[gridColumn.id].end == 'undefined' || filterText[gridColumn.id].end == '')]"><i class="fa fa-filter"></i></span></a>
+                                            </span>                                                    
+                                        </span>
+                                        <!-- filter icon ends -->
+
+                                        <!-- filter input field begins -->
+                                        <div ng-show="gridColumn.showFilter">
+                                            <span ng-show="gridColumn.type !== 'date'">
+                                                <input type="text" ng-model="filterText[gridColumn.id]" ng-blur="filterInGrid(gridColumn)">
+                                            </span>                                                    
+                                            <span ng-show="gridColumn.type === 'date'">
+                                                <input placeholder="{{'start_date'| translate}}" type="text" ng-model="filterText[gridColumn.id].start" data-ng-date readonly="readonly">
+                                                <span ng-hide="filterText[gridColumn.id].start == 'undefined' || filterText[gridColumn.id].start == ''">
+                                                    <a href ng-click='removeStartFilterText(gridColumn.id)'><span class='black'><i class="fa fa-trash-o"></i></span></a>                                                

Follow ups