Index: symmetric-oracle/src/main/java/org/jumpmind/symmetric/io/data/writer/OracleBulkDatabaseWriter.java
===================================================================
--- symmetric-oracle/src/main/java/org/jumpmind/symmetric/io/data/writer/OracleBulkDatabaseWriter.java	(revision 7565)
+++ symmetric-oracle/src/main/java/org/jumpmind/symmetric/io/data/writer/OracleBulkDatabaseWriter.java	(working copy)
@@ -200,6 +200,8 @@
                 return "varchar(4000)";
             case Types.DATE:
             case Types.TIME:
+            case OracleTypes.TIMESTAMPLTZ:
+                return "timestamp with local time zone";
             case OracleTypes.TIMESTAMPTZ:
                 return "timestamp with time zone";
             case Types.TIMESTAMP:
@@ -227,6 +229,7 @@
             case Types.DATE:
             case Types.TIME:
             case OracleTypes.TIMESTAMPTZ:
+            case OracleTypes.TIMESTAMPLTZ:
             case Types.TIMESTAMP:
                 return String.format("%s_%s_t", procedurePrefix, "timestamp").toUpperCase();
             case Types.NUMERIC:
Index: symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriterConflictResolver.java
===================================================================
--- symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriterConflictResolver.java	(revision 7565)
+++ symmetric-io/src/main/java/org/jumpmind/symmetric/io/data/writer/DefaultDatabaseWriterConflictResolver.java	(working copy)
@@ -247,7 +247,7 @@
         
         Date loadingTs = null;
         Date existingTs = null;
-        if (column.getMappedTypeCode() == -101) {
+        if (column.getMappedTypeCode() == -101 || column.getMappedTypeCode() == -102) {
             // Get the existingTs with timezone
             String existingStr = writer.getTransaction().queryForObject(sql, String.class,
                     objectValues);            
Index: symmetric-client/src/main/java/org/jumpmind/symmetric/db/oracle/OracleTriggerTemplate.java
===================================================================
--- symmetric-client/src/main/java/org/jumpmind/symmetric/db/oracle/OracleTriggerTemplate.java	(revision 7565)
+++ symmetric-client/src/main/java/org/jumpmind/symmetric/db/oracle/OracleTriggerTemplate.java	(working copy)
@@ -36,6 +36,7 @@
         geometryColumnTemplate = "case when $(tableAlias).\"$(columnName)\" is null then to_clob('') else '\"'||replace(replace(SDO_UTIL.TO_WKTGEOMETRY($(tableAlias).\"$(columnName)\"),'\\','\\\\'),'\"','\\\"')||'\"' end";
         numberColumnTemplate = "decode($(tableAlias).\"$(columnName)\", null, '', '\"'||cast($(tableAlias).\"$(columnName)\" as number("+symmetricDialect.getTemplateNumberPrecisionSpec()+"))||'\"')" ;
         datetimeColumnTemplate = "decode($(tableAlias).\"$(columnName)\", null, '', concat(concat('\"',to_char($(tableAlias).\"$(columnName)\", 'YYYY-MM-DD HH24:MI:SS.FF3')),'\"'))" ;
+        dateTimeWithLocalTimeZoneColumnTemplate = "decode($(tableAlias).\"$(columnName)\", null, '', concat(concat('\"',to_char(cast($(tableAlias).\"$(columnName)\" as timestamp), 'YYYY-MM-DD HH24:MI:SS.FF')),'\"'))" ;
         dateTimeWithTimeZoneColumnTemplate = "decode($(tableAlias).\"$(columnName)\", null, '', concat(concat('\"',to_char($(tableAlias).\"$(columnName)\", 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')),'\"'))" ;
         timeColumnTemplate = "decode($(tableAlias).\"$(columnName)\", null, '', concat(concat('\"',to_char($(tableAlias).\"$(columnName)\", 'YYYY-MM-DD HH24:MI:SS')),'\"'))" ;
         dateColumnTemplate = "decode($(tableAlias).\"$(columnName)\", null, '', concat(concat('\"',to_char($(tableAlias).\"$(columnName)\", 'YYYY-MM-DD HH24:MI:SS')),'\"'))" ;
Index: symmetric-db/src/main/java/org/jumpmind/db/model/TypeMap.java
===================================================================
--- symmetric-db/src/main/java/org/jumpmind/db/model/TypeMap.java	(revision 7565)
+++ symmetric-db/src/main/java/org/jumpmind/db/model/TypeMap.java	(working copy)
@@ -88,6 +88,8 @@
     public static final String TIMESTAMP     = "TIMESTAMP";
 
     public static final String TIMESTAMPTZ     = "TIMESTAMPTZ";
+    
+    public static final String TIMESTAMPLTZ     = "TIMESTAMPLTZ";
 
     /** The string representation of the {@link java.sql.Types#TINYINT} constant. */
     public static final String TINYINT       = "TINYINT";
@@ -150,6 +152,7 @@
         registerJdbcType(Types.VARBINARY,     VARBINARY,     JdbcTypeCategoryEnum.BINARY);
         registerJdbcType(Types.VARCHAR,       VARCHAR,       JdbcTypeCategoryEnum.TEXTUAL);
         registerJdbcType(-101,                TIMESTAMPTZ,   JdbcTypeCategoryEnum.DATETIME);
+        registerJdbcType(-102,                TIMESTAMPLTZ,   JdbcTypeCategoryEnum.DATETIME);
 
         // only available in JDK 1.4 and above:
         if (PlatformUtils.supportsJava14JdbcTypes())
Index: symmetric-db/src/main/java/org/jumpmind/db/model/Column.java
===================================================================
--- symmetric-db/src/main/java/org/jumpmind/db/model/Column.java	(revision 7565)
+++ symmetric-db/src/main/java/org/jumpmind/db/model/Column.java	(working copy)
@@ -654,7 +654,7 @@
     }
     
     public boolean isTimestampWithTimezone() {
-        return jdbcTypeCode == -101 || (jdbcTypeName != null && jdbcTypeName.equals("timestamptz"));
+        return jdbcTypeCode == -101 || jdbcTypeCode == -102 || (jdbcTypeName != null && jdbcTypeName.equals("timestamptz"));
     }
     
     public boolean containsJdbcTypes() {
Index: symmetric-db/src/main/java/org/jumpmind/db/platform/oracle/OracleDmlStatement.java
===================================================================
--- symmetric-db/src/main/java/org/jumpmind/db/platform/oracle/OracleDmlStatement.java	(revision 7565)
+++ symmetric-db/src/main/java/org/jumpmind/db/platform/oracle/OracleDmlStatement.java	(working copy)
@@ -43,6 +43,9 @@
                 if (columns[i].getMappedTypeCode() == -101) {
                     sql.append("TO_TIMESTAMP_TZ(?, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')")
                             .append(",");
+                } else if (columns[i].getMappedTypeCode() == -102) {
+                    sql.append("CAST(TO_TIMESTAMP_TZ(?, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM') AS TIMESTAMP WITH TIME ZONE)")
+                    .append(",");
                 } else if (columns[i].getJdbcTypeName() != null && columns[i].getJdbcTypeName().toUpperCase().contains(TypeMap.GEOMETRY)) {
                     sql.append("SYM_WKT2GEOM(?)").append(",");
                 } else {
@@ -63,7 +66,7 @@
                 if (nullValues[i]) {
                     sql.append(quote).append(columns[i].getName()).append(quote).append(" is NULL")
                             .append(separator);
-                } else if (columns[i].getMappedTypeCode() == -101) {
+                } else if (columns[i].getMappedTypeCode() == -101 || columns[i].getMappedTypeCode() == -102) {
                     sql.append(quote).append(columns[i].getName()).append(quote)
                             .append(" = TO_TIMESTAMP_TZ(?, 'YYYY-MM-DD HH24:MI:SS.FF TZH:TZM')")
                             .append(separator);
Index: symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java
===================================================================
--- symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java	(revision 7565)
+++ symmetric-db/src/main/java/org/jumpmind/db/platform/AbstractDatabasePlatform.java	(working copy)
@@ -34,6 +34,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.TimeZone;
 
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.codec.binary.Hex;
@@ -501,7 +502,14 @@
                         try {
                             return Timestamp.valueOf(value);
                         } catch (IllegalArgumentException ex) {
-                            return FormatUtils.parseDate(value, FormatUtils.TIMESTAMP_PATTERNS);
+							try {
+								return FormatUtils.parseDate(value, FormatUtils.TIMESTAMP_PATTERNS);
+							} catch (Exception e) {
+								int split = value.lastIndexOf(" ");
+								return FormatUtils.parseDate(value.substring(0, split).trim(),
+										FormatUtils.TIMESTAMP_PATTERNS,
+										TimeZone.getTimeZone(value.substring(split).trim()));
+							}
                         }
                     } else if (type == Types.TIME) {
                         return FormatUtils.parseDate(value, FormatUtils.TIME_PATTERNS);
Index: symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractTriggerTemplate.java
===================================================================
--- symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractTriggerTemplate.java	(revision 7565)
+++ symmetric-core/src/main/java/org/jumpmind/symmetric/db/AbstractTriggerTemplate.java	(working copy)
@@ -76,6 +76,8 @@
     protected String dateColumnTemplate;
 
     protected String dateTimeWithTimeZoneColumnTemplate;
+    
+    protected String dateTimeWithLocalTimeZoneColumnTemplate;
 
     protected String geometryColumnTemplate;
 
@@ -667,6 +669,11 @@
                                             .isNotBlank(this.dateTimeWithTimeZoneColumnTemplate)) {
                                 templateToUse = this.dateTimeWithTimeZoneColumnTemplate;
                                 break;
+                            } else if (column.getMappedType().equals(TypeMap.TIMESTAMPLTZ)
+                                    && StringUtils
+                                    		.isNotBlank(this.dateTimeWithLocalTimeZoneColumnTemplate)) {
+                            	templateToUse = this.dateTimeWithLocalTimeZoneColumnTemplate;
+                            	break;
                             }
 
                         }
Index: symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlTemplate.java
===================================================================
--- symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlTemplate.java	(revision 7565)
+++ symmetric-jdbc/src/main/java/org/jumpmind/db/sql/JdbcSqlTemplate.java	(working copy)
@@ -499,6 +499,8 @@
             obj = rs.getTimestamp(index);
         } else if (className != null && "oracle.sql.TIMESTAMPTZ".equals(className)) {
             obj = rs.getString(index);
+        } else if (className != null && "oracle.sql.TIMESTAMPLTZ".equals(className)) {
+            obj = rs.getString(index);
         } else if (className != null && className.startsWith("oracle.sql.DATE")) {
             String metaDataClassName = metaData.getColumnClassName(index);
             if ("java.sql.Timestamp".equals(metaDataClassName)
@@ -882,7 +884,7 @@
     }
 
     protected int verifyArgType(Object arg, int argType) {
-        if (argType == -101 || argType == Types.OTHER) {
+        if (argType == -101 || argType == -102 || argType == Types.OTHER) {
             return SqlTypeValue.TYPE_UNKNOWN;
         } else if ((argType == Types.INTEGER && arg instanceof BigInteger) ||
                 (argType == Types.BIGINT && arg instanceof BigDecimal)) {
