From 6d2edcc80c543290a1695e1eb364ba4ac6c0df1f Mon Sep 17 00:00:00 2001
From: ?? ? <ulysseskao@ximple.com.tw>
Date: Fri, 30 Apr 2010 18:21:18 +0800
Subject: [PATCH] 

---
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java                            |   19 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java                                  |    4 
 .gitattributes                                                                                                           |    1 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateShapeStrategy.java                                |   31 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/GeneralDgnConvertShpJobContext.java     |   36 +
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java           |    6 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java       |   14 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/GeneralDgnConvertOraSDOJobContext.java     |   36 +
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java     |    7 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java    |   33 
 xdgnjobs/ximple-jobcarrier/src/main/java/com/ximple/eofms/XQuartzJobCarrier.java                                         |    2 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateEllipseShapeStrategy.java                         |   20 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateComplexChainStrategy.java                         |   53 -
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateArcLineStringStrategy.java                        |   20 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java         |    6 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractOracleToOraSDOJobContext.java      |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java                            |   13 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java                                 |   31 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/IndexDgnConvertShpJobContext.java       |   25 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java                           |   14 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java                              |   16 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java   |    7 
 xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java                                                  |    9 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java   |    8 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java     |    8 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java                           |   53 -
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java                          |   27 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/IndexDgnConvertMySQLJobContext.java         |   25 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/AbstractDgnToShapefileJobContext.java   |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/IndexDgnConvertOraSDOJobContext.java       |   25 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractDgnFileJobContext.java                    |    8 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java                               |  122 ++++
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractOracleToMySQLJobContext.java        |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java  |    6 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java                          |    2 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java       |    7 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java       |   39 
 xdgnjobs/ximple-jobcarrier/pom.xml                                                                                       |   21 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractDgnToMySQLJobContext.java           |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java                     |    8 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/IndexDgnConvertPostGISJobContext.java     |   38 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/GeneralDgnConvertMySQLJobContext.java       |   36 +
 xdgnjobs/pom.xml                                                                                                         |   22 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java     |    7 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java   |   38 +
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleUpgradeJobContext.java                      |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineTextStrategy.java                             |   48 -
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java                        |    7 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateMultiSymbolStrategy.java                          |  149 +++---
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java   |    7 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java                             |    6 
 xdgnjobs/ximple-jobcarrier/src/main/resources/quartz.properties                                                          |   17 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateFeatureTypeStrategy.java                          |    2 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java                           |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/postjts/JTSShape.java                                     |    3 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java                               |   20 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java                  |    4 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java |    7 
 xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml                                                            |   50 +
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractDgnToOraSDOJobContext.java         |    4 
 xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/util/FeatureTypeBuilderUtilTest.java                           |   20 
 xdgnjobs/ximple-elmparser/pom.xml                                                                                        |   13 
 xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java                       |    4 
 63 files changed, 689 insertions(+), 599 deletions(-)

diff --git a/.gitattributes b/.gitattributes
index ad1b2e2..e5d83c6 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -155,6 +155,7 @@
 xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultConvertShpFilter.xml svneol=native#text/xml
 xdgnjobs/ximple-spatialjob/src/main/resources/conf/DefaultMapGroups.xml svneol=native#text/xml
 xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/filter/ElementDispatcherTest.java svneol=native#text/plain
+xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/util/FeatureTypeBuilderUtilTest.java -text svneol=unset#text/plain
 xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/util/FileUtilsTest.java -text svneol=unset#text/plain
 xdgnjobs/ximple-spatialjob/src/test/resources/com/ximple/eofms/filter/test-data/testElementFilter.xml svneol=native#text/xml
 xdgnjobs/ximple-spatialjob/src/test/resources/com/ximple/eofms/filter/test-data/testRules.xml svneol=native#text/xml
diff --git a/xdgnjobs/pom.xml b/xdgnjobs/pom.xml
index 9786382..ea4ee22 100644
--- a/xdgnjobs/pom.xml
+++ b/xdgnjobs/pom.xml
@@ -23,6 +23,7 @@
     <failIfNoTests>false</failIfNoTests>
     <stress.skip.pattern></stress.skip.pattern>
     <online.skip.pattern></online.skip.pattern>
+    <java.awt.headless>false</java.awt.headless>
     <allow.test.failure.ignore>false</allow.test.failure.ignore>
   </properties>
 
@@ -232,6 +233,12 @@
         <groupId>org.geotools</groupId>
         <artifactId>gt-postgis</artifactId>
         <version>${gt2.version}</version>
+        <exclusions>
+          <exclusion>
+            <groupId>org.postgis</groupId>
+            <artifactId>postgis-driver</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
       <dependency>
         <groupId>org.geotools</groupId>
@@ -243,6 +250,11 @@
       <dependency>
         <groupId>org.geotools</groupId>
         <artifactId>gt-referencing</artifactId>
+        <version>${gt2.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.geotools</groupId>
+        <artifactId>gt-epsg-h2</artifactId>
         <version>${gt2.version}</version>
       </dependency>
 
@@ -297,7 +309,7 @@
       <dependency>
         <groupId>org.postgis</groupId>
         <artifactId>postgis-driver</artifactId>
-        <version>1.5.0</version>
+        <version>1.5.1</version>
       </dependency>
 
       <dependency>
@@ -310,7 +322,7 @@
       <dependency>
         <groupId>org.quartz-scheduler</groupId>
         <artifactId>quartz</artifactId>
-        <version>1.7.3</version>
+        <version>1.8.0</version>
       </dependency>
       <dependency>
         <groupId>org.awl</groupId>
@@ -389,6 +401,10 @@
       <groupId>org.geotools</groupId>
       <artifactId>gt-main</artifactId>
     </dependency>
+    <dependency>
+      <groupId>org.geotools</groupId>
+      <artifactId>gt-epsg-h2</artifactId>
+    </dependency>
 
     <dependency>
       <artifactId>testng</artifactId>
@@ -450,6 +466,7 @@
           <convention>gt2/jalopygeotools.xml</convention>
           <failOnError>false</failOnError>
         </configuration>
+        <!--
         <dependencies>
           <dependency>
             <groupId>org.geotools.maven</groupId>
@@ -457,6 +474,7 @@
             <version>${gt2.version}</version>
           </dependency>
         </dependencies>
+        -->
       </plugin>
 
 
diff --git a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java
index ed94f9a..a86b701 100644
--- a/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java
+++ b/xdgnjobs/ximple-dgnio/src/main/java/com/ximple/io/dgn7/TextElement.java
@@ -6,7 +6,6 @@
 import java.nio.charset.CharacterCodingException;
 import java.nio.charset.Charset;
 import java.nio.charset.CharsetDecoder;
-import java.util.ArrayList;
 
 import org.apache.log4j.Logger;
 
@@ -22,7 +21,7 @@
  *
  * @author Ulysses
  * @version 0.1
- * @since 2006/5/18 �W�� 11:45:29
+ * @since 2006/5/18
  */
 public class TextElement extends Element implements GeometryConverter {
     private static final Logger logger = Logger.getLogger(TextElement.class);
@@ -174,11 +173,8 @@
 
                 val.append(temp[i]);
             }
-        }
-        else
-        {
+        } else {
             byte[] strRaw = new byte[num * 2];
-            ArrayList byteResult = new ArrayList();
             for (int i = 0; i < num; i++)
             {
                 short charValue = raw[i + 31];
@@ -186,7 +182,6 @@
                 byte lo = (byte) charValue;
                 strRaw[i * 2] = hi;
                 strRaw[i * 2 + 1] = lo;
-
             }
 
             try {
diff --git a/xdgnjobs/ximple-elmparser/pom.xml b/xdgnjobs/ximple-elmparser/pom.xml
index d9ce86a..14d8b8d 100644
--- a/xdgnjobs/ximple-elmparser/pom.xml
+++ b/xdgnjobs/ximple-elmparser/pom.xml
@@ -169,14 +169,14 @@
 
     <!-- Ximple Library -->
     <dependency>
-      <artifactId>ximple-dgnio</artifactId>
       <groupId>com.ximple.eofms</groupId>
-      <version>${xdgnio.version}</version>
+      <artifactId>ximple-dgnio</artifactId>
+      <version>1.2.0</version>
     </dependency>
     <dependency>
-      <artifactId>ximple-spatialjob</artifactId>
       <groupId>com.ximple.eofms</groupId>
-      <version>${xdgnio.version}</version>
+      <artifactId>ximple-spatialjob</artifactId>
+      <version>1.2.0</version>
     </dependency>
   </dependencies>
 
@@ -205,8 +205,9 @@
            Use maven from the command line:
              mvn exec:java -Dexec.mainClass="com.ximple.eofms.XElementParser"
         -->
-        <artifactId>exec-maven-plugin</artifactId>
         <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.1.1</version>
         <!--
         <executions>
           <execution>
@@ -237,7 +238,7 @@
       <plugin>
         <groupId>com.ximple.eofms.maven</groupId>
         <artifactId>ximple-jar-collector</artifactId>
-        <version>${project.version}</version>
+        <version>1.2.0</version>
         <executions>
           <execution>
             <goals>
diff --git a/xdgnjobs/ximple-jobcarrier/pom.xml b/xdgnjobs/ximple-jobcarrier/pom.xml
index 1abbe63..f53d185 100644
--- a/xdgnjobs/ximple-jobcarrier/pom.xml
+++ b/xdgnjobs/ximple-jobcarrier/pom.xml
@@ -207,23 +207,28 @@
            Use maven from the command line:
              mvn exec:java -Dexec.mainClass="com.ximple.eofms.XQuartzJobCarrier"
         -->
-        <artifactId>exec-maven-plugin</artifactId>
         <groupId>org.codehaus.mojo</groupId>
-        <!--
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.1.1</version>
         <executions>
           <execution>
-            <phase>package</phase>
+            <!--<phase>package</phase> -->
             <goals>
-              <goal>run</goal>
+              <goal>java</goal>
             </goals>
           </execution>
         </executions>
-        -->
         <configuration>
           <mainClass>com.ximple.eofms.XQuartzJobCarrier</mainClass>
           <!--
-          <commandlineArgs>-wizard</commandlineArgs>
+          <commandlineArgs>-Dlog4j.configuration=log4j.properties</commandlineArgs>
           -->
+          <systemProperties>
+            <systemProperty>
+              <key>log4j.configuration</key>
+              <value>log4j.properties</value>
+            </systemProperty>
+          </systemProperties>
         </configuration>
         <!--
         <dependencies>
@@ -282,17 +287,17 @@
       -->
       <resource>
         <directory>src/main/resources</directory>
-        <!--
         <includes>
           <include>log4j.properties</include>
           <include>quartz.properties</include>
           <include>quartz_jobs.xml</include>
         </includes>
-        -->
+        <!--
         <excludes>
           <exclude>log4j.properties</exclude>
           <exclude>quartz_jobs.xml</exclude>
         </excludes>
+        -->
         <!--
         <excludes>
           <exclude>XQuartzJobWizard*.properties</exclude>
diff --git a/xdgnjobs/ximple-jobcarrier/src/main/java/com/ximple/eofms/XQuartzJobCarrier.java b/xdgnjobs/ximple-jobcarrier/src/main/java/com/ximple/eofms/XQuartzJobCarrier.java
index 057b74a..30ef076 100644
--- a/xdgnjobs/ximple-jobcarrier/src/main/java/com/ximple/eofms/XQuartzJobCarrier.java
+++ b/xdgnjobs/ximple-jobcarrier/src/main/java/com/ximple/eofms/XQuartzJobCarrier.java
@@ -31,7 +31,7 @@
     static Log logger = LogFactory.getLog(XQuartzJobCarrier.class);
     static Options options = new Options();
 
-    private static final String VERSION = "0.9.0";
+    private static final String VERSION = "1.2.0";
 
     public static void main(String[] args) {
         XQuartzJobCarrier instance = new XQuartzJobCarrier();
diff --git a/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz.properties b/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz.properties
index be35e19..9a605e9 100644
--- a/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz.properties
+++ b/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz.properties
@@ -15,14 +15,23 @@
 #Configure JobStore
 #===============================================================
 org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
+org.quartz.jobStore.misfireThreshold = 60000
 
 #===============================================================
 #Configure Plugins
 #===============================================================
-org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
+org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingJobHistoryPlugin
 
-org.quartz.plugin.jobInitializer.fileName = quartz_jobs.xml
+#org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
+org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.XMLSchedulingDataProcessorPlugin
 
-org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
+org.quartz.plugin.jobInitializer.fileNames = quartz_jobs.xml
+
+#org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
 org.quartz.plugin.jobInitializer.failOnFileNotFound = true
-org.quartz.plugin.jobInitializer.validating=false
+#org.quartz.plugin.jobInitializer.validating=false
+org.quartz.plugin.jobInitializer.scanInterval = 120
+org.quartz.plugin.jobInitializer.wrapInUserTransaction = false
+
+org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
+org.quartz.plugin.shutdownhook.cleanShutdown = true
\ No newline at end of file
diff --git a/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml b/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml
index df229a7..91819a3 100644
--- a/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml
+++ b/xdgnjobs/ximple-jobcarrier/src/main/resources/quartz_jobs.xml
@@ -1,13 +1,26 @@
 <?xml version='1.0' encoding='utf-8'?>
 
-<quartz xmlns="http://www.opensymphony.com/quartz/JobSchedulingData"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-        xsi:schemaLocation="http://www.opensymphony.com/quartz/JobSchedulingData
-        http://www.opensymphony.com/quartz/xml/job_scheduling_data_1_5.xsd"
-        version="1.5">
+<job-scheduling-data xmlns="http://www.quartz-scheduler.org/xml/JobSchedulingData"
+                     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                     xsi:schemaLocation="http://www.quartz-scheduler.org/xml/JobSchedulingData http://www.quartz-scheduler.org/xml/job_scheduling_data_1_8.xsd"
+                     version="1.8">
 
-  <job>
-    <job-detail>
+  <pre-processing-commands>
+    <delete-jobs-in-group>*</delete-jobs-in-group>
+    <!-- clear all jobs in scheduler -->
+    <delete-triggers-in-group>*</delete-triggers-in-group>
+    <!-- clear all triggers in scheduler -->
+  </pre-processing-commands>
+
+  <processing-directives>
+    <!-- if there are any jobs/trigger in scheduler of same name (as in this file), overwrite them -->
+    <overwrite-existing-data>true</overwrite-existing-data>
+    <!-- if there are any jobs/trigger in scheduler of same name (as in this file), and over-write is false, ignore them rather then generating an error -->
+    <ignore-duplicates>false</ignore-duplicates>
+  </processing-directives>
+
+  <schedule>
+    <job>
       <name>ConvertDgn2PostGisIntoPostgre</name>
       <group>DEFAULT</group>
       <description>A job that convert dgn to shapefiles</description>
@@ -15,18 +28,19 @@
       <volatility>false</volatility>
       <durability>false</durability>
       <recover>false</recover>
-      <job-data-map allows-transient-data="true">
+      <!--job-data-map allows-transient-data="true"-->
+      <job-data-map>
         <entry>
           <key>JOBDATA_DIR</key>
-          <value>C:\DBS\XDGNDATA</value>
+          <value>C:\Usr\Projects\XDCAD\nstpcjobs</value>
         </entry>
         <entry>
           <key>PGHOST</key>
-          <value>127.0.0.1</value>
+          <value>192.168.11.99</value>
         </entry>
         <entry>
           <key>PGDDATBASE</key>
-          <value>tpc</value>
+          <value>pgNSTPC</value>
         </entry>
         <entry>
           <key>PGPORT</key>
@@ -38,15 +52,15 @@
         </entry>
         <entry>
           <key>PGUSER</key>
-          <value>spatialdb</value>
+          <value>tpcdb</value>
         </entry>
         <entry>
           <key>PGPASS</key>
-          <value>spatialdb000</value>
+          <value>simple000</value>
         </entry>
         <entry>
           <key>ORAHOST</key>
-          <value>10.206.120.190</value>
+          <value>192.168.11.200</value>
         </entry>
         <entry>
           <key>ORAINST</key>
@@ -109,11 +123,11 @@
           <value>true</value>
         </entry>
         <entry>
-          <key>USEEPSG3826</key>
+          <key>USEZONE121</key>
           <value>true</value>
         </entry>
       </job-data-map>
-    </job-detail>
+    </job>
 
     <trigger>
       <simple>
@@ -129,5 +143,5 @@
       </simple>
     </trigger>
 
-  </job>
-</quartz>
+  </schedule>
+</job-scheduling-data>
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateArcLineStringStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateArcLineStringStrategy.java
index ed4a509..8b3597a 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateArcLineStringStrategy.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateArcLineStringStrategy.java
@@ -13,6 +13,7 @@
 import org.geotools.feature.SchemaException;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
@@ -22,12 +23,8 @@
 
 public class CreateArcLineStringStrategy implements CreateFeatureTypeStrategy {
     static final Log logger = LogFactory.getLog(CreateLineStringStrategy.class);
-    GeometryFactory geometryFactory = new GeometryFactory();
+    GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
     TreeMap<String, SimpleFeatureType> typeBuilders = new TreeMap<String, SimpleFeatureType>();
-    static final GeometryConverterDecorator convertDecorator[] = new GeometryConverterDecorator[]{
-        new EPSG3826GeometryConverterDecorator(),
-        new EPSG3825GeometryConverterDecorator()
-    };
 
     // Create the listener list
     protected EventListenerList listenerList = new EventListenerList();
@@ -60,7 +57,7 @@
     }
 
     public SimpleFeature createFeature(SimpleFeatureType featureType, Element element,
-                                 boolean useTransform, boolean useEPSG3826) throws IllegalAttributeException {
+                                 boolean useTransform) throws IllegalAttributeException {
         DefaultColorTable colorTable = (DefaultColorTable) DefaultColorTable.getInstance();
         FrammeAttributeData fLinkage = getFeatureLinkage(element);
         SimpleFeature feature = null;
@@ -69,17 +66,14 @@
             ArcElement lineStringElement = (ArcElement) element;
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(lineStringElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(lineStringElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(lineStringElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = lineStringElement.toGeometry(geometryFactory);
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateComplexChainStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateComplexChainStrategy.java
index ab67304..9f515de 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateComplexChainStrategy.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateComplexChainStrategy.java
@@ -11,6 +11,7 @@
 import org.geotools.feature.SchemaException;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
@@ -20,12 +21,8 @@
 
 public class CreateComplexChainStrategy implements CreateFeatureTypeStrategy {
     static final Log logger = LogFactory.getLog(CreateLineStringStrategy.class);
-    GeometryFactory geometryFactory = new GeometryFactory();
+    GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
     TreeMap<String, SimpleFeatureType> typeBuilders = new TreeMap<String, SimpleFeatureType>();
-    static final GeometryConverterDecorator convertDecorator[] = new GeometryConverterDecorator[]{
-        new EPSG3826GeometryConverterDecorator(),
-        new EPSG3825GeometryConverterDecorator()
-    };
 
     // Create the listener list
     protected EventListenerList listenerList = new EventListenerList();
@@ -57,7 +54,7 @@
     }
 
     public SimpleFeature createFeature(SimpleFeatureType featureType, Element element,
-                                 boolean useTransform, boolean useEPSG3826) throws IllegalAttributeException {
+                                 boolean useTransform) throws IllegalAttributeException {
         DefaultColorTable colorTable = (DefaultColorTable) DefaultColorTable.getInstance();
         FrammeAttributeData fLinkage = getFeatureLinkage(element);
         SimpleFeature feature = null;
@@ -65,14 +62,10 @@
         if (element instanceof LineStringElement) {
             LineStringElement lineStringElement = (LineStringElement) element;
             Geometry gobj;
+            GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(lineStringElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(lineStringElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                convertDecorator.setConverter(lineStringElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = lineStringElement.toGeometry(geometryFactory);
             }
@@ -80,6 +73,7 @@
                 gobj = geometryFactory.createMultiLineString(new LineString[]{(LineString) gobj});
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
@@ -95,19 +89,16 @@
             ComplexChainElement complexChain = (ComplexChainElement) element;
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(complexChain);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(complexChain);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(complexChain);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else
                 gobj = complexChain.toGeometry(geometryFactory);
             if (gobj instanceof LineString) {
                 gobj = geometryFactory.createMultiLineString(new LineString[]{(LineString) gobj});
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
@@ -123,13 +114,9 @@
             LineElement lineElement = (LineElement) element;
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(lineElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(lineElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(lineElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = lineElement.toGeometry(geometryFactory);
             }
@@ -137,6 +124,7 @@
                 gobj = geometryFactory.createMultiLineString(new LineString[]{(LineString) gobj});
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
@@ -153,13 +141,9 @@
             ArcElement arcElement = (ArcElement) element;
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(arcElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(arcElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(arcElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = arcElement.toGeometry(geometryFactory);
             }
@@ -167,6 +151,7 @@
                 gobj = geometryFactory.createMultiLineString(new LineString[]{(LineString) gobj});
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateEllipseShapeStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateEllipseShapeStrategy.java
index 952d120..41656f4 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateEllipseShapeStrategy.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateEllipseShapeStrategy.java
@@ -13,6 +13,7 @@
 import org.geotools.feature.SchemaException;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
@@ -22,12 +23,8 @@
 
 public class CreateEllipseShapeStrategy implements CreateFeatureTypeStrategy {
     static final Log logger = LogFactory.getLog(CreateShapeStrategy.class);
-    GeometryFactory geometryFactory = new GeometryFactory();
+    GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
     TreeMap<String, SimpleFeatureType> typeBuilders = new TreeMap<String, SimpleFeatureType>();
-    static final GeometryConverterDecorator convertDecorator[] = new GeometryConverterDecorator[]{
-        new EPSG3826GeometryConverterDecorator(),
-        new EPSG3825GeometryConverterDecorator()
-    };
 
     // Create the listener list
     protected EventListenerList listenerList = new EventListenerList();
@@ -58,7 +55,7 @@
     }
 
     public SimpleFeature createFeature(SimpleFeatureType featureType, Element element,
-                                 boolean useTransform, boolean useEPSG3826) throws IllegalAttributeException {
+                                 boolean useTransform) throws IllegalAttributeException {
         DefaultColorTable colorTable = (DefaultColorTable) DefaultColorTable.getInstance();
         FrammeAttributeData fLinkage = getFeatureLinkage(element);
         SimpleFeature feature = null;
@@ -67,17 +64,14 @@
             EllipseElement ellipseElement = (EllipseElement) element;
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(ellipseElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(ellipseElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(ellipseElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = ellipseElement.toGeometry(geometryFactory);
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateFeatureTypeStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateFeatureTypeStrategy.java
index 919bfa2..5e89277 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateFeatureTypeStrategy.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateFeatureTypeStrategy.java
@@ -10,7 +10,7 @@
     public SimpleFeatureType createFeatureElement(String featureName) throws SchemaException;
 
     public SimpleFeature createFeature(SimpleFeatureType featureType, Element element,
-                                 boolean useTransform, boolean useEPSG3826) throws IllegalAttributeException;
+                                 boolean useTransform) throws IllegalAttributeException;
 
     public void addCreateFeatureTypeEventListener(CreateFeatureTypeEventListener listener);
 
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java
index 62c52e1..8140939 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineStringStrategy.java
@@ -12,6 +12,7 @@
 import org.geotools.feature.SchemaException;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
@@ -21,12 +22,8 @@
 
 public class CreateLineStringStrategy implements CreateFeatureTypeStrategy {
     static final Log logger = LogFactory.getLog(CreateLineStringStrategy.class);
-    GeometryFactory geometryFactory = new GeometryFactory();
+    GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
     TreeMap<String, SimpleFeatureType> typeBuilders = new TreeMap<String, SimpleFeatureType>();
-    static final GeometryConverterDecorator convertDecorator[] = new GeometryConverterDecorator[]{
-        new EPSG3826GeometryConverterDecorator(),
-        new EPSG3825GeometryConverterDecorator()
-    };
 
     // Create the listener list
     protected EventListenerList listenerList = new EventListenerList();
@@ -58,7 +55,7 @@
     }
 
     public SimpleFeature createFeature(SimpleFeatureType featureType, Element element,
-                                 boolean useTransform, boolean useEPSG3826) throws IllegalAttributeException {
+                                 boolean useTransform) throws IllegalAttributeException {
         DefaultColorTable colorTable = (DefaultColorTable) DefaultColorTable.getInstance();
         FrammeAttributeData fLinkage = getFeatureLinkage(element);
         SimpleFeature feature = null;
@@ -67,17 +64,14 @@
             LineStringElement lineStringElement = (LineStringElement) element;
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(lineStringElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(lineStringElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(lineStringElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = lineStringElement.toGeometry(geometryFactory);
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
@@ -93,13 +87,9 @@
             ComplexChainElement complexChain = (ComplexChainElement) element;
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(complexChain);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(complexChain);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(complexChain);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = complexChain.toGeometry(geometryFactory);
             }
@@ -113,6 +103,7 @@
                 gobj = geometryFactory.createLineString(coordinateList.toCoordinateArray());
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
@@ -128,17 +119,14 @@
             LineElement lineElement = (LineElement) element;
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(lineElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(lineElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(lineElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = lineElement.toGeometry(geometryFactory);
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
@@ -155,17 +143,14 @@
             ArcElement arcElement = (ArcElement) element;
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(arcElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(arcElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(arcElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = arcElement.toGeometry(geometryFactory);
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineTextStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineTextStrategy.java
index ed5f9bb..387bea2 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineTextStrategy.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateLineTextStrategy.java
@@ -9,6 +9,7 @@
 import org.geotools.feature.SchemaException;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
@@ -18,12 +19,8 @@
 
 public class CreateLineTextStrategy implements CreateFeatureTypeStrategy {
     static final Log logger = LogFactory.getLog(CreateLineTextStrategy.class);
-    GeometryFactory geometryFactory = new GeometryFactory();
+    GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
     TreeMap<String, SimpleFeatureType> typeBuilders = new TreeMap<String, SimpleFeatureType>();
-    static final GeometryConverterDecorator convertDecorator[] = new GeometryConverterDecorator[]{
-        new EPSG3826GeometryConverterDecorator(),
-        new EPSG3825GeometryConverterDecorator()
-    };
 
     // Create the listener list
     protected EventListenerList listenerList = new EventListenerList();
@@ -55,7 +52,7 @@
     }
 
     public SimpleFeature createFeature(SimpleFeatureType featureType, Element element,
-                                 boolean useTransform, boolean useEPSG3826) throws IllegalAttributeException {
+                                 boolean useTransform) throws IllegalAttributeException {
         DefaultColorTable colorTable = (DefaultColorTable) DefaultColorTable.getInstance();
         FrammeAttributeData fLinkage = getFeatureLinkage(element);
         SimpleFeature feature = null;
@@ -64,18 +61,14 @@
             LineStringElement lineStringElement = (LineStringElement) element;
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(lineStringElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(lineStringElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(lineStringElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = lineStringElement.toGeometry(geometryFactory);
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
@@ -95,10 +88,10 @@
             ptEnd.y = ptOrigin.y + txtElement.getTextHeight();
             Coordinate[] vect = new Coordinate[2];
             if (useTransform) {
-                vect[0] = useEPSG3826 ?
+                vect[0] = (FeatureTypeBuilderUtil.getDefaultFeatureSRID() == 3826) ?
                     TWDDatumConverter.fromTM2ToEPSG3826(ptOrigin) :
                     TWDDatumConverter.fromTM2ToEPSG3825(ptOrigin);
-                vect[1] = useEPSG3826 ?
+                vect[1] = FeatureTypeBuilderUtil.getDefaultFeatureSRID() == 3826 ?
                     TWDDatumConverter.fromTM2ToEPSG3826(ptEnd) :
                     TWDDatumConverter.fromTM2ToEPSG3825(ptEnd);
             } else {
@@ -112,6 +105,7 @@
 
             txtElement.getRotationAngle();
 
+            line.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
             feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                 line,
                 fLinkage.getFsc(),
@@ -127,13 +121,9 @@
             ComplexChainElement complexChain = (ComplexChainElement) element;
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(complexChain);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(complexChain);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(complexChain);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = complexChain.toGeometry(geometryFactory);
             }
@@ -149,6 +139,7 @@
                 gobj = geometryFactory.createLineString(coordinateList.toCoordinateArray());
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
@@ -164,16 +155,13 @@
             LineElement lineElement = (LineElement) element;
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(lineElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(lineElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(lineElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = lineElement.toGeometry(geometryFactory);
             }
+            gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
             feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                 gobj,
                 fLinkage.getFsc(),
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateMultiSymbolStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateMultiSymbolStrategy.java
index 0dc2aa4..897d3f0 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateMultiSymbolStrategy.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateMultiSymbolStrategy.java
@@ -4,6 +4,7 @@
 import com.vividsolutions.jts.geom.CoordinateList;
 import com.vividsolutions.jts.geom.Geometry;
 import com.vividsolutions.jts.geom.GeometryFactory;
+import com.vividsolutions.jts.geom.PrecisionModel;
 import com.vividsolutions.jts.util.Assert;
 import com.ximple.eofms.util.*;
 import com.ximple.io.dgn7.*;
@@ -13,6 +14,7 @@
 import org.geotools.feature.SchemaException;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
@@ -25,12 +27,8 @@
 
 public class CreateMultiSymbolStrategy implements CreateFeatureTypeStrategy {
     static final Log logger = LogFactory.getLog(CreateMultiSymbolStrategy.class);
-    GeometryFactory geometryFactory = new GeometryFactory();
+    GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
     TreeMap<String, SimpleFeatureType> typeBuilders = new TreeMap<String, SimpleFeatureType>();
-    static final GeometryConverterDecorator convertDecorator[] = new GeometryConverterDecorator[]{
-        new EPSG3826AnchorGeometryConverterDecorator(),
-        new EPSG3825AnchorGeometryConverterDecorator()
-    };
 
     // Create the listener list
     protected EventListenerList listenerList = new EventListenerList();
@@ -62,7 +60,7 @@
     }
 
     public SimpleFeature createFeature(SimpleFeatureType featureType, Element element,
-                                 boolean useTransform, boolean useEPSG3826) throws IllegalAttributeException {
+                                       boolean useTransform) throws IllegalAttributeException {
         DefaultColorTable colorTable = (DefaultColorTable) DefaultColorTable.getInstance();
         FrammeAttributeData fLinkage = getFeatureLinkage(element);
         SimpleFeature feature = null;
@@ -74,7 +72,7 @@
             String content = txtElement.getText().trim();
             if (content.length() == 0) {
                 logger.info("CreateMultiSymbolStrategy cannot conver " + element.toString() +
-                    "to Feature - getText() is empty.");
+                        "to Feature - getText() is empty.");
                 return null;
             }
             StringBuilder sb = new StringBuilder();
@@ -86,32 +84,29 @@
 
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(txtElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(txtElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(txtElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = txtElement.toGeometry(geometryFactory);
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
-                    gobj,
-                    fLinkage.getFsc(),
-                    (long) fLinkage.getUfid(),
-                    (short) fLinkage.getComponentID(),
-                    fLinkage.getOccID(),
-                    (short) txtElement.getLevelIndex(),
-                    colorTable.getColorCode(txtElement.getColorIndex()),
-                    (short) txtElement.getWeight(),
-                    (short) txtElement.getLineStyle(),
-                    (short) txtElement.getJustification(),
-                    (float) txtElement.getTextHeight(),
-                    (float) txtElement.getTextWidth(),
-                    (float) angle,
-                    sb.toString()
+                        gobj,
+                        fLinkage.getFsc(),
+                        (long) fLinkage.getUfid(),
+                        (short) fLinkage.getComponentID(),
+                        fLinkage.getOccID(),
+                        (short) txtElement.getLevelIndex(),
+                        colorTable.getColorCode(txtElement.getColorIndex()),
+                        (short) txtElement.getWeight(),
+                        (short) txtElement.getLineStyle(),
+                        (short) txtElement.getJustification(),
+                        (float) txtElement.getTextHeight(),
+                        (float) txtElement.getTextWidth(),
+                        (float) angle,
+                        sb.toString()
                 }, null);
         } else if (element instanceof TextNodeElement) {
             TextNodeElement nodeElement = (TextNodeElement) element;
@@ -121,70 +116,70 @@
             angle = BigDecimal.valueOf(angle).setScale(3, RoundingMode.HALF_UP).doubleValue();
             if (nodeElement.size() == 0) {
                 logger.info("CreateMultiSymbolStrategy cannot conver " + element.toString() +
-                    "to Feature - getText() is empty.");
+                        "to Feature - getText() is empty.");
                 return null;
             }
 
-            Iterator<Element> txtElement =  nodeElement.iterator();
+            Iterator<Element> txtElement = nodeElement.iterator();
 
-            while(txtElement.hasNext())
-            {
-             TextElement txtChildElement = (TextElement) element;
-
-              char[] charArray = txtChildElement.getText().toCharArray();
+            while (txtElement.hasNext()) {
+                if (txtElement instanceof TextElement) {
+                    TextElement txtChildElement = (TextElement) element;
+                    char[] charArray = txtChildElement.getText().toCharArray();
 
 
-            if (charArray.length == 0) {
-                logger.info("CreateMultiSymbolStrategy cannot conver " + element.toString() +
-                    "to Feature - getText() is empty.");
-                return null;
-            }
+                    if (charArray.length == 0) {
+                        logger.info("CreateMultiSymbolStrategy cannot conver " + element.toString() +
+                                "to Feature - getText() is empty.");
+                        return null;
+                    }
 
 
-            for(int i = 0  ;  i < charArray.length ; i++)
-            {
+                    for (int i = 0; i < charArray.length; i++) {
 
-            StringBuilder sb = new StringBuilder();
-            sb.append("OCT");
-            char id = charArray[i];
-            sb.append(Integer.toOctalString((int) id));
-            sb.append("-");
-            sb.append(txtChildElement.getFontIndex());
+                        StringBuilder sb = new StringBuilder();
+                        sb.append("OCT");
+                        char id = charArray[i];
+                        sb.append(Integer.toOctalString((int) id));
+                        sb.append("-");
+                        sb.append(txtChildElement.getFontIndex());
 
-            Geometry gobj;
-            if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(txtChildElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
+                        Geometry gobj;
+                        if (useTransform) {
+                            GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                            convertDecorator.setConverter(txtChildElement);
+                            gobj = convertDecorator.toGeometry(geometryFactory);
+                        } else {
+                            gobj = txtChildElement.toGeometry(geometryFactory);
+                        }
+
+                        if (gobj != null)
+                            gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
+                            feature = SimpleFeatureBuilder.build(featureType, new Object[]{
+                                    gobj,
+                                    fLinkage.getFsc(),
+                                    (long) fLinkage.getUfid(),
+                                    (short) fLinkage.getComponentID(),
+                                    fLinkage.getOccID(),
+                                    (short) txtChildElement.getLevelIndex(),
+                                    colorTable.getColorCode(nodeElement.getColorIndex()),
+                                    (short) txtChildElement.getWeight(),
+                                    (short) txtChildElement.getLineStyle(),
+                                    (short) txtChildElement.getJustification(),
+                                    (float) txtChildElement.getTextHeight(),
+                                    (float) txtChildElement.getTextWidth(),
+                                    (float) angle,
+                                    sb.toString()
+                            }, null);
+                    }
                 } else {
-                    convertDecorator[1].setConverter(txtChildElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
+                    logger.info("CreateMultiSymbolStrategy cannot conver " + element.toString() + "to Feature");
+                    return null;
                 }
-            } else {
-                gobj = txtChildElement.toGeometry(geometryFactory);
-            }
-
-            if (gobj != null)
-                feature = SimpleFeatureBuilder.build(featureType, new Object[]{
-                    gobj,
-                    fLinkage.getFsc(),
-                    (long) fLinkage.getUfid(),
-                    (short) fLinkage.getComponentID(),
-                    fLinkage.getOccID(),
-                    (short) txtChildElement.getLevelIndex(),
-                    colorTable.getColorCode(nodeElement.getColorIndex()),
-                    (short) txtChildElement.getWeight(),
-                    (short) txtChildElement.getLineStyle(),
-                    (short) txtChildElement.getJustification(),
-                    (float) txtChildElement.getTextHeight(),
-                    (float) txtChildElement.getTextWidth(),
-                    (float) angle,
-                    sb.toString()
-                }, null);
-            }
             }
         } else {
             logger.info("CreateMultiSymbolStrategy cannot conver " + element.toString() + "to Feature");
+            return null;
         }
         return feature;
     }
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateShapeStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateShapeStrategy.java
index 9ede6b2..795c21b 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateShapeStrategy.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateShapeStrategy.java
@@ -10,6 +10,7 @@
 import org.geotools.feature.SchemaException;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
@@ -19,12 +20,8 @@
 
 public class CreateShapeStrategy implements CreateFeatureTypeStrategy {
     static final Log logger = LogFactory.getLog(CreateShapeStrategy.class);
-    GeometryFactory geometryFactory = new GeometryFactory();
+    GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
     TreeMap<String, SimpleFeatureType> typeBuilders = new TreeMap<String, SimpleFeatureType>();
-    static final GeometryConverterDecorator convertDecorator[] = new GeometryConverterDecorator[]{
-        new EPSG3826GeometryConverterDecorator(),
-        new EPSG3825GeometryConverterDecorator()
-    };
 
     // Create the listener list
     protected EventListenerList listenerList = new EventListenerList();
@@ -56,7 +53,7 @@
     }
 
     public SimpleFeature createFeature(SimpleFeatureType featureType, Element element,
-                                 boolean useTransform, boolean useEPSG3826) throws IllegalAttributeException {
+                                 boolean useTransform) throws IllegalAttributeException {
         DefaultColorTable colorTable = (DefaultColorTable) DefaultColorTable.getInstance();
         FrammeAttributeData fLinkage = getFeatureLinkage(element);
         SimpleFeature feature = null;
@@ -65,18 +62,15 @@
             ShapeElement shapeElement = (ShapeElement) element;
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(shapeElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(shapeElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(shapeElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = shapeElement.toGeometry(geometryFactory);
             }
 
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
@@ -92,17 +86,14 @@
             ComplexShapeElement complexShape = (ComplexShapeElement) element;
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(complexShape);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(complexShape);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(complexShape);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = complexShape.toGeometry(geometryFactory);
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java
index cef2be2..20862bc 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateSymbolStrategy.java
@@ -13,6 +13,7 @@
 import org.geotools.feature.SchemaException;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
@@ -24,12 +25,8 @@
 
 public class CreateSymbolStrategy implements CreateFeatureTypeStrategy {
     static final Log logger = LogFactory.getLog(CreateSymbolStrategy.class);
-    GeometryFactory geometryFactory = new GeometryFactory();
+    GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
     TreeMap<String, SimpleFeatureType> typeBuilders = new TreeMap<String, SimpleFeatureType>();
-    static final GeometryConverterDecorator convertDecorator[] = new GeometryConverterDecorator[]{
-        new EPSG3826GeometryConverterDecorator(),
-        new EPSG3825GeometryConverterDecorator()
-    };
 
     // Create the listener list
     protected EventListenerList listenerList = new EventListenerList();
@@ -61,7 +58,7 @@
     }
 
     public SimpleFeature createFeature(SimpleFeatureType featureType, Element element,
-                                 boolean useTransform, boolean useEPSG3826) throws IllegalAttributeException {
+                                 boolean useTransform) throws IllegalAttributeException {
         DefaultColorTable colorTable = (DefaultColorTable) DefaultColorTable.getInstance();
         FrammeAttributeData fLinkage = getFeatureLinkage(element);
         SimpleFeature feature = null;
@@ -84,17 +81,14 @@
 
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(txtElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(txtElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(txtElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = txtElement.toGeometry(geometryFactory);
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java
index 0ea56d1..f0ddb09 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/CreateTextStrategy.java
@@ -10,6 +10,7 @@
 import org.geotools.feature.SchemaException;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
@@ -21,12 +22,8 @@
 
 public class CreateTextStrategy implements CreateFeatureTypeStrategy {
     static final Log logger = LogFactory.getLog(CreateTextStrategy.class);
-    GeometryFactory geometryFactory = new GeometryFactory();
+    GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
     TreeMap<String, SimpleFeatureType> typeBuilders = new TreeMap<String, SimpleFeatureType>();
-    static final GeometryConverterDecorator convertDecorator[] = new GeometryConverterDecorator[]{
-        new EPSG3826GeometryConverterDecorator(),
-        new EPSG3825GeometryConverterDecorator()
-    };
 
     // Create the listener list
     protected EventListenerList listenerList = new EventListenerList();
@@ -58,7 +55,7 @@
     }
 
     public SimpleFeature createFeature(SimpleFeatureType featureType, Element element,
-                                 boolean useTransform, boolean useEPSG3826) throws IllegalAttributeException {
+                                 boolean useTransform) throws IllegalAttributeException {
         DefaultColorTable colorTable = (DefaultColorTable) DefaultColorTable.getInstance();
         FrammeAttributeData fLinkage = getFeatureLinkage(element);
         SimpleFeature feature = null;
@@ -71,17 +68,14 @@
             content = content.replace('\u0000', ' ');
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(txtElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(txtElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(txtElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = txtElement.toGeometry(geometryFactory);
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
@@ -113,17 +107,14 @@
             angle = BigDecimal.valueOf(angle).setScale(3, RoundingMode.HALF_UP).doubleValue();
             Geometry gobj;
             if (useTransform) {
-                if (useEPSG3826) {
-                    convertDecorator[0].setConverter(nodeElement);
-                    gobj = convertDecorator[0].toGeometry(geometryFactory);
-                } else {
-                    convertDecorator[1].setConverter(nodeElement);
-                    gobj = convertDecorator[1].toGeometry(geometryFactory);
-                }
+                GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
+                convertDecorator.setConverter(nodeElement);
+                gobj = convertDecorator.toGeometry(geometryFactory);
             } else {
                 gobj = nodeElement.toGeometry(geometryFactory);
             }
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     fLinkage.getFsc(),
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java
index 505616d..526f932 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatchableFilter.java
@@ -6,7 +6,7 @@
 public interface ElementDispatchableFilter {
     public boolean isDispatchable(Element element);
 
-    public SimpleFeature execute(Element element, boolean useTransform, boolean useEPSG3826);
+    public SimpleFeature execute(Element element, boolean useTransform);
 
     void setUseLongName(boolean useLongName);
 
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java
index abebbfa..dd0f8b3 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/ElementDispatcher.java
@@ -40,10 +40,10 @@
         }
     }
 
-    public SimpleFeature execute(Element element, boolean useTransform, boolean useEPSG3826) {
+    public SimpleFeature execute(Element element, boolean useTransform) {
         for (ElementDispatchableFilter rule : rules) {
             if (rule.isDispatchable(element)) {
-                return rule.execute(element, useTransform, useEPSG3826);
+                return rule.execute(element, useTransform);
             }
         }
         return null;
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java
index 16298cf..2325cb6 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompIdDispatchableFilter.java
@@ -75,11 +75,11 @@
             (compareType(element) == 0);
     }
 
-    public SimpleFeature execute(Element element, boolean useTransform, boolean useEPSG3826) {
+    public SimpleFeature execute(Element element, boolean useTransform) {
         try {
             String ftName = getFeatureTypeName(element);
             SimpleFeatureType ftype = createStrategy.createFeatureElement(ftName);
-            return createStrategy.createFeature(ftype, element, useTransform, useEPSG3826);
+            return createStrategy.createFeature(ftype, element, useTransform);
         } catch (SchemaException e) {
             logger.error(e.getMessage(), e);
         } catch (IllegalAttributeException e) {
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java
index dde0428..30fb09e 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeCompLevelIdDispatchableFilter.java
@@ -85,11 +85,11 @@
             (lid == element.getLevelIndex()) && (compareLevel(element) == 0);
     }
 
-    public SimpleFeature execute(Element element, boolean useTransform, boolean useEPSG3826) {
+    public SimpleFeature execute(Element element, boolean useTransform) {
         try {
             String ftName = getFeatureTypeName(element);
             SimpleFeatureType ftype = createStrategy.createFeatureElement(ftName);
-            return createStrategy.createFeature(ftype, element, useTransform, useEPSG3826);
+            return createStrategy.createFeature(ftype, element, useTransform);
         } catch (SchemaException e) {
             logger.error(e.getMessage(), e);
         } catch (IllegalAttributeException e) {
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java
index d83ffc8..1a49206 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/filter/TypeIdDispatchableFilter.java
@@ -53,11 +53,11 @@
             (compareType(element) == 0);
     }
 
-    public SimpleFeature execute(Element element, boolean useTransform, boolean useEPSG3826) {
+    public SimpleFeature execute(Element element, boolean useTransform) {
         try {
             String ftName = getFeatureTypeName(element);
             SimpleFeatureType ftype = createStrategy.createFeatureElement(ftName);
-            return createStrategy.createFeature(ftype, element, useTransform, useEPSG3826);
+            return createStrategy.createFeature(ftype, element, useTransform);
         } catch (SchemaException e) {
             logger.error(e.getMessage(), e);
         } catch (IllegalAttributeException e) {
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java
index 86f3fc9..d941a3f 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/AbstractOracleDatabaseJob.java
@@ -11,6 +11,7 @@
 import java.util.StringTokenizer;
 import java.util.TreeMap;
 
+import com.ximple.eofms.util.FeatureTypeBuilderUtil;
 import org.apache.commons.logging.Log;
 import org.geotools.data.DataStore;
 import org.geotools.data.oracle.OracleDataStore;
@@ -54,7 +55,7 @@
     private static final String TESTCOUNT = "TESTCOUNT";
     private static final String COPYCONNECTIVITYMODE = "COPYCONNECTIVITYMODE";
     private static final String PROFILEMODE = "PROFILEMODE";
-    private static final String USEEPSG3826 = "USEEPSG3826";
+    private static final String USEZONE121 = "USEZONE121";
 
     protected static OracleDataStoreFactory dataStoreFactory = new OracleDataStoreFactory();
 
@@ -74,7 +75,7 @@
     protected boolean _testMode = false;
     protected boolean _copyConnectivityMode = false;
     protected boolean _profileMode = false;
-    protected boolean _useEPSG3826 = true;
+    protected boolean _useZone121 = true;
     protected boolean _useTransform = true;
 
     protected int _testCount = -1;
@@ -140,7 +141,12 @@
         _testCount = dataMap.getIntFromString(TESTCOUNT);
         _copyConnectivityMode = dataMap.getBooleanFromString(COPYCONNECTIVITYMODE);
         _profileMode = dataMap.getBooleanFromString(PROFILEMODE);
-        _useEPSG3826 = dataMap.getBooleanFromString(USEEPSG3826);
+        _useZone121 = dataMap.getBooleanFromString(USEZONE121);
+        if (_useZone121) {
+            FeatureTypeBuilderUtil.setDefaultFeatureSRID(3826);
+        } else {
+            FeatureTypeBuilderUtil.setDefaultFeatureSRID(3825);
+        }
 
         // Validate the required input
         if (_dataPath == null) {
@@ -183,8 +189,7 @@
     }
 
     protected abstract AbstractOracleJobContext prepareJobContext(String targetSchemaName, String filterPath,
-                                                                  boolean profileMode,
-                                                                  boolean useTransform, boolean useEPSG3826);
+                                                                  boolean profileMode, boolean useTransform);
 
     protected byte[] getBytesFromBLOB(BLOB blob) throws SQLException, BufferOverflowException {
         byte[] raw = null;
@@ -340,8 +345,8 @@
         return _useTransform;
     }
 
-    public boolean isEPSG3826() {
-        return _useEPSG3826;
+    public boolean isZone121() {
+        return _useZone121;
     }
 
     public DataStore getSourceDataStore() {
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java
index b144586..7b80d8c 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/DummyFeatureConvertJobContext.java
@@ -46,7 +46,6 @@
 public class DummyFeatureConvertJobContext extends AbstractDgnFileJobContext {
     static final Log logger = LogFactory.getLog(DummyFeatureConvertJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
     static final String SHPOUTPATH = "shpout";
 
     private String dataOut = null;
@@ -60,8 +59,8 @@
     private String _filterConfig;
 
     public DummyFeatureConvertJobContext(String dataPath, String filterConfig, boolean profileMode,
-                                         boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, profileMode, useTransform, useEPSG3826);
+                                         boolean useTransform) {
+        super(dataPath, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
         _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
@@ -109,7 +108,7 @@
             return;
         }
 
-        SimpleFeature feature = elementDispatcher.execute(element, isTransformed(), isEPSG3826());
+        SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             FrammeAttributeData linkage =
                 AbstractFLinkageDispatchableFilter.getFeatureLinkage(element);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java
index 79f88f0..aa58315 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2MySQLJob.java
@@ -85,7 +85,6 @@
 
     protected static MySQLDataStoreFactory dataStoreFactory = new MySQLDataStoreFactory();
 
-    GeometryFactory _geomFactory = new GeometryFactory();
     protected String _myHost;
     protected String _myDatabase;
     protected String _myPort;
@@ -102,9 +101,9 @@
     }
 
     protected AbstractOracleJobContext prepareJobContext(String targetSchemaName, String filterPath, boolean profileMode,
-                                                         boolean useTransform, boolean useEPSG3826) {
+                                                         boolean useTransform) {
         return new OracleConvertMySQLJobContext(getDataPath(), getTargetDataStore(), filterPath, profileMode,
-                                                useTransform, useEPSG3826);
+                                                useTransform);
     }
 
     protected void extractJobConfiguration(JobDetail jobDetail) throws JobExecutionException {
@@ -200,7 +199,7 @@
                 for (String orgSchema : _orgSchema) {
                     OracleConvertMySQLJobContext jobContext =
                         (OracleConvertMySQLJobContext) prepareJobContext(targetSchemaName, _filterPath,
-                                                                         isProfileMode(), isTransformed(), isEPSG3826());
+                                                                         isProfileMode(), isTransformed());
                     jobContext.setSourceDataStore(getSourceDataStore());
                     // jobContext.setConvertElementIn(_convertElementIn);
                     jobContext.setElementLogging(checkElementLogging());
@@ -564,7 +563,7 @@
         for (File dgnFile : dgnFiles) {
             IndexDgnConvertMySQLJobContext convertContext =
                 new IndexDgnConvertMySQLJobContext(getDataPath(), getTargetDataStore(), isProfileMode(),
-                                                   isTransformed(), isEPSG3826());
+                                                   isTransformed());
             logger.debug("--- start dgnfile-" + dgnFile.toString() + " ---");
             try {
                 convertContext.setExecutionContext(context);
@@ -680,7 +679,7 @@
         for (File dgnFile : dgnFiles) {
             GeneralDgnConvertMySQLJobContext convertContext =
                 new GeneralDgnConvertMySQLJobContext(getDataPath(), getTargetDataStore(), isProfileMode(),
-                                                     isTransformed(), isEPSG3826());
+                                                     isTransformed());
             logger.info("--- start dgnfile-" + dgnFile.toString() + " ---");
             try {
                 convertContext.setExecutionContext(context);
@@ -831,7 +830,7 @@
         for (File dgnFile : dgnFiles) {
             FeatureDgnConvertMySQLJobContext convertContext =
                 new FeatureDgnConvertMySQLJobContext(getDataPath(), getTargetDataStore(), _filterPath, isProfileMode(),
-                                                     isTransformed(), isEPSG3826());
+                                                     isTransformed());
             logger.info("--- start dgnfile-" + dgnFile.toString() + " ---");
             try {
                 convertContext.setExecutionContext(context);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java
index 6dec3e7..7b48d35 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2OraSDOJob.java
@@ -86,7 +86,6 @@
 
     protected static OracleDataStoreFactory dataStoreFactory = new OracleDataStoreFactory();
 
-    GeometryFactory _geomFactory = new GeometryFactory();
     protected String _sdoHost;
     protected String _sdoDatabase;
     protected String _sdoPort;
@@ -103,9 +102,9 @@
     }
 
     protected AbstractOracleJobContext prepareJobContext(String targetSchemaName, String filterPath,
-                                                         boolean profileMode, boolean useTransform, boolean useEPSG3826) {
+                                                         boolean profileMode, boolean useTransform) {
         return new OracleConvertOraSDOJobContext(getDataPath(), getTargetDataStore(), filterPath, profileMode,
-                                                 useTransform, useEPSG3826);
+                                                 useTransform);
     }
 
     protected void extractJobConfiguration(JobDetail jobDetail) throws JobExecutionException {
@@ -201,8 +200,7 @@
                 for (String orgSchema : _orgSchema) {
                     OracleConvertOraSDOJobContext jobContext =
                         (OracleConvertOraSDOJobContext) prepareJobContext(targetSchemaName, _filterPath,
-                                                                          isProfileMode(),
-                                                                          isTransformed(), isEPSG3826());
+                                                                          isProfileMode(), isTransformed());
                     jobContext.setSourceDataStore(getSourceDataStore());
                     // jobContext.setConvertElementIn(_convertElementIn);
                     jobContext.setElementLogging(checkElementLogging());
@@ -567,7 +565,7 @@
         for (File dgnFile : dgnFiles) {
             IndexDgnConvertOraSDOJobContext convertContext =
                 new IndexDgnConvertOraSDOJobContext(getDataPath(), getTargetDataStore(), isProfileMode(),
-                                                    isTransformed(), isEPSG3826());
+                                                    isTransformed());
             logger.debug("--- start dgnfile-" + dgnFile.toString() + " ---");
             try {
                 convertContext.setExecutionContext(context);
@@ -683,7 +681,7 @@
         for (File dgnFile : dgnFiles) {
             GeneralDgnConvertOraSDOJobContext convertContext =
                 new GeneralDgnConvertOraSDOJobContext(getDataPath(), getTargetDataStore(), isProfileMode(),
-                                                      isTransformed(), isEPSG3826());
+                                                      isTransformed());
             logger.info("--- start dgnfile-" + dgnFile.toString() + " ---");
             try {
                 convertContext.setExecutionContext(context);
@@ -834,7 +832,7 @@
         for (File dgnFile : dgnFiles) {
             FeatureDgnConvertOraSDOJobContext convertContext =
                 new FeatureDgnConvertOraSDOJobContext(getDataPath(), getTargetDataStore(), _filterPath, isProfileMode(),
-                                                      isTransformed(), isEPSG3826());
+                                                      isTransformed());
             logger.info("--- start dgnfile-" + dgnFile.toString() + " ---");
             try {
                 convertContext.setExecutionContext(context);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java
index 4d5a258..d713440 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2PostGISJob.java
@@ -39,8 +39,6 @@
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 
-import com.vividsolutions.jts.geom.GeometryFactory;
-
 import oracle.jdbc.OracleConnection;
 import oracle.jdbc.OracleResultSet;
 import oracle.sql.ARRAY;
@@ -62,8 +60,6 @@
 import com.ximple.io.dgn7.ElementType;
 import com.ximple.io.dgn7.IElementHandler;
 import com.ximple.io.dgn7.Lock;
-import com.ximple.io.dgn7.ShapeElement;
-import com.ximple.io.dgn7.TextElement;
 import com.ximple.util.PrintfFormat;
 
 public class OracleConvertDgn2PostGISJob extends AbstractOracleDatabaseJob {
@@ -96,7 +92,6 @@
 
     protected static PostgisDataStoreFactory dataStoreFactory = new PostgisDataStoreFactory();
 
-    GeometryFactory _geomFactory = new GeometryFactory();
     protected String _pgHost;
     protected String _pgDatabase;
     protected String _pgPort;
@@ -118,9 +113,9 @@
 
     protected AbstractOracleJobContext prepareJobContext(String targetSchemaName, String filterPath,
                                                          boolean profileMode,
-                                                         boolean useTransform, boolean useEPSG3826) {
+                                                         boolean useTransform) {
         return new OracleConvertPostGISJobContext(getDataPath(),
-                                                  getTargetDataStore(), targetSchemaName, filterPath, profileMode, useTransform, useEPSG3826);
+                                                  getTargetDataStore(), targetSchemaName, filterPath, profileMode, useTransform);
     }
 
     protected void extractJobConfiguration(JobDetail jobDetail) throws JobExecutionException {
@@ -239,13 +234,13 @@
 
                 OracleConvertPostGISJobContext jobContext =
                     (OracleConvertPostGISJobContext) prepareJobContext(targetSchemaName, _filterPath,
-                                                                       isProfileMode(), isTransformed(), isEPSG3826());
+                                                                       isProfileMode(), isTransformed());
                 jobContext.setSourceDataStore(getSourceDataStore());
                 // jobContext.setConvertElementIn(_convertElementIn);
                 jobContext.setElementLogging(checkElementLogging());
                 jobContext.setExecutionContext(context);
                 
-                CreateHibernateSequence(jobContext);
+                createHibernateSequence(jobContext);
 
                 long tStep = System.currentTimeMillis();
 
@@ -389,7 +384,7 @@
     }
 
 
-        private void CreateHibernateSequence(OracleConvertPostGISJobContext jobContext) throws SQLException {
+        private void createHibernateSequence(OracleConvertPostGISJobContext jobContext) throws SQLException {
         Connection connection = jobContext.getOracleConnection();
 
         try {
@@ -398,7 +393,7 @@
             stmt.close();
         } catch (SQLException e)
         {
-            logger.warn("HIBERNATE_SEQUENCE �w�g�s�b");       
+            logger.warn("HIBERNATE_SEQUENCE is already exist.");       
         }
     }
 
@@ -732,7 +727,7 @@
             if (dgnFile.isDirectory()) continue;
             IndexDgnConvertPostGISJobContext convertContext =
                 new IndexDgnConvertPostGISJobContext(getDataPath(), getTargetDataStore(), targetSchemaName,
-                                                     isProfileMode(), isTransformed(), isEPSG3826());
+                                                     isProfileMode(), isTransformed());
             logger.info("--- start index dgnfile-" + dgnFile.toString() + " ---");
             FileInputStream fs = null;
             FileChannel fc = null;
@@ -891,7 +886,7 @@
 
             GeneralDgnConvertPostGISJobContext convertContext =
                 new GeneralDgnConvertPostGISJobContext(getDataPath(), getTargetDataStore(), targetSchemaName,
-                                                       isProfileMode(), isTransformed(), isEPSG3826());
+                                                       isProfileMode(), isTransformed());
             logger.info("--- start other dgnfile-" + dgnFile.toString() + " ---");
             FileInputStream fs = null;
             FileChannel fc;
@@ -1074,7 +1069,7 @@
         for (File dgnFile : dgnFiles) {
             FeatureDgnConvertPostGISJobContext convertContext =
                 new FeatureDgnConvertPostGISJobContext(getDataPath(), getTargetDataStore(), targetSchemaName, _filterPath,
-                                                       isProfileMode(), isTransformed(), isEPSG3826());
+                                                       isProfileMode(), isTransformed());
             logger.info("--- start dgnfile-" + dgnFile.toString() + " ---");
             try {
                 convertContext.setExecutionContext(context);
@@ -1312,7 +1307,7 @@
 
             sql = new StringBuilder("ALTER TABLE ");
             sql.append(encodeSchemaTableName(pgSchema, DataReposVersionManager.XGVERSIONTABLE_NAME));
-            sql.append(" OWNER TO spatialdb");
+            sql.append(" OWNER TO ").append(_pgUsername);
             stmt.executeUpdate(sql.toString());
 
             sql = new StringBuilder("GRANT ALL ON TABLE ");
@@ -1381,7 +1376,7 @@
 
             StringBuilder sbSQL = new StringBuilder("CREATE SCHEMA ");
             sbSQL.append(s).append(' ');
-            sbSQL.append("AUTHORIZATION spatialdb");
+            sbSQL.append("AUTHORIZATION ").append(_pgUsername);
             stmt = connection.createStatement();
             stmt.executeUpdate(sbSQL.toString());
 
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java
index fa84b51..35251ae 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleConvertDgn2ShpJob.java
@@ -72,15 +72,13 @@
         }
     }
 
-    GeometryFactory _geomFactory = new GeometryFactory();
-
     public Log getLogger() {
         return logger;
     }
 
     protected AbstractOracleJobContext prepareJobContext(String targetSchemaName, String filterPath,
-                                                         boolean profileMode, boolean useTransform, boolean useEPSG3826) {
-        return new OracleConvertShapefilesJobContext(filterPath, profileMode, useTransform, useEPSG3826);
+                                                         boolean profileMode, boolean useTransform) {
+        return new OracleConvertShapefilesJobContext(filterPath, profileMode, useTransform);
     }
 
     protected void extractJobConfiguration(JobDetail jobDetail) throws JobExecutionException {
@@ -113,7 +111,7 @@
 
                 for (String orgSchema : _orgSchema) {
                     OracleConvertShapefilesJobContext jobContext = (OracleConvertShapefilesJobContext)
-                        prepareJobContext(targetSchemaName, _filterPath, isProfileMode(), isTransformed(), isEPSG3826());
+                        prepareJobContext(targetSchemaName, _filterPath, isProfileMode(), isTransformed());
                     jobContext.setSourceDataStore(getSourceDataStore());
                     jobContext.setDataPath(_dataPath);
                     jobContext.setConvertElementIn(_convertElementIn);
@@ -475,7 +473,7 @@
 
         for (File dgnFile : dgnFiles) {
             IndexDgnConvertShpJobContext convertContext = new IndexDgnConvertShpJobContext(getDataPath(), isProfileMode(),
-                                                                                           isTransformed(), isEPSG3826());
+                                                                                           isTransformed());
             logger.debug("--- start dgnfile-" + dgnFile.toString() + " ---");
             try {
                 convertContext.setExecutionContext(context);
@@ -591,8 +589,7 @@
         for (File dgnFile : dgnFiles) {
             GeneralDgnConvertShpJobContext convertContext = new GeneralDgnConvertShpJobContext(getDataPath(),
                                                                                                isProfileMode(),
-                                                                                               isTransformed(),
-                                                                                               isEPSG3826());
+                                                                                               isTransformed());
             logger.info("--- start dgnfile-" + dgnFile.toString() + " ---");
             try {
                 convertContext.setExecutionContext(context);
@@ -739,8 +736,7 @@
         for (File dgnFile : dgnFiles) {
             FeatureDgnConvertShpJobContext convertContext = new FeatureDgnConvertShpJobContext(getDataPath(), _filterPath,
                                                                                                isProfileMode(),
-                                                                                               isTransformed(),
-                                                                                               isEPSG3826());
+                                                                                               isTransformed());
             logger.info("--- start dgnfile-" + dgnFile.toString() + " ---");
             try {
                 convertContext.setExecutionContext(context);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java
index 787b72b..34956a6 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/OracleUpgradeBlob2UDTJob.java
@@ -36,7 +36,7 @@
         }
 
         AbstractOracleJobContext jobContext = prepareJobContext(targetSchemaName, _filterPath, isProfileMode(),
-                                                                isTransformed(), isEPSG3826());
+                                                                isTransformed());
         jobContext.setSourceDataStore(getSourceDataStore());
 
         try {
@@ -54,8 +54,8 @@
 
     protected AbstractOracleJobContext prepareJobContext(String targetSchemaName, String filterPath,
                                                          boolean profileMode,
-                                                         boolean useTransform, boolean useEPSG3826) {
-        return new OracleUpgradeJobContext(profileMode, useTransform, useEPSG3826);
+                                                         boolean useTransform) {
+        return new OracleUpgradeJobContext(profileMode, useTransform);
     }
 
     private void exetcuteConvert(AbstractOracleJobContext jobContext,
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractDgnFileJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractDgnFileJobContext.java
index 211ed1b..e1abbd2 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractDgnFileJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractDgnFileJobContext.java
@@ -25,7 +25,6 @@
     private boolean _elementLogging;
     private boolean _profileMode = false;
     private boolean _useTransform = true;
-    private boolean _useEPSG3826 = true;
 
     private long _processTime;
     private long _updateTime;
@@ -35,11 +34,10 @@
 // --------------------------- CONSTRUCTORS ---------------------------
 
     public AbstractDgnFileJobContext(String dataPath, boolean profileMode,
-                                     boolean useTransform, boolean useEPSG3826) {
+                                     boolean useTransform) {
         _dataPath = dataPath;
         _profileMode = profileMode;
         _useTransform = useTransform;
-        _useEPSG3826 = useEPSG3826;
     }
 
 // --------------------- GETTER / SETTER METHODS ---------------------
@@ -74,10 +72,6 @@
 
     public boolean isTransformed() {
         return _useTransform;
-    }
-
-    public boolean isEPSG3826() {
-        return _useEPSG3826;
     }
 
 // -------------------------- OTHER METHODS --------------------------
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java
index f44c3b5..408aeab 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/AbstractOracleJobContext.java
@@ -256,17 +256,15 @@
     private Connection connection = null;
     private boolean profileMode;
     private boolean useTransform;
-    private boolean useEPSG3826;
 
     private long _processTime;
     private long _updateTime;
     private long _processTimeStart;
     private long _updateTimeStart;
 
-    public AbstractOracleJobContext(boolean profileMode, boolean useTransform, boolean useEPSG3826) {
+    public AbstractOracleJobContext(boolean profileMode, boolean useTransform) {
         this.profileMode = profileMode;
         this.useTransform = useTransform;
-        this.useEPSG3826 = useEPSG3826;
     }
 
     public OracleDataStore getSourceDataStore() {
@@ -333,10 +331,6 @@
 
     public boolean isTransformed() {
         return useTransform;
-    }
-
-    public boolean isEPSG3826() {
-        return useEPSG3826;
     }
 
     public final void accumulateProcessTime() {
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleUpgradeJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleUpgradeJobContext.java
index 34c5f10..12722c3 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleUpgradeJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/OracleUpgradeJobContext.java
@@ -3,8 +3,8 @@
 import org.apache.commons.logging.Log;
 
 public class OracleUpgradeJobContext extends AbstractOracleJobContext {
-    public OracleUpgradeJobContext(boolean profileMode, boolean useTransform, boolean useEPSG3826) {
-        super(profileMode, useTransform, useEPSG3826);
+    public OracleUpgradeJobContext(boolean profileMode, boolean useTransform) {
+        super(profileMode, useTransform);
     }
 
     public void startTransaction() {
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractDgnToMySQLJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractDgnToMySQLJobContext.java
index 1ba6901..fbc8c44 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractDgnToMySQLJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractDgnToMySQLJobContext.java
@@ -15,8 +15,8 @@
     protected MySQLDataStore targetDataStore;
 
     public AbstractDgnToMySQLJobContext(String dataPath, DataStore targetDataStore, boolean profileMode,
-                                        boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, profileMode, useTransform, useEPSG3826);
+                                        boolean useTransform) {
+        super(dataPath, profileMode, useTransform);
         this.targetDataStore = (MySQLDataStore) targetDataStore;
     }
 
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractOracleToMySQLJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractOracleToMySQLJobContext.java
index bc7f721..e901bd5 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractOracleToMySQLJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/AbstractOracleToMySQLJobContext.java
@@ -15,8 +15,8 @@
     protected MySQLDataStore targetDataStore;
 
     public AbstractOracleToMySQLJobContext(String dataPath, DataStore targetDataStore, boolean profileMode,
-                                           boolean useTransform, boolean useEPSG3826) {
-        super(profileMode, useTransform, useEPSG3826);
+                                           boolean useTransform) {
+        super(profileMode, useTransform);
         if ((targetDataStore != null) && (targetDataStore instanceof MySQLDataStore)) {
             this.targetDataStore = (MySQLDataStore) targetDataStore;
         } else {
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java
index 3842334..750b695 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/DummyFeatureConvertMySQlJobContext.java
@@ -42,7 +42,6 @@
 public class DummyFeatureConvertMySQlJobContext extends AbstractDgnToMySQLJobContext {
     static final Log logger = LogFactory.getLog(DummyFeatureConvertMySQlJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
     static final String SHPOUTPATH = "shpout";
 
     private String dataOut = null;
@@ -57,8 +56,8 @@
     private boolean withIndex = false;
 
     public DummyFeatureConvertMySQlJobContext(String dataPath, DataStore targetDataStore, String filterConfig,
-                                              boolean profileMode, boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, targetDataStore, profileMode, useTransform, useEPSG3826);
+                                              boolean profileMode, boolean useTransform) {
+        super(dataPath, targetDataStore, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
         _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
@@ -106,7 +105,7 @@
             return;
         }
 
-        SimpleFeature feature = elementDispatcher.execute(element, isTransformed(), isEPSG3826());
+        SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             FrammeAttributeData linkage =
                     AbstractFLinkageDispatchableFilter.getFeatureLinkage(element);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java
index 35eff29..72465b9 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/FeatureDgnConvertMySQLJobContext.java
@@ -38,7 +38,6 @@
 public class FeatureDgnConvertMySQLJobContext extends AbstractDgnToMySQLJobContext {
     static final Log logger = LogFactory.getLog(FeatureDgnConvertMySQLJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
 
     private HashMap<String, ArrayList<SimpleFeature>> featuresContext = new HashMap<String, ArrayList<SimpleFeature>>();
     private HashMap<String, FeatureWriter> featuresWriterContext = new HashMap<String, FeatureWriter>();
@@ -50,8 +49,8 @@
     private boolean withIndex = false;
 
     public FeatureDgnConvertMySQLJobContext(String dataPath, DataStore targetDataStore, String filterConfig,
-                                            boolean profileMode, boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, targetDataStore, profileMode, useTransform, useEPSG3826);
+                                            boolean profileMode, boolean useTransform) {
+        super(dataPath, targetDataStore, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
         _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
@@ -100,7 +99,7 @@
         }
 
         // �P�_�O�_�ũM���
-        SimpleFeature feature = elementDispatcher.execute(element, isTransformed(), isEPSG3826());
+        SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             FrammeAttributeData linkage =
                 AbstractFLinkageDispatchableFilter.getFeatureLinkage(element);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/GeneralDgnConvertMySQLJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/GeneralDgnConvertMySQLJobContext.java
index 2db1e83..d4c0e97 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/GeneralDgnConvertMySQLJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/GeneralDgnConvertMySQLJobContext.java
@@ -42,13 +42,14 @@
 import com.ximple.io.dgn7.UserAttributeData;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
 public class GeneralDgnConvertMySQLJobContext extends AbstractDgnToMySQLJobContext {
     static final Log logger = LogFactory.getLog(GeneralDgnConvertMySQLJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
+    static final GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
 
     private String dataOut = null;
 
@@ -58,18 +59,13 @@
     private PessimisticMapWrapper txFeaturesContext;
     private TreeMap<String, SimpleFeatureType> featureTypes = new TreeMap<String, SimpleFeatureType>();
 
-    private GeometryConverterDecorator convertDecorator = null;
     private String featureBaseName = null;
     private boolean withIndex = false;
 
     public GeneralDgnConvertMySQLJobContext(String dataPath, DataStore targetDataStore, boolean profileMode,
-                                            boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, targetDataStore, profileMode, useTransform, useEPSG3826);
+                                            boolean useTransform) {
+        super(dataPath, targetDataStore, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
-        if (isEPSG3826())
-            convertDecorator = new EPSG3826GeometryConverterDecorator();
-        else
-            convertDecorator = new EPSG3825GeometryConverterDecorator();
     }
 
     public void putFeatureCollection(Element element) throws IllegalAttributeException, SchemaException {
@@ -221,6 +217,7 @@
 
     public SimpleFeature createFeature(SimpleFeatureType featureType, Element element) throws IllegalAttributeException {
         DefaultColorTable colorTable = (DefaultColorTable) DefaultColorTable.getInstance();
+        GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
         if (element instanceof TextElement) {
             TextElement textElement = (TextElement) element;
             convertDecorator.setConverter(textElement);
@@ -230,6 +227,7 @@
             String content = textElement.getText();
             angle = BigDecimal.valueOf(angle).setScale(3, RoundingMode.HALF_UP).doubleValue();
             if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(textElement.getColorIndex()),
@@ -260,6 +258,7 @@
             }
 
             if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(textNodeElement.getColorIndex()),
@@ -279,6 +278,7 @@
             convertDecorator.setConverter(shapeElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
             if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(shapeElement.getColorIndex()),
@@ -293,25 +293,29 @@
             LineStringElement linestring = (LineStringElement) element;
             convertDecorator.setConverter(linestring);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(linestring.getColorIndex()),
                     linestring.getWeight(),
                     linestring.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof LineElement) {
             LineElement line = (LineElement) element;
             convertDecorator.setConverter(line);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(line.getColorIndex()),
                     line.getWeight(),
                     line.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof ArcElement) {
             ArcElement arcElement = (ArcElement) element;
@@ -322,37 +326,43 @@
             */
             convertDecorator.setConverter(arcElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(arcElement.getColorIndex()),
                     arcElement.getWeight(),
                     arcElement.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof EllipseElement) {
             EllipseElement arcElement = (EllipseElement) element;
             convertDecorator.setConverter(arcElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(arcElement.getColorIndex()),
                     arcElement.getWeight(),
                     arcElement.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof ComplexChainElement) {
             ComplexChainElement complexChainElement = (ComplexChainElement) element;
             convertDecorator.setConverter(complexChainElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(complexChainElement.getColorIndex()),
                     complexChainElement.getWeight(),
                     complexChainElement.getLineStyle()
                 }, null);
+            }
             return null;
         }
         return null;
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/IndexDgnConvertMySQLJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/IndexDgnConvertMySQLJobContext.java
index 6a952c0..278197c 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/IndexDgnConvertMySQLJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/IndexDgnConvertMySQLJobContext.java
@@ -38,15 +38,14 @@
 import com.ximple.io.dgn7.UserAttributeData;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
 public class IndexDgnConvertMySQLJobContext extends AbstractDgnToMySQLJobContext {
     static final Log logger = LogFactory.getLog(IndexDgnConvertMySQLJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
-
-    protected GeometryConverterDecorator convertDecorator;
+    static final GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
 
     private HashMap<String, ArrayList<SimpleFeature>> featuresContext = new HashMap<String, ArrayList<SimpleFeature>>();
     private HashMap<String, FeatureWriter> featuresWriterContext = new HashMap<String, FeatureWriter>();
@@ -59,14 +58,9 @@
     private SimpleFeatureType featureType3 = null;
 
     public IndexDgnConvertMySQLJobContext(String dataPath, DataStore targetDataStore, boolean profileMode,
-                                          boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, targetDataStore, profileMode, useTransform, useEPSG3826);
+                                          boolean useTransform) {
+        super(dataPath, targetDataStore, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
-        if (isEPSG3826()) {
-            convertDecorator = new EPSG3826GeometryConverterDecorator();
-        } else {
-            convertDecorator = new EPSG3825GeometryConverterDecorator();
-        }
     }
 
     public void putFeatureCollection(Element element) throws IllegalAttributeException, SchemaException {
@@ -195,7 +189,7 @@
             String tpclid = textElement.getText();
 
             Envelope extent = TPCLIDConverter.convertTpclIdToEnvelope(tpclid);
-            Geometry geom = (isEPSG3826() ?
+            Geometry geom = (FeatureTypeBuilderUtil.getDefaultFeatureSRID() == 3826 ?
                 geometryFactory.createLinearRing(new Coordinate[]
                     {
                         TWDDatumConverter.fromTM2ToEPSG3826(new Coordinate(extent.getMinX(), extent.getMinY())),
@@ -213,6 +207,7 @@
                         TWDDatumConverter.fromTM2ToEPSG3825(new Coordinate(extent.getMinX(), extent.getMinY())),
                     }));
 
+            geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
             return SimpleFeatureBuilder.build(featureType, new Object[]{
                 geom,
                 extent.getMinX(),
@@ -234,9 +229,12 @@
             TextElement txtElement = (TextElement) element;
             double angle = txtElement.getRotationAngle();
             angle = BigDecimal.valueOf(angle).setScale(3, RoundingMode.HALF_UP).doubleValue();
+            GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
             convertDecorator.setConverter(txtElement);
+            Geometry geom = convertDecorator.toGeometry(geometryFactory);
+            geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
             SimpleFeature feature = SimpleFeatureBuilder.build(featureType, new Object[]{
-                convertDecorator.toGeometry(geometryFactory),
+                geom,
                 colorTable.getColorCode(txtElement.getColorIndex()),
                 txtElement.getWeight(),
                 txtElement.getLineStyle(),
@@ -265,7 +263,7 @@
                 int dx = (i % 2) * TPCLIDConverter.SX600;
                 int dy = (i / 2) * TPCLIDConverter.SY600;
 
-                Geometry geom = (isEPSG3826() ?
+                Geometry geom = (FeatureTypeBuilderUtil.getDefaultFeatureSRID() == 3826 ?
                     geometryFactory.createPolygon(geometryFactory.createLinearRing(new Coordinate[]
                         {
                             TWDDatumConverter.fromTM2ToEPSG3826(new Coordinate(
@@ -293,6 +291,7 @@
                                 extent.getMinX() + dx, extent.getMaxY() - TPCLIDConverter.SY600 - dy)),
                         }), null));
 
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 result[i] = SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     extent.getMinX(),
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java
index ca621e3..7815432 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/mysql/OracleConvertMySQLJobContext.java
@@ -69,8 +69,8 @@
     // private String _convertElementIn = null;
 
     public OracleConvertMySQLJobContext(String dataPath, DataStore oraDS, String filterConfig, boolean profileMode,
-                                        boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, oraDS, profileMode, useTransform, useEPSG3826);
+                                        boolean useTransform) {
+        super(dataPath, oraDS, profileMode, useTransform);
         _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
@@ -113,7 +113,7 @@
     public void putFeatureCollection(Element element) {
         assert elementDispatcher != null;
         // �P�_�O�_�ũM���
-        SimpleFeature feature = elementDispatcher.execute(element, isTransformed(), isEPSG3826());
+        SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             boolean isEmptySize = false;
             FrammeAttributeData linkage =
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractDgnToOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractDgnToOraSDOJobContext.java
index a7ee988..2647b46 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractDgnToOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractDgnToOraSDOJobContext.java
@@ -15,8 +15,8 @@
     protected OracleDataStore targetDataStore;
 
     public AbstractDgnToOraSDOJobContext(String dataPath, DataStore targetDataStore, boolean profileMode,
-                                         boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, profileMode, useTransform, useEPSG3826);
+                                         boolean useTransform) {
+        super(dataPath, profileMode, useTransform);
         this.targetDataStore = (OracleDataStore) targetDataStore;
     }
 
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractOracleToOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractOracleToOraSDOJobContext.java
index e4fbddb..dec4d5d 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractOracleToOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/AbstractOracleToOraSDOJobContext.java
@@ -16,8 +16,8 @@
     protected OracleDataStore targetDataStore;
 
     public AbstractOracleToOraSDOJobContext(String dataPath, DataStore targetDataStore, boolean profileMode,
-                                            boolean useTransform, boolean useEPSG3826) {
-        super(profileMode, useTransform, useEPSG3826);
+                                            boolean useTransform) {
+        super(profileMode, useTransform);
         if ((targetDataStore != null) && (targetDataStore instanceof OracleDataStore)) {
             this.targetDataStore = (OracleDataStore) targetDataStore;
         } else {
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java
index 0889606..1ba19b3 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/DummyFeatureConvertOraSDOJobContext.java
@@ -22,6 +22,7 @@
 import org.geotools.data.Transaction;
 import org.geotools.feature.IllegalAttributeException;
 import org.geotools.feature.SchemaException;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.xml.sax.SAXException;
@@ -42,7 +43,6 @@
 public class DummyFeatureConvertOraSDOJobContext extends AbstractDgnToOraSDOJobContext {
     static final Log logger = LogFactory.getLog(DummyFeatureConvertOraSDOJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
     static final String SHPOUTPATH = "shpout";
 
     private String dataOut = null;
@@ -57,8 +57,8 @@
     private boolean withIndex = false;
 
     public DummyFeatureConvertOraSDOJobContext(String dataPath, DataStore targetDataStore, String filterConfig,
-                                               boolean profileMode, boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, targetDataStore, profileMode, useTransform, useEPSG3826);
+                                               boolean profileMode, boolean useTransform) {
+        super(dataPath, targetDataStore, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
         _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
@@ -107,7 +107,7 @@
         }
 
         // �P�_�O�_�ũM���
-        SimpleFeature feature = elementDispatcher.execute(element, isTransformed(), isEPSG3826());
+        SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             FrammeAttributeData linkage =
                 AbstractFLinkageDispatchableFilter.getFeatureLinkage(element);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java
index 97a2959..3de2377 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/FeatureDgnConvertOraSDOJobContext.java
@@ -38,7 +38,6 @@
 public class FeatureDgnConvertOraSDOJobContext extends AbstractDgnToOraSDOJobContext {
     static final Log logger = LogFactory.getLog(FeatureDgnConvertOraSDOJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
 
     private HashMap<String, ArrayList<SimpleFeature>> featuresContext = new HashMap<String, ArrayList<SimpleFeature>>();
     private HashMap<String, FeatureWriter> featuresWriterContext = new HashMap<String, FeatureWriter>();
@@ -50,8 +49,8 @@
     private boolean withIndex = false;
 
     public FeatureDgnConvertOraSDOJobContext(String dataPath, DataStore targetDataStore, String filterConfig,
-                                             boolean profileMode, boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, targetDataStore, profileMode, useTransform, useEPSG3826);
+                                             boolean profileMode, boolean useTransform) {
+        super(dataPath, targetDataStore, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
         _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
@@ -99,8 +98,7 @@
             return;
         }
 
-        // �P�_�O�_�ũM���
-        SimpleFeature feature = elementDispatcher.execute(element, isTransformed(), isEPSG3826());
+        SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             FrammeAttributeData linkage =
                 AbstractFLinkageDispatchableFilter.getFeatureLinkage(element);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/GeneralDgnConvertOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/GeneralDgnConvertOraSDOJobContext.java
index 0ca77c6..dbab3a8 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/GeneralDgnConvertOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/GeneralDgnConvertOraSDOJobContext.java
@@ -42,13 +42,14 @@
 import com.ximple.io.dgn7.UserAttributeData;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
 public class GeneralDgnConvertOraSDOJobContext extends AbstractDgnToOraSDOJobContext {
     static final Log logger = LogFactory.getLog(GeneralDgnConvertOraSDOJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
+    static final GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
 
     private String dataOut = null;
 
@@ -58,18 +59,13 @@
     private PessimisticMapWrapper txFeaturesContext;
     private TreeMap<String, SimpleFeatureType> featureTypes = new TreeMap<String, SimpleFeatureType>();
 
-    private GeometryConverterDecorator convertDecorator = null;
     private String featureBaseName = null;
     private boolean withIndex = false;
 
     public GeneralDgnConvertOraSDOJobContext(String dataPath, DataStore targetDataStore, boolean profileMode,
-                                             boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, targetDataStore, profileMode, useTransform, useEPSG3826);
+                                             boolean useTransform) {
+        super(dataPath, targetDataStore, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
-        if (isEPSG3826())
-            convertDecorator = new EPSG3826GeometryConverterDecorator();
-        else
-            convertDecorator = new EPSG3825GeometryConverterDecorator();
     }
 
     public void putFeatureCollection(Element element) throws IllegalAttributeException, SchemaException {
@@ -221,6 +217,7 @@
 
     public SimpleFeature createFeature(SimpleFeatureType featureType, Element element) throws IllegalAttributeException {
         DefaultColorTable colorTable = (DefaultColorTable) DefaultColorTable.getInstance();
+        GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
         if (element instanceof TextElement) {
             TextElement textElement = (TextElement) element;
             convertDecorator.setConverter(textElement);
@@ -230,6 +227,7 @@
             String content = textElement.getText();
             angle = BigDecimal.valueOf(angle).setScale(3, RoundingMode.HALF_UP).doubleValue();
             if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(textElement.getColorIndex()),
@@ -260,6 +258,7 @@
             }
 
             if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(textNodeElement.getColorIndex()),
@@ -279,6 +278,7 @@
             convertDecorator.setConverter(shapeElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
             if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(shapeElement.getColorIndex()),
@@ -293,25 +293,29 @@
             LineStringElement linestring = (LineStringElement) element;
             convertDecorator.setConverter(linestring);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(linestring.getColorIndex()),
                     linestring.getWeight(),
                     linestring.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof LineElement) {
             LineElement line = (LineElement) element;
             convertDecorator.setConverter(line);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(line.getColorIndex()),
                     line.getWeight(),
                     line.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof ArcElement) {
             ArcElement arcElement = (ArcElement) element;
@@ -322,37 +326,43 @@
             */
             convertDecorator.setConverter(arcElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(arcElement.getColorIndex()),
                     arcElement.getWeight(),
                     arcElement.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof EllipseElement) {
             EllipseElement arcElement = (EllipseElement) element;
             convertDecorator.setConverter(arcElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(arcElement.getColorIndex()),
                     arcElement.getWeight(),
                     arcElement.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof ComplexChainElement) {
             ComplexChainElement complexChainElement = (ComplexChainElement) element;
             convertDecorator.setConverter(complexChainElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(complexChainElement.getColorIndex()),
                     complexChainElement.getWeight(),
                     complexChainElement.getLineStyle()
                 }, null);
+            }
             return null;
         }
         return null;
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/IndexDgnConvertOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/IndexDgnConvertOraSDOJobContext.java
index b7f682e..172e328 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/IndexDgnConvertOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/IndexDgnConvertOraSDOJobContext.java
@@ -38,15 +38,14 @@
 import com.ximple.io.dgn7.UserAttributeData;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
 public class IndexDgnConvertOraSDOJobContext extends AbstractDgnToOraSDOJobContext {
     static final Log logger = LogFactory.getLog(IndexDgnConvertOraSDOJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
-
-    protected GeometryConverterDecorator convertDecorator;
+    static final GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
 
     private HashMap<String, ArrayList<SimpleFeature>> featuresContext = new HashMap<String, ArrayList<SimpleFeature>>();
     private HashMap<String, FeatureWriter> featuresWriterContext = new HashMap<String, FeatureWriter>();
@@ -59,14 +58,9 @@
     private SimpleFeatureType featureType3 = null;
 
     public IndexDgnConvertOraSDOJobContext(String dataPath, DataStore targetDataStore, boolean profileMode,
-                                           boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, targetDataStore, profileMode, useTransform, useEPSG3826);
+                                           boolean useTransform) {
+        super(dataPath, targetDataStore, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
-        if (isEPSG3826()) {
-            convertDecorator = new EPSG3826GeometryConverterDecorator();
-        } else {
-            convertDecorator = new EPSG3825GeometryConverterDecorator();
-        }
     }
 
     public void putFeatureCollection(Element element) throws IllegalAttributeException, SchemaException {
@@ -195,7 +189,7 @@
             String tpclid = textElement.getText();
 
             Envelope extent = TPCLIDConverter.convertTpclIdToEnvelope(tpclid);
-            Geometry geom = (isEPSG3826() ?
+            Geometry geom = (FeatureTypeBuilderUtil.getDefaultFeatureSRID() == 3826 ?
                 geometryFactory.createLinearRing(new Coordinate[]
                     {
                         TWDDatumConverter.fromTM2ToEPSG3826(new Coordinate(extent.getMinX(), extent.getMinY())),
@@ -213,6 +207,7 @@
                         TWDDatumConverter.fromTM2ToEPSG3825(new Coordinate(extent.getMinX(), extent.getMinY())),
                     }));
 
+            geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
             return SimpleFeatureBuilder.build(featureType, new Object[]{
                 geom,
                 extent.getMinX(),
@@ -230,13 +225,16 @@
 
     public SimpleFeature createFeature2(SimpleFeatureType featureType, Element element) throws IllegalAttributeException {
         DefaultColorTable colorTable = (DefaultColorTable) DefaultColorTable.getInstance();
+        GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
         if (element instanceof TextElement) {
             TextElement txtElement = (TextElement) element;
             double angle = txtElement.getRotationAngle();
             angle = BigDecimal.valueOf(angle).setScale(3, RoundingMode.HALF_UP).doubleValue();
             convertDecorator.setConverter(txtElement);
+            Geometry geom = convertDecorator.toGeometry(geometryFactory);
+            geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
             SimpleFeature feature = SimpleFeatureBuilder.build(featureType, new Object[]{
-                convertDecorator.toGeometry(geometryFactory),
+                geom,
                 colorTable.getColorCode(txtElement.getColorIndex()),
                 txtElement.getWeight(),
                 txtElement.getLineStyle(),
@@ -265,7 +263,7 @@
                 int dx = (i % 2) * TPCLIDConverter.SX600;
                 int dy = (i / 2) * TPCLIDConverter.SY600;
 
-                Geometry geom = (isEPSG3826() ?
+                Geometry geom = (FeatureTypeBuilderUtil.getDefaultFeatureSRID() == 3826 ?
                     geometryFactory.createPolygon(geometryFactory.createLinearRing(new Coordinate[]
                         {
                             TWDDatumConverter.fromTM2ToEPSG3826(new Coordinate(
@@ -293,6 +291,7 @@
                                 extent.getMinX() + dx, extent.getMaxY() - TPCLIDConverter.SY600 - dy)),
                         }), null));
 
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 result[i] = SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     extent.getMinX(),
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java
index ed8784f..c112330 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/orasdo/OracleConvertOraSDOJobContext.java
@@ -69,8 +69,8 @@
     // private String _convertElementIn = null;
 
     public OracleConvertOraSDOJobContext(String dataPath, DataStore oraDS, String filterConfig, boolean profileMode,
-                                         boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, oraDS, profileMode, useTransform, useEPSG3826);
+                                         boolean useTransform) {
+        super(dataPath, oraDS, profileMode, useTransform);
         _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
@@ -113,7 +113,7 @@
     public void putFeatureCollection(Element element) {
         assert elementDispatcher != null;
         // �P�_�O�_�ũM���
-        SimpleFeature feature = elementDispatcher.execute(element, isTransformed(), isEPSG3826());
+        SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             boolean isEmptySize = false;
             FrammeAttributeData linkage =
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java
index 4083c67..e451024 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractDgnToPostGISJobContext.java
@@ -22,7 +22,9 @@
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.opengis.feature.type.AttributeDescriptor;
+import org.opengis.feature.type.AttributeType;
 import org.opengis.feature.type.GeometryDescriptor;
+import org.opengis.feature.type.GeometryType;
 import org.opengis.feature.type.PropertyType;
 import org.opengis.filter.BinaryComparisonOperator;
 import org.opengis.filter.Filter;
@@ -125,8 +127,8 @@
     protected boolean schemaEnabled = true;
 
     public AbstractDgnToPostGISJobContext(String dataPath, DataStore targetDataStore, String targetSchema,
-                                          boolean profileMode, boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, profileMode, useTransform, useEPSG3826);
+                                          boolean profileMode, boolean useTransform) {
+        super(dataPath, profileMode, useTransform);
         if ((targetDataStore != null) && (targetDataStore instanceof PostgisDataStore)) {
             this.targetDataStore = (PostgisDataStore) targetDataStore;
         } else {
@@ -234,7 +236,7 @@
 
     private String addGeometryColumn(String dbSchema, String tableName, GeometryDescriptor geometryDescriptor, int srid) {
         StringBuilder sql;
-        String typeName = getGeometrySQLTypeName(geometryDescriptor.getType().getBinding());
+        String typeName = getGeometrySQLTypeName(((AttributeType) geometryDescriptor.getType()).getBinding());
         if (typeName == null) {
             getLogger().warn("Error: " + geometryDescriptor.getLocalName() + " unknown type!!!");
             throw new RuntimeException("Error: " + geometryDescriptor.getLocalName() + " unknown type!!!");
@@ -396,9 +398,9 @@
 
         for (AttributeDescriptor descriptor : descriptors) {
             String typeName;
-            typeName = CLASS_MAPPINGS.get(descriptor.getType().getBinding());
+            typeName = CLASS_MAPPINGS.get(((AttributeType) descriptor.getType()).getBinding());
             if (typeName == null) {
-                typeName = GEOM_CLASS_MAPPINGS.get(descriptor.getType().getBinding());
+                typeName = GEOM_CLASS_MAPPINGS.get(((AttributeType) descriptor.getType()).getBinding());
                 if (typeName != null) continue;
             }
 
@@ -454,7 +456,7 @@
                 if (descriptor == null) {
                     msg = "AttributeType was null!";
                 } else {
-                    msg = "Type '" + descriptor.getType().getBinding() + "' not supported!";
+                    msg = "Type '" + ((AttributeType) descriptor.getType()).getBinding() + "' not supported!";
                 }
                 throw (new IOException(msg));
             }
@@ -628,29 +630,30 @@
             if (descriptors.get(i) instanceof GeometryDescriptor) {
                 pstmt.setBytes(i + 1, binaryWriter.writeBinary((Geometry) attributes.get(i)));
             } else {
-                if (descriptors.get(i).getType().getBinding().equals(Short.class)) {
+                Class<?> bindingType = ((AttributeType) descriptors.get(i).getType()).getBinding();
+                if (bindingType.equals(Short.class)) {
                     pstmt.setShort(i + 1, (Short) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(Integer.class)) {
+                } else if (bindingType.equals(Integer.class)) {
                     pstmt.setInt(i + 1, (Short) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(Long.class)) {
+                } else if (bindingType.equals(Long.class)) {
                     pstmt.setLong(i + 1, (Long) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(String.class)) {
+                } else if (bindingType.equals(String.class)) {
                     pstmt.setString(i + 1, (String) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(Float.class)) {
+                } else if (bindingType.equals(Float.class)) {
                     pstmt.setFloat(i + 1, (Float) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(Double.class)) {
+                } else if (bindingType.equals(Double.class)) {
                     pstmt.setDouble(i + 1, (Double) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(Boolean.class)) {
+                } else if (bindingType.equals(Boolean.class)) {
                     pstmt.setBoolean(i + 1, (Boolean) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(BigDecimal.class)) {
+                } else if (bindingType.equals(BigDecimal.class)) {
                     pstmt.setBigDecimal(i + 1, (BigDecimal) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(java.sql.Date.class)) {
+                } else if (bindingType.equals(java.sql.Date.class)) {
                     pstmt.setDate(i + 1, (java.sql.Date) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(java.sql.Time.class)) {
+                } else if (bindingType.equals(java.sql.Time.class)) {
                     pstmt.setTime(i + 1, (java.sql.Time) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(java.sql.Timestamp.class)) {
+                } else if (bindingType.equals(java.sql.Timestamp.class)) {
                     pstmt.setTimestamp(i + 1, (java.sql.Timestamp) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(java.util.Date.class)) {
+                } else if (bindingType.equals(java.util.Date.class)) {
                     java.sql.Date sDate = new java.sql.Date(((java.util.Date) attributes.get(i)).getTime());
                     pstmt.setDate(i + 1, sDate);
                 }
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java
index 5c9eb8e..aabd2cb 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/AbstractOracleToPostGISJobContext.java
@@ -20,6 +20,7 @@
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.opengis.feature.type.AttributeDescriptor;
+import org.opengis.feature.type.AttributeType;
 import org.opengis.feature.type.GeometryDescriptor;
 import org.opengis.feature.type.PropertyType;
 import org.opengis.filter.BinaryComparisonOperator;
@@ -122,8 +123,8 @@
     private String targetSchema = "public";
 
     public AbstractOracleToPostGISJobContext(String dataPath, DataStore targetDataStore, String targetSchema,
-                                             boolean profileMode, boolean useTransform, boolean useEPSG3826) {
-        super(profileMode, useTransform, useEPSG3826);
+                                             boolean profileMode, boolean useTransform) {
+        super(profileMode, useTransform);
         if ((targetDataStore != null) && (targetDataStore instanceof PostgisDataStore)) {
             this.targetDataStore = (PostgisDataStore) targetDataStore;
         } else {
@@ -450,7 +451,7 @@
                     }
 
                     if (length < 1) {
-                        getLogger().warn("FeatureType did not specify string length; defaulted to 256");
+                        getLogger().info("FeatureType did not specify string length; defaulted to 512");
                         length = 512;
                     } else if (length > MAX_ALLOWED_VALUE) {
                         length = MAX_ALLOWED_VALUE;
@@ -650,31 +651,33 @@
 
         for (int i = 0; i < descriptors.size(); i++) {
             if (descriptors.get(i) instanceof GeometryDescriptor) {
+                // String wktTest = geometryWriter.write((Geometry) attributes.get(i));
                 pstmt.setBytes(i + 1, binaryWriter.writeBinary((Geometry) attributes.get(i)));
             } else {
-                if (descriptors.get(i).getType().getBinding().equals(Short.class)) {
+                Class<?> bindingType = ((AttributeType)descriptors.get(i).getType()).getBinding();
+                if (bindingType.equals(Short.class)) {
                     pstmt.setShort(i + 1, (Short) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(Integer.class)) {
+                } else if (bindingType.equals(Integer.class)) {
                     pstmt.setInt(i + 1, (Short) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(Long.class)) {
+                } else if (bindingType.equals(Long.class)) {
                     pstmt.setLong(i + 1, (Long) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(String.class)) {
+                } else if (bindingType.equals(String.class)) {
                     pstmt.setString(i + 1, (String) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(Float.class)) {
+                } else if (bindingType.equals(Float.class)) {
                     pstmt.setFloat(i + 1, (Float) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(Double.class)) {
+                } else if (bindingType.equals(Double.class)) {
                     pstmt.setDouble(i + 1, (Double) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(Boolean.class)) {
+                } else if (bindingType.equals(Boolean.class)) {
                     pstmt.setBoolean(i + 1, (Boolean) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(BigDecimal.class)) {
+                } else if (bindingType.equals(BigDecimal.class)) {
                     pstmt.setBigDecimal(i + 1, (BigDecimal) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(java.sql.Date.class)) {
+                } else if (bindingType.equals(java.sql.Date.class)) {
                     pstmt.setDate(i + 1, (java.sql.Date) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(java.sql.Time.class)) {
+                } else if (bindingType.equals(java.sql.Time.class)) {
                     pstmt.setTime(i + 1, (java.sql.Time) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(java.sql.Timestamp.class)) {
+                } else if (bindingType.equals(java.sql.Timestamp.class)) {
                     pstmt.setTimestamp(i + 1, (java.sql.Timestamp) attributes.get(i));
-                } else if (descriptors.get(i).getType().getBinding().equals(java.util.Date.class)) {
+                } else if (bindingType.equals(java.util.Date.class)) {
                     java.sql.Date sDate = new java.sql.Date(((java.util.Date) attributes.get(i)).getTime());
                     pstmt.setDate(i + 1, sDate);
                 }
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java
index fe43e2e..a0fd81e 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/DummyFeatureConvertPostGISJobContext.java
@@ -42,7 +42,6 @@
 public class DummyFeatureConvertPostGISJobContext extends AbstractDgnToPostGISJobContext {
     static final Log logger = LogFactory.getLog(DummyFeatureConvertPostGISJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
 
     private String dataOut = null;
 
@@ -57,8 +56,8 @@
 
     public DummyFeatureConvertPostGISJobContext(String dataPath, DataStore targetDataStore, String targetSchema,
                                                 String filterConfig, boolean profileMode,
-                                                boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, targetDataStore, targetSchema, profileMode, useTransform, useEPSG3826);
+                                                boolean useTransform) {
+        super(dataPath, targetDataStore, targetSchema, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
         _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
@@ -107,7 +106,7 @@
         }
 
         // �P�_�O�_�ũM���
-        SimpleFeature feature = elementDispatcher.execute(element, isTransformed(), isEPSG3826());
+        SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             FrammeAttributeData linkage =
                 AbstractFLinkageDispatchableFilter.getFeatureLinkage(element);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java
index 57cba8d..cabcb83 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/FeatureDgnConvertPostGISJobContext.java
@@ -38,7 +38,6 @@
 public class FeatureDgnConvertPostGISJobContext extends AbstractDgnToPostGISJobContext {
     static final Log logger = LogFactory.getLog(FeatureDgnConvertPostGISJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
 
     private HashMap<String, ArrayList<SimpleFeature>> featuresContext = new HashMap<String, ArrayList<SimpleFeature>>();
     private HashMap<String, FeatureWriter> featuresWriterContext = new HashMap<String, FeatureWriter>();
@@ -51,8 +50,8 @@
 
     public FeatureDgnConvertPostGISJobContext(String dataPath, DataStore targetDataStore, String targetSchema,
                                               String filterConfig, boolean profileMode,
-                                              boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, targetDataStore, targetSchema, profileMode, useTransform, useEPSG3826);
+                                              boolean useTransform) {
+        super(dataPath, targetDataStore, targetSchema, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
         _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
@@ -101,7 +100,7 @@
         }
 
         // �P�_�O�_�ũM���
-        SimpleFeature feature = elementDispatcher.execute(element, isTransformed(), isEPSG3826());
+        SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             FrammeAttributeData linkage =
                 AbstractFLinkageDispatchableFilter.getFeatureLinkage(element);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java
index 6bda3cd..e786d63 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/GeneralDgnConvertPostGISJobContext.java
@@ -24,8 +24,11 @@
 import org.geotools.feature.SchemaException;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.feature.type.FeatureTypeImpl;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
+import org.opengis.feature.type.FeatureType;
 import org.postgresql.util.PSQLException;
 
 import com.vividsolutions.jts.geom.Geometry;
@@ -51,7 +54,7 @@
 public class GeneralDgnConvertPostGISJobContext extends AbstractDgnToPostGISJobContext {
     static final Log logger = LogFactory.getLog(GeneralDgnConvertPostGISJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
+    static final GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
 
     private HashMap<SimpleFeatureType, ArrayList<SimpleFeature>> txFeaturesContext = new HashMap<SimpleFeatureType, ArrayList<SimpleFeature>>();
 
@@ -64,12 +67,8 @@
     private int accumulate = 0;
 
     public GeneralDgnConvertPostGISJobContext(String dataPath, DataStore targetDataStore, String targetSchema,
-                                              boolean profileMode, boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, targetDataStore, targetSchema, profileMode, useTransform, useEPSG3826);
-        if (isEPSG3826())
-            convertDecorator = new EPSG3826GeometryConverterDecorator();
-        else
-            convertDecorator = new EPSG3825GeometryConverterDecorator();
+                                              boolean profileMode, boolean useTransform) {
+        super(dataPath, targetDataStore, targetSchema, profileMode, useTransform);
     }
 
     public void putFeatureCollection(Element element) throws IllegalAttributeException, SchemaException {
@@ -286,6 +285,7 @@
             content = content.replace('\u0000', ' ');
             angle = BigDecimal.valueOf(angle).setScale(3, RoundingMode.HALF_UP).doubleValue();
             if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(textElement.getColorIndex()),
@@ -317,6 +317,7 @@
             }
 
             if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(textNodeElement.getColorIndex()),
@@ -336,6 +337,7 @@
             convertDecorator.setConverter(shapeElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
             if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(shapeElement.getColorIndex()),
@@ -350,25 +352,29 @@
             LineStringElement linestring = (LineStringElement) element;
             convertDecorator.setConverter(linestring);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(linestring.getColorIndex()),
                     linestring.getWeight(),
                     linestring.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof LineElement) {
             LineElement line = (LineElement) element;
             convertDecorator.setConverter(line);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(line.getColorIndex()),
                     line.getWeight(),
                     line.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof ArcElement) {
             ArcElement arcElement = (ArcElement) element;
@@ -379,37 +385,43 @@
             */
             convertDecorator.setConverter(arcElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(arcElement.getColorIndex()),
                     arcElement.getWeight(),
                     arcElement.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof EllipseElement) {
             EllipseElement arcElement = (EllipseElement) element;
             convertDecorator.setConverter(arcElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(arcElement.getColorIndex()),
                     arcElement.getWeight(),
                     arcElement.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof ComplexChainElement) {
             ComplexChainElement complexChainElement = (ComplexChainElement) element;
             convertDecorator.setConverter(complexChainElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(complexChainElement.getColorIndex()),
                     complexChainElement.getWeight(),
                     complexChainElement.getLineStyle()
                 }, null);
+            }
             return null;
         }
         return null;
@@ -527,7 +539,7 @@
                 conn = getConnection();
                 if (dropTableMode) {
                     dropGeometryColumn(conn, featureName,
-                                       typeBuilder.buildFeatureType().getGeometryDescriptor().getLocalName());
+                                       ((FeatureTypeImpl)typeBuilder.buildFeatureType()).getGeometryDescriptor().getLocalName());
                     dropTable(conn, featureName);
 
                     ArrayList<String> schemaTexts = createNewSchemaTexts(conn, typeBuilder.buildFeatureType());
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/IndexDgnConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/IndexDgnConvertPostGISJobContext.java
index 941a434..bd907d0 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/IndexDgnConvertPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/IndexDgnConvertPostGISJobContext.java
@@ -24,6 +24,8 @@
 import org.geotools.feature.SchemaException;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.feature.type.FeatureTypeImpl;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.postgresql.util.PSQLException;
@@ -50,8 +52,7 @@
 public class IndexDgnConvertPostGISJobContext extends AbstractDgnToPostGISJobContext {
     static final Log logger = LogFactory.getLog(IndexDgnConvertPostGISJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
-    protected GeometryConverterDecorator convertDecorator;
+    static final GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
 
     private HashMap<SimpleFeatureType, ArrayList<SimpleFeature>> txFeaturesContext =
             new HashMap<SimpleFeatureType, ArrayList<SimpleFeature>>();
@@ -68,13 +69,8 @@
     private int accumulate = 0;
 
     public IndexDgnConvertPostGISJobContext(String dataPath, DataStore targetDataStore, String targetSchema,
-                                            boolean profileMode, boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, targetDataStore, targetSchema, profileMode, useTransform, useEPSG3826);
-        if (isEPSG3826()) {
-            convertDecorator = new EPSG3826GeometryConverterDecorator();
-        } else {
-            convertDecorator = new EPSG3825GeometryConverterDecorator();
-        }
+                                            boolean profileMode, boolean useTransform) {
+        super(dataPath, targetDataStore, targetSchema, profileMode, useTransform);
     }
 
     public void putFeatureCollection(Element element) throws IllegalAttributeException, SchemaException {
@@ -319,7 +315,7 @@
                     if (dropTableMode) {
                         try {
                             dropGeometryColumn(conn, featureName,
-                                               typeBuilderRect.buildFeatureType().getGeometryDescriptor().getLocalName());
+                                               ((FeatureTypeImpl)typeBuilderRect.buildFeatureType()).getGeometryDescriptor().getLocalName());
                         } catch (PSQLException e) {
                             logger.debug(e.getMessage(), e);
                         }
@@ -378,7 +374,7 @@
                     conn = getConnection();
                     if (dropTableMode) {
                         dropGeometryColumn(conn, featureName,
-                                           typeBuilderPnt.buildFeatureType().getGeometryDescriptor().getLocalName());
+                                           ((FeatureTypeImpl)typeBuilderPnt.buildFeatureType()).getGeometryDescriptor().getLocalName());
                         dropTable(conn, featureName);
 
                         ArrayList<String> schemaTexts = createNewSchemaTexts(conn,
@@ -432,7 +428,7 @@
                     if (dropTableMode) {
                         try {
                             dropGeometryColumn(conn, featureName,
-                                               typeBuilderSmallRect.buildFeatureType().getGeometryDescriptor().getLocalName());
+                                               ((FeatureTypeImpl)typeBuilderSmallRect.buildFeatureType()).getGeometryDescriptor().getLocalName());
                         } catch (PSQLException e) {
                             logger.debug(e.getMessage(), e);
                         }
@@ -494,7 +490,7 @@
 
             Envelope extent = TPCLIDConverter.convertTpclIdToEnvelope(tpclid);
             Geometry geom;
-            if (isEPSG3826()) {
+            if (FeatureTypeBuilderUtil.getDefaultFeatureSRID() == 3826) {
                 geom = geometryFactory.createPolygon(geometryFactory.createLinearRing(new Coordinate[]
                     {
                         TWDDatumConverter.fromTM2ToEPSG3826(new Coordinate(extent.getMinX(), extent.getMinY())),
@@ -513,6 +509,7 @@
                         TWDDatumConverter.fromTM2ToEPSG3825(new Coordinate(extent.getMinX(), extent.getMinY())),
                     }), null);
             }
+            geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
             return SimpleFeatureBuilder.build(featureType, new Object[]{
                 geom,
                 extent.getMinX(),
@@ -543,7 +540,7 @@
                     Envelope extent = TPCLIDConverter.convertTpclIdToEnvelope(tpclid);
                     Geometry geom = null;
                     try {
-                        geom = (isEPSG3826() ?
+                        geom = (FeatureTypeBuilderUtil.getDefaultFeatureSRID() == 3826 ?
                             geometryFactory.createPolygon(geometryFactory.createLinearRing(new Coordinate[]
                                 {
                                     TWDDatumConverter.fromTM2ToEPSG3826(new Coordinate(extent.getMinX(), extent.getMinY())),
@@ -565,6 +562,8 @@
                         logger.warn(e.getMessage(), e);
                         return null;
                     }
+
+                    if (geom != null) geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
 
                     return (geom == null ? null :
                         SimpleFeatureBuilder.build(featureType, new Object[]{
@@ -591,9 +590,11 @@
             TextElement txtElement = (TextElement) element;
             double angle = txtElement.getRotationAngle();
             angle = BigDecimal.valueOf(angle).setScale(3, RoundingMode.HALF_UP).doubleValue();
+            GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
             convertDecorator.setConverter(txtElement);
             Geometry gobj = convertDecorator.toGeometry(geometryFactory);
             if (gobj != null)
+                gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                     gobj,
                     colorTable.getColorCode(txtElement.getColorIndex()),
@@ -619,12 +620,13 @@
                     String tpclid = TPCLIDConverter.CoordinateToTpclId(center);
                     if (tpclid.length() > 5) {
                         tpclid = tpclid.substring(0, 5);
-                        Coordinate pos = (isEPSG3826() ?
+                        Coordinate pos = (FeatureTypeBuilderUtil.getDefaultFeatureSRID() == 3826 ?
                             TWDDatumConverter.fromTM2ToEPSG3826(new Coordinate(center.x, center.y)) :
                             TWDDatumConverter.fromTM2ToEPSG3825(new Coordinate(center.x, center.y)));
                         Geometry gobj = geometryFactory.createPoint(pos);
 
                         if (gobj != null)
+                            gobj.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                             feature = SimpleFeatureBuilder.build(featureType, new Object[]{
                                 gobj,
                                 colorTable.getColorCode(shapeElement.getColorIndex()),
@@ -661,7 +663,7 @@
 
                 Geometry geom;
 
-                if (isEPSG3826()) {
+                if (FeatureTypeBuilderUtil.getDefaultFeatureSRID() == 3826) {
                     geom = geometryFactory.createPolygon(geometryFactory.createLinearRing(new Coordinate[]
                         {
                             TWDDatumConverter.fromTM2ToEPSG3826(new Coordinate(
@@ -692,6 +694,7 @@
                 }
                 Envelope innerExtent = geom.getEnvelopeInternal();
 
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 result[i] = SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     innerExtent.getMinX(),
@@ -724,7 +727,7 @@
                         int dx = (i % 2) * TPCLIDConverter.SX600;
                         int dy = (i / 2) * TPCLIDConverter.SY600;
 
-                        Geometry geom = (isEPSG3826() ?
+                        Geometry geom = (FeatureTypeBuilderUtil.getDefaultFeatureSRID() == 3826 ?
                             geometryFactory.createPolygon(geometryFactory.createLinearRing(new Coordinate[]
                                 {
                                     TWDDatumConverter.fromTM2ToEPSG3826(new Coordinate(
@@ -754,6 +757,7 @@
 
                         Envelope innerExtent = geom.getEnvelopeInternal();
 
+                        geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                         result[i] = SimpleFeatureBuilder.build(featureType, new Object[]{
                             geom,
                             innerExtent.getMinX(),
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java
index c48fd45..b41674a 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/postgis/OracleConvertPostGISJobContext.java
@@ -27,6 +27,7 @@
 import org.geotools.data.jdbc.JDBCUtils;
 import org.geotools.data.postgis.PostgisDataStoreFactory;
 import org.geotools.feature.SchemaException;
+import org.geotools.feature.type.FeatureTypeImpl;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 import org.postgresql.util.PSQLException;
@@ -75,8 +76,8 @@
     private int accumulate = 0;
 
     public OracleConvertPostGISJobContext(String dataPath, DataStore pgDS, String targetSchema, String filterConfig,
-                                          boolean profileMode, boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, pgDS, targetSchema, profileMode, useTransform, useEPSG3826);
+                                          boolean profileMode, boolean useTransform) {
+        super(dataPath, pgDS, targetSchema, profileMode, useTransform);
         _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
         elementDispatcher.addCreateFeatureTypeEventListener(this);
@@ -120,7 +121,7 @@
     public void putFeatureCollection(Element element) {
         assert elementDispatcher != null;
         // 判斷是否符和條件
-        SimpleFeature feature = elementDispatcher.execute(element, isTransformed(), isEPSG3826());
+        SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             boolean isEmptySize = false;
             FrammeAttributeData linkage =
@@ -262,6 +263,11 @@
         } catch (BatchUpdateException e) {
             JDBCUtils.close(conn, Transaction.AUTO_COMMIT, e);
             logger.error(e.getMessage(), e);
+            SQLException ex;
+            while ((ex = e.getNextException()) != null) {
+                // logger.warn(ex.getMessage(), ex);
+                logger.warn(ex.getMessage());
+            }
         } catch (SQLException e) {
             JDBCUtils.close(conn, Transaction.AUTO_COMMIT, e);
             logger.error(e.getMessage(), e);
@@ -331,7 +337,7 @@
                 conn = getConnection();
                 if (dropTableMode) {
                     dropGeometryColumn(conn, getTargetSchema(), featureName,
-                                       featureType.getGeometryDescriptor().getName().getLocalPart());
+                                       ((FeatureTypeImpl)featureType).getGeometryDescriptor().getName().getLocalPart());
                     dropTable(conn, getTargetSchema(), featureName);
 
                     ArrayList<String> schemaTexts = createNewSchemaTexts(conn, featureType);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/AbstractDgnToShapefileJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/AbstractDgnToShapefileJobContext.java
index 0bde862..5caa4e9 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/AbstractDgnToShapefileJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/AbstractDgnToShapefileJobContext.java
@@ -4,8 +4,8 @@
 
 public abstract class AbstractDgnToShapefileJobContext extends AbstractDgnFileJobContext {
     public AbstractDgnToShapefileJobContext(String dataPath, boolean profileMode,
-                                            boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, profileMode, useTransform, useEPSG3826);
+                                            boolean useTransform) {
+        super(dataPath, profileMode, useTransform);
     }
 
     public abstract String getDataOutPath();
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java
index f85c088..d34314e 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/DummyFeatureConvertShpJobContext.java
@@ -45,7 +45,6 @@
 public class DummyFeatureConvertShpJobContext extends AbstractDgnToShapefileJobContext {
     static final Log logger = LogFactory.getLog(DummyFeatureConvertShpJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
     static final String SHPOUTPATH = "shpout";
 
     private String dataOut = null;
@@ -60,8 +59,8 @@
     private boolean withIndex = false;
 
     public DummyFeatureConvertShpJobContext(String dataPath, String filterConfig, boolean profileMode,
-                                            boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, profileMode, useTransform, useEPSG3826);
+                                            boolean useTransform) {
+        super(dataPath, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
         _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
@@ -110,7 +109,7 @@
         }
 
         // �P�_�O�_�ũM���
-        SimpleFeature feature = elementDispatcher.execute(element, isTransformed(), isEPSG3826());
+        SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             FrammeAttributeData linkage =
                 AbstractFLinkageDispatchableFilter.getFeatureLinkage(element);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java
index c5818b8..0208b29 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/FeatureDgnConvertShpJobContext.java
@@ -41,7 +41,6 @@
 public class FeatureDgnConvertShpJobContext extends AbstractDgnToShapefileJobContext {
     static final Log logger = LogFactory.getLog(FeatureDgnConvertShpJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
     static final String SHPOUTPATH = "shpout";
 
     private String dataOut = null;
@@ -56,8 +55,8 @@
     private boolean withIndex = false;
 
     public FeatureDgnConvertShpJobContext(String dataPath, String filterConfig, boolean profileMode,
-                                          boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, profileMode, useTransform, useEPSG3826);
+                                          boolean useTransform) {
+        super(dataPath, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
         _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
@@ -106,7 +105,7 @@
         }
 
         // �P�_�O�_�ũM���
-        SimpleFeature feature = elementDispatcher.execute(element, isTransformed(), isEPSG3826());
+        SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             FrammeAttributeData linkage =
                 AbstractFLinkageDispatchableFilter.getFeatureLinkage(element);
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/GeneralDgnConvertShpJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/GeneralDgnConvertShpJobContext.java
index 23a190f..41b36c6 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/GeneralDgnConvertShpJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/GeneralDgnConvertShpJobContext.java
@@ -46,13 +46,14 @@
 import com.ximple.io.dgn7.UserAttributeData;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
 public class GeneralDgnConvertShpJobContext extends AbstractDgnToShapefileJobContext {
     static final Log logger = LogFactory.getLog(GeneralDgnConvertShpJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
+    static final GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
     public static final String SHPOUTPATH = "shpout";
 
     private String dataOut = null;
@@ -63,18 +64,13 @@
     private PessimisticMapWrapper txFeaturesContext;
     private TreeMap<String, SimpleFeatureType> featureTypes = new TreeMap<String, SimpleFeatureType>();
 
-    private GeometryConverterDecorator convertDecorator = null;
     private String featureBaseName = null;
     private boolean withIndex = false;
 
     public GeneralDgnConvertShpJobContext(String dataPath, boolean profileMode,
-                                          boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, profileMode, useTransform, useEPSG3826);
+                                          boolean useTransform) {
+        super(dataPath, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
-        if (isEPSG3826())
-            convertDecorator = new EPSG3826GeometryConverterDecorator();
-        else
-            convertDecorator = new EPSG3825GeometryConverterDecorator();
     }
 
     public void putFeatureCollection(Element element) throws IllegalAttributeException, SchemaException {
@@ -251,6 +247,7 @@
 
     public SimpleFeature createFeature(SimpleFeatureType featureType, Element element) throws IllegalAttributeException {
         DefaultColorTable colorTable = (DefaultColorTable) DefaultColorTable.getInstance();
+        GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
         if (element instanceof TextElement) {
             TextElement textElement = (TextElement) element;
             convertDecorator.setConverter(textElement);
@@ -260,6 +257,7 @@
             String content = textElement.getText();
             angle = BigDecimal.valueOf(angle).setScale(3, RoundingMode.HALF_UP).doubleValue();
             if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(textElement.getColorIndex()),
@@ -290,6 +288,7 @@
             }
 
             if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(textNodeElement.getColorIndex()),
@@ -309,6 +308,7 @@
             convertDecorator.setConverter(shapeElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
             if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(shapeElement.getColorIndex()),
@@ -323,25 +323,29 @@
             LineStringElement linestring = (LineStringElement) element;
             convertDecorator.setConverter(linestring);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(linestring.getColorIndex()),
                     linestring.getWeight(),
                     linestring.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof LineElement) {
             LineElement line = (LineElement) element;
             convertDecorator.setConverter(line);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(line.getColorIndex()),
                     line.getWeight(),
                     line.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof ArcElement) {
             ArcElement arcElement = (ArcElement) element;
@@ -352,37 +356,43 @@
             */
             convertDecorator.setConverter(arcElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(arcElement.getColorIndex()),
                     arcElement.getWeight(),
                     arcElement.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof EllipseElement) {
             EllipseElement arcElement = (EllipseElement) element;
             convertDecorator.setConverter(arcElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(arcElement.getColorIndex()),
                     arcElement.getWeight(),
                     arcElement.getLineStyle()
                 }, null);
+            }
             return null;
         } else if (element instanceof ComplexChainElement) {
             ComplexChainElement complexChainElement = (ComplexChainElement) element;
             convertDecorator.setConverter(complexChainElement);
             Geometry geom = convertDecorator.toGeometry(geometryFactory);
-            if (geom != null)
+            if (geom != null) {
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 return SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     colorTable.getColorCode(complexChainElement.getColorIndex()),
                     complexChainElement.getWeight(),
                     complexChainElement.getLineStyle()
                 }, null);
+            }
             return null;
         }
         return null;
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/IndexDgnConvertShpJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/IndexDgnConvertShpJobContext.java
index 09ea970..62adef3 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/IndexDgnConvertShpJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/IndexDgnConvertShpJobContext.java
@@ -43,16 +43,15 @@
 import com.ximple.io.dgn7.UserAttributeData;
 import org.geotools.feature.simple.SimpleFeatureBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 import org.opengis.feature.simple.SimpleFeature;
 import org.opengis.feature.simple.SimpleFeatureType;
 
 public class IndexDgnConvertShpJobContext extends AbstractDgnToShapefileJobContext {
     static final Log logger = LogFactory.getLog(IndexDgnConvertShpJobContext.class);
     static final LoggerFacade sLogger = new CommonsLoggingLogger(logger);
-    static final GeometryFactory geometryFactory = new GeometryFactory();
+    static final GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory(null);
     public static final String SHPOUTPATH = "shpout";
-
-    protected GeometryConverterDecorator convertDecorator;
 
     private String dataOut = null;
 
@@ -69,14 +68,9 @@
     private int accumulate = 0;
 
     public IndexDgnConvertShpJobContext(String dataPath, boolean profileMode,
-                                        boolean useTransform, boolean useEPSG3826) {
-        super(dataPath, profileMode, useTransform, useEPSG3826);
+                                        boolean useTransform) {
+        super(dataPath, profileMode, useTransform);
         txFeaturesContext = new PessimisticMapWrapper(featuresContext, sLogger);
-        if (isEPSG3826()) {
-            convertDecorator = new EPSG3826GeometryConverterDecorator();
-        } else {
-            convertDecorator = new EPSG3825GeometryConverterDecorator();
-        }
     }
 
     public void putFeatureCollection(Element element) throws IllegalAttributeException, SchemaException {
@@ -236,7 +230,7 @@
 
             Envelope extent = TPCLIDConverter.convertTpclIdToEnvelope(tpclid);
             Geometry geom;
-            if (isEPSG3826()) {
+            if (FeatureTypeBuilderUtil.getDefaultFeatureSRID() == 3826) {
                 geom = geometryFactory.createLinearRing(new Coordinate[]
                     {
                         TWDDatumConverter.fromTM2ToEPSG3826(new Coordinate(extent.getMinX(), extent.getMinY())),
@@ -255,6 +249,7 @@
                         TWDDatumConverter.fromTM2ToEPSG3825(new Coordinate(extent.getMinX(), extent.getMinY())),
                     });
             }
+            geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
             return SimpleFeatureBuilder.build(featureType, new Object[]{
                 geom,
                 extent.getMinX(),
@@ -276,9 +271,12 @@
             TextElement txtElement = (TextElement) element;
             double angle = txtElement.getRotationAngle();
             angle = BigDecimal.valueOf(angle).setScale(3, RoundingMode.HALF_UP).doubleValue();
+            GeometryConverterDecorator convertDecorator = FeatureTypeBuilderUtil.lookupDefaultGeometryConverter();
             convertDecorator.setConverter(txtElement);
+            Geometry geom = convertDecorator.toGeometry(geometryFactory);
+            geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
             SimpleFeature feature = SimpleFeatureBuilder.build(featureType, new Object[]{
-                convertDecorator.toGeometry(geometryFactory),
+                geom,
                 colorTable.getColorCode(txtElement.getColorIndex()),
                 txtElement.getWeight(),
                 txtElement.getLineStyle(),
@@ -308,7 +306,7 @@
                 int dy = (i / 2) * TPCLIDConverter.SY600;
 
                 Geometry geom;
-                if (isEPSG3826()) {
+                if (FeatureTypeBuilderUtil.getDefaultFeatureSRID() == 3826) {
                     geom = geometryFactory.createPolygon(geometryFactory.createLinearRing(new Coordinate[]
                         {
                             TWDDatumConverter.fromTM2ToEPSG3826(new Coordinate(
@@ -337,6 +335,7 @@
                                 extent.getMinX() + dx, extent.getMaxY() - TPCLIDConverter.SY600 - dy)),
                         }), null);
                 }
+                geom.setSRID(FeatureTypeBuilderUtil.getDefaultFeatureSRID());
                 result[i] = SimpleFeatureBuilder.build(featureType, new Object[]{
                     geom,
                     extent.getMinX(),
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java
index e9aeee9..72a1796 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/jobs/context/shapefile/OracleConvertShapefilesJobContext.java
@@ -79,8 +79,8 @@
     private boolean withIndex = false;
 
     public OracleConvertShapefilesJobContext(String filterConfig, boolean profileMode,
-                                             boolean useTransform, boolean useEPSG3826) {
-        super(profileMode, useTransform, useEPSG3826);
+                                             boolean useTransform) {
+        super(profileMode, useTransform);
         properties = new Properties();
         _filterConfig = filterConfig;
         elementDispatcher = createElementDispatcher();
@@ -124,7 +124,7 @@
     public void putFeatureCollection(Element element) {
         assert elementDispatcher != null;
         // �P�_�O�_�ũM���
-        SimpleFeature feature = elementDispatcher.execute(element, isTransformed(), isEPSG3826());
+        SimpleFeature feature = elementDispatcher.execute(element, isTransformed());
         if (feature == null) {
             boolean isEmptySize = false;
             FrammeAttributeData linkage =
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java
index f00e631..028aa86 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/FeatureTypeBuilderUtil.java
@@ -1,16 +1,30 @@
 package com.ximple.eofms.util;
 
 import com.vividsolutions.jts.geom.*;
+import org.apache.log4j.LogManager;
+import org.apache.log4j.Logger;
 import org.geotools.feature.AttributeTypeBuilder;
 import org.geotools.feature.simple.SimpleFeatureTypeBuilder;
+import org.geotools.geometry.jts.JTSFactoryFinder;
+import org.geotools.referencing.CRS;
+import org.geotools.referencing.ReferencingFactoryFinder;
+import org.geotools.referencing.factory.epsg.ThreadedH2EpsgFactory;
 import org.opengis.feature.type.AttributeDescriptor;
 import org.opengis.feature.type.AttributeType;
 import org.opengis.feature.type.GeometryType;
+import org.opengis.referencing.FactoryException;
+import org.opengis.referencing.crs.CRSFactory;
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.opengis.referencing.cs.CSFactory;
+import org.opengis.referencing.cs.CoordinateSystem;
+import org.opengis.referencing.operation.MathTransform;
 
 import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.TreeMap;
 
 public final class FeatureTypeBuilderUtil {
-    protected static GeometryFactory _geomFactory = new GeometryFactory();
+    private static final Logger LOGGER = LogManager.getLogger(FeatureTypeBuilderUtil.class);
     private static boolean notAllowNull = false;
     protected static final String DEFAULTNAMESPACE = "http://www.ximple.com.tw/tpc/";
 
@@ -31,19 +45,20 @@
     }
 
     protected static GeometryType createGeometryType(AttributeTypeBuilder attrBuilder,
-                                                     String name, Class clazz, boolean isNillable) {
-        attrBuilder.setName(name);
-        attrBuilder.setBinding(clazz);
-        attrBuilder.setNillable(isNillable);
-        return attrBuilder.buildGeometryType();
+                                                     String name, Class clazz, boolean isNillable,
+                                                     CoordinateReferenceSystem crs) {
+        return createGeometryType(attrBuilder, name, clazz, isNillable, crs, null);
     }
 
     protected static GeometryType createGeometryType(AttributeTypeBuilder attrBuilder,
-                                                     String name, Class clazz, boolean isNillable, Object defaultValue) {
+                                                     String name, Class clazz, boolean isNillable,
+                                                     CoordinateReferenceSystem crs,
+                                                     Object defaultValue) {
         attrBuilder.setName(name);
         attrBuilder.setBinding(clazz);
         attrBuilder.setNillable(isNillable);
-        attrBuilder.setDefaultValue(defaultValue);
+        if (defaultValue != null) attrBuilder.setDefaultValue(defaultValue);
+        if (crs != null) attrBuilder.setCRS(crs);
         return attrBuilder.buildGeometryType();
     }
 
@@ -86,7 +101,7 @@
 
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
-                "geom", createGeometryType(attrBuilder, "PointType", Point.class, false)));
+                "geom", createGeometryType(attrBuilder, "PointType", Point.class, false, lookupCRS(defaultSRID))));
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("symcolor", String.class, notAllowNull, 12, ""));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
@@ -131,7 +146,7 @@
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("geom", LineString.class, true));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
-                "geom", createGeometryType(attrBuilder, "LineType", LineString.class, true)));
+                "geom", createGeometryType(attrBuilder, "LineType", LineString.class, true, lookupCRS(defaultSRID))));
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("symcolor", String.class, notAllowNull, 12, ""));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
@@ -159,7 +174,7 @@
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("geom", MultiLineString.class, true));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
-                "geom", createGeometryType(attrBuilder, "MultiLineStringType", MultiLineString.class, true)));
+                "geom", createGeometryType(attrBuilder, "MultiLineStringType", MultiLineString.class, true, lookupCRS(defaultSRID))));
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("symcolor", String.class, notAllowNull, 12, ""));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
@@ -187,7 +202,7 @@
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("geom", Polygon.class, true));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
-                "geom", createGeometryType(attrBuilder, "PolygonType", Polygon.class, true)));
+                "geom", createGeometryType(attrBuilder, "PolygonType", Polygon.class, true, lookupCRS(defaultSRID))));
 
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("symcolor", String.class, notAllowNull, 12, ""));
         attrBuilder = new AttributeTypeBuilder();
@@ -240,7 +255,7 @@
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("geom", Polygon.class, true));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
-                "geom", createGeometryType(attrBuilder, "PolygonType", Polygon.class, true)));
+                "geom", createGeometryType(attrBuilder, "PolygonType", Polygon.class, true, lookupCRS(defaultSRID))));
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("x1", Double.class, notAllowNull, 1, 0.0));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
@@ -289,7 +304,7 @@
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("geom", Point.class, true));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
-                "geom", createGeometryType(attrBuilder, "PointType", Point.class, true)));
+                "geom", createGeometryType(attrBuilder, "PointType", Point.class, true, lookupCRS(defaultSRID))));
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("symcolor", String.class, notAllowNull, 12, ""));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
@@ -338,7 +353,7 @@
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("geom", Point.class, notAllowNull));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
-                "geom", createGeometryType(attrBuilder, "PointType", Point.class, notAllowNull)));
+                "geom", createGeometryType(attrBuilder, "PointType", Point.class, notAllowNull, lookupCRS(defaultSRID))));
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("tid", Short.class, notAllowNull));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
@@ -407,7 +422,7 @@
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("geom", Point.class, notAllowNull));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
-                "geom", createGeometryType(attrBuilder, "PointType", Point.class, notAllowNull)));
+                "geom", createGeometryType(attrBuilder, "PointType", Point.class, notAllowNull, lookupCRS(defaultSRID))));
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("tid", Short.class, notAllowNull));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
@@ -476,7 +491,7 @@
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("geom", Polygon.class, notAllowNull));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
-                "geom", createGeometryType(attrBuilder, "PolygonType", Polygon.class, notAllowNull)));
+                "geom", createGeometryType(attrBuilder, "PolygonType", Polygon.class, notAllowNull, lookupCRS(defaultSRID))));
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("tid", Short.class, notAllowNull));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
@@ -525,7 +540,7 @@
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("geom", LineString.class, notAllowNull));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
-                "geom", createGeometryType(attrBuilder, "LineStringType", LineString.class, notAllowNull)));
+                "geom", createGeometryType(attrBuilder, "LineStringType", LineString.class, notAllowNull, lookupCRS(defaultSRID))));
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("tid", Short.class, notAllowNull));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
@@ -574,7 +589,7 @@
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("geom", MultiLineString.class, notAllowNull));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
-                "geom", createGeometryType(attrBuilder, "MultiLineStringType", MultiLineString.class, notAllowNull)));
+                "geom", createGeometryType(attrBuilder, "MultiLineStringType", MultiLineString.class, notAllowNull, lookupCRS(defaultSRID))));
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("tid", Short.class, notAllowNull));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
@@ -657,7 +672,7 @@
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("geom", MultiPoint.class, notAllowNull));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
-                "geom", createGeometryType(attrBuilder, "MultiPointType", MultiPoint.class, notAllowNull)));
+                "geom", createGeometryType(attrBuilder, "MultiPointType", MultiPoint.class, notAllowNull, lookupCRS(defaultSRID))));
         // typeBuilder.addType(AttributeTypeFactory.newAttributeType("tid", Short.class, notAllowNull));
         attrBuilder = new AttributeTypeBuilder();
         attrDescs.add(attrBuilder.buildDescriptor(
@@ -714,4 +729,71 @@
         typeBuilder.addAll(attrDescs);
         return typeBuilder;
     }
+
+    static int defaultSRID = 3826;
+
+    static TreeMap<Integer, CoordinateReferenceSystem> crsMap = null;
+    static TreeMap<Integer, GeometryConverterDecorator> geometryConverterMap = null;
+
+    static void initializeFactories() {
+        try {
+            crsMap = new TreeMap<Integer, CoordinateReferenceSystem>();
+            CoordinateReferenceSystem wgs84 = CRS.decode("EPSG:4326");
+            crsMap.put(4326, wgs84);
+            CoordinateReferenceSystem epsg3825 = CRS.decode("EPSG:3825"); // TWD97-ZONE 119
+            crsMap.put(3825, epsg3825);
+            CoordinateReferenceSystem epsg3826 = CRS.decode("EPSG:3826"); // TWD97-ZONE 121
+            crsMap.put(3826, epsg3826);
+            CoordinateReferenceSystem epsg3827 = CRS.decode("EPSG:3827"); // TWD67-ZONE 119
+            crsMap.put(3827, epsg3827);
+            CoordinateReferenceSystem epsg3828 = CRS.decode("EPSG:3828"); // TWD67-ZONE 121
+            crsMap.put(3828, epsg3828);
+        } catch (FactoryException e) {
+            LOGGER.warn(e.getMessage(), e);
+        }
+
+        geometryConverterMap = new TreeMap<Integer, GeometryConverterDecorator>();
+        geometryConverterMap.put(3825, new EPSG3825GeometryConverterDecorator());
+        geometryConverterMap.put(3826, new EPSG3826GeometryConverterDecorator());
+    }
+
+    public static CoordinateReferenceSystem lookupCRS(int SRID) {
+        if (crsMap == null) initializeFactories();
+        return crsMap.get(SRID);
+    }
+
+    public static GeometryConverterDecorator lookupGeometryConverter(int SRID) {
+        if (crsMap == null) initializeFactories();
+        return geometryConverterMap.get(SRID);
+    }
+
+    public static GeometryConverterDecorator lookupDefaultGeometryConverter() {
+        return lookupGeometryConverter(defaultSRID);
+    }
+
+    public static int getDefaultFeatureSRID() {
+        return defaultSRID;
+    }
+
+    public static void setDefaultFeatureSRID(int SRID) {
+        initializeFactories();
+        defaultSRID = SRID;
+    }
+
+    public static MathTransform getTWD67ToTWD97Zone191Transform() throws FactoryException {
+        CoordinateReferenceSystem sourceCRS = lookupCRS(3827);
+        CoordinateReferenceSystem targetCRS = lookupCRS(3825);
+
+        MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, true);
+        return transform;
+    }
+
+    public static MathTransform getTWD67ToTWD97Zone121Transform() throws FactoryException {
+        CoordinateReferenceSystem sourceCRS = lookupCRS(3828);
+        CoordinateReferenceSystem targetCRS = lookupCRS(3826);
+
+        MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS, true);
+        // Geometry targetGeometry = JTS.transform( sourceGeometry, transform);
+        return transform;
+    }
 }
diff --git a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/postjts/JTSShape.java b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/postjts/JTSShape.java
index d517b07..13b7d5a 100644
--- a/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/postjts/JTSShape.java
+++ b/xdgnjobs/ximple-spatialjob/src/main/java/com/ximple/eofms/util/postjts/JTSShape.java
@@ -18,9 +18,10 @@
 import com.vividsolutions.jts.geom.Point;
 import com.vividsolutions.jts.geom.Polygon;
 import com.vividsolutions.jts.geom.impl.PackedCoordinateSequence;
+import org.geotools.geometry.jts.JTSFactoryFinder;
 
 public class JTSShape implements Shape {
-    static GeometryFactory fac = new GeometryFactory();
+    static GeometryFactory fac = JTSFactoryFinder.getGeometryFactory(null);
 
     Geometry geom;
 
diff --git a/xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/util/FeatureTypeBuilderUtilTest.java b/xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/util/FeatureTypeBuilderUtilTest.java
new file mode 100644
index 0000000..b7b870f
--- /dev/null
+++ b/xdgnjobs/ximple-spatialjob/src/test/java/com/ximple/eofms/util/FeatureTypeBuilderUtilTest.java
@@ -0,0 +1,20 @@
+package com.ximple.eofms.util;
+
+import org.opengis.referencing.crs.CoordinateReferenceSystem;
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class FeatureTypeBuilderUtilTest {
+    @Test
+    public void testLookupCRS() {
+        CoordinateReferenceSystem crs;
+        crs = FeatureTypeBuilderUtil.lookupCRS(3825);
+        Assert.assertNotNull(crs);
+        crs = FeatureTypeBuilderUtil.lookupCRS(3826);
+        Assert.assertNotNull(crs);
+        crs = FeatureTypeBuilderUtil.lookupCRS(3827);
+        Assert.assertNotNull(crs);
+        crs = FeatureTypeBuilderUtil.lookupCRS(3828);
+        Assert.assertNotNull(crs);
+    }
+}

--
Gitblit v0.0.0-SNAPSHOT