Index: /trunk/data_nodist/projection-regression-test-data.csv
===================================================================
--- /trunk/data_nodist/projection-regression-test-data.csv	(revision 5235)
+++ /trunk/data_nodist/projection-regression-test-data.csv	(revision 5236)
@@ -17,12 +17,4 @@
   en  591305.9239689747 6791477.062909814
   ll2 -29.001580996697747 -176.06257492764087
-EPSG:325801
-  ll  34.015203682036415 -174.10932266644403
-  en  3766942.9163529025 3767610.6690794528
-  ll2 34.01520368202457 -174.10932266640262
-EPSG:325901
-  ll  -42.67913028411371 -177.38213711327558
-  en  3468691.0300340164 5274745.459681193
-  ll2 -42.67913028411191 -177.38213711327558
 EPSG:32602
   ll  -0.35895685791257925 -175.75420623162898
@@ -33,12 +25,4 @@
   en  539148.6502865502 714244.7350888532
   ll2 -83.61115414944909 -167.84722307364663
-EPSG:325802
-  ll  2.6279660285514383 -169.71220572390703
-  en  3643161.6457097256 290545.02786300523
-  ll2 2.6279660285505937 -169.7122057239083
-EPSG:325902
-  ll  -28.96646509876222 -171.82985672429754
-  en  3419144.423939406 6795446.163387009
-  ll2 -28.96646509876411 -171.8298567242976
 EPSG:32603
   ll  69.06942592353653 -164.25619547568132
@@ -49,12 +33,4 @@
   en  457419.4744487591 3384008.1251201406
   ll2 -59.67977504854674 -165.75611289241158
-EPSG:325803
-  ll  28.858993819881626 -162.7838300413958
-  en  3716176.1007948755 3194382.0293374225
-  ll2 28.858993819882425 -162.7838300413879
-EPSG:325903
-  ll  -35.88579209756221 -163.3314276698056
-  en  3650607.709485052 6027433.062688716
-  ll2 -35.885792097561875 -163.33142766980347
 EPSG:32604
   ll  68.49291330851102 -162.96491579603722
@@ -65,12 +41,4 @@
   en  885055.000033729 5033414.625188409
   ll2 -44.74896636985849 -154.13571225126154
-EPSG:325804
-  ll  19.1602869192667 -157.27161512731934
-  en  3681759.2071671444 2119462.9771057065
-  ll2 19.1602869192673 -157.27161512732008
-EPSG:325904
-  ll  -5.554243793843327 -162.73688821077442
-  en  3085827.0319909714 9384761.239788674
-  ll2 -5.554243793834859 -162.73688821046227
 EPSG:32605
   ll  70.45567827510386 -154.8711613318192
@@ -81,12 +49,4 @@
   en  202567.24068296672 9494225.759775288
   ll2 -4.570782032537401 -155.68045181407837
-EPSG:325805
-  ll  47.558680099626386 -152.91349009536611
-  en  3506508.0942535275 5267254.870806244
-  ll2 47.558680099624596 -152.91349009536611
-EPSG:325905
-  ll  -67.03448585424093 -149.10915557769007
-  en  3669319.349906984 2559479.4427412134
-  ll2 -67.03448585415079 -149.10915557784642
 EPSG:32606
   ll  45.0472445968384 -147.48643385071935
@@ -97,12 +57,4 @@
   en  666829.6102985529 3833392.573244692
   ll2 -55.61672629830789 -144.35088100477645
-EPSG:325806
-  ll  23.646357967189935 -146.93885809543016
-  en  3506235.6853181007 2615075.677979285
-  ll2 23.64635796719157 -146.93885809543016
-EPSG:325906
-  ll  -23.95563872144256 -148.58426057256983
-  en  3338794.1024053795 7349779.778157079
-  ll2 -23.955638721444366 -148.58426057257037
 EPSG:32607
   ll  17.160888392541953 -136.88735017825638
@@ -113,12 +65,4 @@
   en  984445.3083006871 9975304.651945615
   ll2 -0.22277876804841829 -136.65059108151155
-EPSG:325807
-  ll  25.601252661823878 -143.02480961724422
-  en  3296655.873159273 2833079.31114311
-  ll2 25.601252661825626 -143.02480961724746
-EPSG:325907
-  ll  -59.282020025193475 -144.22706620376516
-  en  3316162.4281953657 3424091.6679619113
-  ll2 -59.28202002514724 -144.22706620374979
 EPSG:32608
   ll  17.082700048931713 -138.83952009347482
@@ -129,12 +73,4 @@
   en  398815.28724407975 9693905.200367318
   ll2 -2.768962687805876 -135.91033889187185
-EPSG:325808
-  ll  55.46393358936174 -136.5310213256191
-  en  3403200.1922523687 6147484.959461425
-  ll2 55.46393358936161 -136.53102132561946
-EPSG:325908
-  ll  -24.378151080790772 -130.28090785994982
-  en  3978930.3653069055 7295752.519524297
-  ll2 -24.37815108065392 -130.28090785952696
 EPSG:32609
   ll  32.88791124498886 -124.7743273825516
@@ -145,12 +81,4 @@
   en  244542.49842715668 6368487.503688801
   ll2 -32.79190171963808 -131.7278115705747
-EPSG:325809
-  ll  66.39751696914044 -132.53678032719117
-  en  3342048.4023845675 7368688.671792787
-  ll2 66.39751696908735 -132.53678032712693
-EPSG:325909
-  ll  -57.01846507460095 -131.70959025726978
-  en  3335504.639294616 3677294.885709851
-  ll2 -57.018465074583965 -131.70959025727063
 EPSG:32610
   ll  15.621043862710906 -127.89205445312605
@@ -161,12 +89,4 @@
   en  365234.2722858875 1.0173704546361338E7
   ll2 1.5712020890233884 -124.21146729170411
-EPSG:325810
-  ll  54.157170253882065 -120.70356806888559
-  en  3649949.8762614774 6003445.228213763
-  ll2 54.15717025387514 -120.70356806888299
-EPSG:325910
-  ll  -30.490160906382584 -127.43018201881836
-  en  3074627.6043351754 6618544.243526176
-  ll2 -30.490160906245404 -127.43018201925888
 EPSG:32611
   ll  10.73641510533119 -112.16478744764923
@@ -177,12 +97,4 @@
   en  233168.6164003252 5446247.135223156
   ll2 -41.09126192484649 -120.17689123202507
-EPSG:325811
-  ll  27.495781449917963 -118.48664637570047
-  en  3353144.9333348894 3042229.27401776
-  ll2 27.49578144991998 -118.48664637570127
-EPSG:325911
-  ll  -83.43763157076992 -113.13504259887196
-  en  3549277.5170962233 733034.8189518023
-  ll2 -83.4376315707652 -113.13504259905538
 EPSG:32612
   ll  61.77560053459669 -114.5125390548194
@@ -193,12 +105,4 @@
   en  402063.9138540749 1140210.1029349882
   ll2 -79.76744100981378 -115.94410343026465
-EPSG:325812
-  ll  54.732336878937645 -111.71907573020027
-  en  3453696.4850427904 6065244.0334627405
-  ll2 54.73233687893784 -111.71907573020029
-EPSG:325912
-  ll  -47.5968969661014 -107.10151995235918
-  en  3793046.9416754395 4721134.191438857
-  ll2 -47.596896965940005 -107.10151995231445
 EPSG:32613
   ll  4.7583779488046805 -107.92602632992818
@@ -209,12 +113,4 @@
   en  75152.58517323522 8797793.856423587
   ll2 -10.85088716998492 -108.88425627294212
-EPSG:325813
-  ll  66.20959551417033 -109.09161210111962
-  en  3315926.7644572235 7349289.910060517
-  ll2 66.20959551403949 -109.09161210087801
-EPSG:325913
-  ll  -68.06851091663657 -109.88775790882875
-  en  3296450.809507033 2441437.240874543
-  ll2 -68.0685109163161 -109.88775790756797
 EPSG:32614
   ll  14.263757165950743 -100.80954124472483
@@ -225,12 +121,4 @@
   en  599649.1533353492 3693155.667478282
   ll2 -56.89459290929932 -97.36415969181257
-EPSG:325814
-  ll  14.867593373898092 -94.551911603902
-  en  3978916.3793493 1648458.2511148695
-  ll2 14.867593373838202 -94.55191160418451
-EPSG:325914
-  ll  -8.277332733762591 -96.31304814961656
-  en  3796001.0760476636 9084042.61810469
-  ll2 -8.277332733760499 -96.3130481496617
 EPSG:32615
   ll  84.67761930424092 -95.31735150114109
@@ -241,12 +129,4 @@
   en  152136.94772601099 8318235.034911122
   ll2 -15.188620247214823 -96.23707027358184
-EPSG:325815
-  ll  29.659566775760396 -89.14648624583667
-  en  3873068.977744801 3287277.674508805
-  ll2 29.659566775708548 -89.14648624564234
-EPSG:325915
-  ll  -69.26764450162177 -95.62116552395997
-  en  3396471.3392141797 2313578.5751270596
-  ll2 -69.26764450161575 -95.62116552395555
 EPSG:32616
   ll  72.583548496096 -84.95707014904738
@@ -257,12 +137,4 @@
   en  996538.1905094216 9494450.775022857
   ll2 -4.559807376156723 -82.52818257832048
-EPSG:325816
-  ll  39.03683531082378 -91.32884532853011
-  en  3125277.8354169023 4329789.181728653
-  ll2 39.03683531060886 -91.32884532882265
-EPSG:325916
-  ll  -80.48202922319493 -83.22512570057863
-  en  3569637.610377383 1062348.303278951
-  ll2 -80.48202922318502 -83.2251257007239
 EPSG:32617
   ll  58.773416508274885 -79.23342848764487
@@ -273,12 +145,4 @@
   en  389503.5113214161 2645374.949496709
   ll2 -66.2919283666812 -83.46326129024257
-EPSG:325817
-  ll  74.22922998811548 -82.2572616625563
-  en  3461860.3853156655 8238014.811559495
-  ll2 74.22922998811474 -82.25726166255623
-EPSG:325917
-  ll  -26.672436697539396 -84.93179949462775
-  en  3108597.205135338 7043809.945893241
-  ll2 -26.67243669749347 -84.93179949481045
 EPSG:32618
   ll  0.8542824171250176 -70.60589399441409
@@ -289,12 +153,4 @@
   en  334474.62998039776 9716415.67820614
   ll2 -2.5647882790393166 -76.48884831326058
-EPSG:325818
-  ll  54.54759466810166 -70.10559888065576
-  en  3816474.4038224113 6055472.390087243
-  ll2 54.54759466746183 -70.10559888135492
-EPSG:325918
-  ll  -33.09191328447166 -72.04482413314155
-  en  3775823.385116136 6334637.71196932
-  ll2 -33.091913284459345 -72.04482413309498
 EPSG:32619
   ll  9.928164458825613 -66.53356619660251
@@ -305,12 +161,4 @@
   en  563046.3761068006 9634048.929625366
   ll2 -3.3106740144720264 -68.43248658691563
-EPSG:325819
-  ll  39.434976410660475 -64.91063669464722
-  en  3851985.0186811076 4373034.511422034
-  ll2 39.4349764105042 -64.91063669443021
-EPSG:325919
-  ll  -78.61538957033292 -73.24424795954134
-  en  3406552.5585922375 1269556.4361380748
-  ll2 -78.61538957030484 -73.24424795913168
 EPSG:32620
   ll  -2.6787491025025547 -66.88079230367741
@@ -321,12 +169,4 @@
   en  674428.974179743 2240266.5274605397
   ll2 -69.88660504288639 -58.451395275542424
-EPSG:325820
-  ll  64.49300134007495 -62.979335076288066
-  en  3500992.919768428 7151952.6927366005
-  ll2 64.49300134007686 -62.97933507628806
-EPSG:325920
-  ll  -43.937990691739216 -66.64134489151819
-  en  3207746.99622248 5128565.9595632935
-  ll2 -43.93799069164207 -66.64134489159909
 EPSG:32621
   ll  69.83911306601517 -54.4569378254068
@@ -337,12 +177,4 @@
   en  509117.82030811213 9838536.34068649
   ll2 -1.460807694037499 -56.918034017934815
-EPSG:325821
-  ll  51.21005902867042 -57.379470258439625
-  en  3473493.1777381403 5673253.086221185
-  ll2 51.21005902866946 -57.37947025843962
-EPSG:325921
-  ll  -49.499296188014874 -52.907039081672345
-  en  3796326.321966555 4508982.924122001
-  ll2 -49.49929618779302 -52.907039081676324
 EPSG:32622
   ll  14.524484069634685 -53.96374810803576
@@ -353,12 +185,4 @@
   en  547334.5777219022 2511132.649487271
   ll2 -67.5118725686338 -49.89099542229613
-EPSG:325822
-  ll  32.61781547095043 -48.537082717209415
-  en  3731092.3180978494 3611597.5392105747
-  ll2 32.617815470947676 -48.537082717192604
-EPSG:325922
-  ll  -25.281994693195657 -47.87237423257416
-  en  3814983.707942448 7200152.773664493
-  ll2 -25.281994693188874 -47.872374232534604
 EPSG:32623
   ll  16.394157590092313 -42.12374249522621
@@ -369,12 +193,4 @@
   en  383102.3012525303 5866702.311873849
   ll2 -37.33901138489222 -46.3196614813865
-EPSG:325823
-  ll  59.60264479279566 -46.46417576837352
-  en  3417358.700854358 6608070.849842624
-  ll2 59.60264479279691 -46.464175768373735
-EPSG:325923
-  ll  -42.13335698553909 -40.4994655569372
-  en  3871982.980212735 5325605.574904206
-  ll2 -42.133356985222164 -40.499465556709254
 EPSG:32624
   ll  5.131580338571972 -39.26307503457069
@@ -385,12 +201,4 @@
   en  328728.8038014539 2788647.117090909
   ll2 -64.98185873299518 -42.631062127215536
-EPSG:325824
-  ll  75.09851921359484 -43.6400984567463
-  en  3366931.903012309 8339809.29093068
-  ll2 75.09851921350091 -43.64009845586568
-EPSG:325924
-  ll  -31.757981422607287 -39.62137531657344
-  en  3441153.6177650196 6486221.773790808
-  ll2 -31.757981422608655 -39.62137531657346
 EPSG:32625
   ll  -0.7883094164596285 -30.122300530621676
@@ -401,12 +209,4 @@
   en  321704.4754237144 2736137.6100584166
   ll2 -65.44826790796357 -36.847373771693476
-EPSG:325825
-  ll  65.887938688693 -35.070053830491894
-  en  3405648.9567068643 7308975.393513848
-  ll2 65.88793868869246 -35.07005383049174
-EPSG:325925
-  ll  -20.030238632621646 -30.349344491897128
-  en  3777295.662608796 7782974.408009621
-  ll2 -20.03023863262136 -30.34934449189804
 EPSG:32626
   ll  58.43458636013028 -29.168484112078048
@@ -417,12 +217,4 @@
   en  119560.58075143833 4933398.9237327585
   ll2 -45.64851343989748 -31.88249536231209
-EPSG:325826
-  ll  14.237460537145964 -29.544168588724947
-  en  3225457.8650450073 1575488.3512267838
-  ll2 14.23746053714473 -29.54416858870695
-EPSG:325926
-  ll  4.225147273652084 -28.545819653002344
-  en  3328432.6156486133 1.0467184762336606E7
-  ll2 4.22514727365083 -28.545819652999242
 EPSG:32627
   ll  8.344532201175449 -23.182089463285656
@@ -433,12 +225,4 @@
   en  207304.56798461726 4349205.018263729
   ll2 -50.93436625633735 -25.166137353769805
-EPSG:325827
-  ll  4.094370919583472 -23.62056064954077
-  en  3209035.370235288 453034.07665179943
-  ll2 4.0943709195821745 -23.620560649492674
-EPSG:325927
-  ll  -44.664066687330894 -19.261717046318168
-  en  3637801.7645415943 5052896.781212638
-  ll2 -44.664066687327804 -19.26171704631626
 EPSG:32628
   ll  22.510955722354655 -11.39208694243174
@@ -449,12 +233,4 @@
   en  382615.2732716046 1600607.7105868515
   ll2 -75.64145744134245 -19.24386521997399
-EPSG:325828
-  ll  49.071084622707566 -17.35584546969967
-  en  3327939.684002143 5438031.203176502
-  ll2 49.07108462269811 -17.35584546970578
-EPSG:325928
-  ll  -5.379819146453798 -12.53635261155926
-  en  3773025.9429032756 9404800.22025761
-  ll2 -5.3798191464523155 -12.536352611592488
 EPSG:32629
   ll  21.147897974547682 -10.932715320979701
@@ -465,12 +241,4 @@
   en  543962.835055189 722665.361454945
   ll2 -83.53336501935372 -5.501531193708958
-EPSG:325829
-  ll  41.94383312013957 -8.306514012321347
-  en  3557483.4903528546 4643772.640068309
-  ll2 41.943833120137896 -8.306514012321346
-EPSG:325929
-  ll  -42.689366117043875 -7.458484785853329
-  en  3626278.7090851218 5272527.70237086
-  ll2 -42.689366117041615 -7.458484785852194
 EPSG:32630
   ll  7.0485574964722595 -2.895336653090574
@@ -481,12 +249,4 @@
   en  538355.0358692394 945086.5607411675
   ll2 -81.5458994059829 -0.6625327966706558
-EPSG:325830
-  ll  67.8921918268731 -7.824623864366158
-  en  3297541.210536713 7538748.0876726145
-  ll2 67.89219182657125 -7.824623863249039
-EPSG:325930
-  ll  0.4171935875446735 -2.886899629327141
-  en  3512584.9163963683 1.0046112525094511E7
-  ll2 0.4171935875445257 -2.8868996293271394
 EPSG:32631
   ll  62.31144897764639 -1.7488227034434083
@@ -497,12 +257,4 @@
   en  589941.1445311456 1368855.4457779005
   ll2 -77.72996494784715 6.793662550878116
-EPSG:325831
-  ll  -3.7939968357153786 -1.1712382629044498
-  en  3036447.2577582286 -420474.8206135461
-  ll2 -3.793996835702507 -1.171238262284568
-EPSG:325931
-  ll  -48.12092219412692 -0.7289826703408846
-  en  3222506.4959712904 4663531.741793984
-  ll2 -48.1209221940016 -0.7289826703783908
 EPSG:32632
   ll  11.834748738967427 11.598093592769366
@@ -513,12 +265,4 @@
   en  126449.06323080737 9801643.353370322
   ll2 -1.7914913093887788 5.643292387171931
-EPSG:325832
-  ll  77.68629530327402 9.528947032671267
-  en  3512592.552096698 8623417.16234868
-  ll2 77.68629530327236 9.528947032671198
-EPSG:325932
-  ll  -6.14179270149279 4.8242912817139105
-  en  3037594.6533934087 9319316.128949493
-  ll2 -6.141792701472677 4.82429128228072
 EPSG:32633
   ll  42.05539689126687 15.319058068358773
@@ -529,12 +273,4 @@
   en  412530.97644885455 9543809.318915792
   ll2 -4.126836934077884 14.211932975215113
-EPSG:325833
-  ll  67.46670291106749 12.96835463601909
-  en  3413129.3044175194 7484831.153441383
-  ll2 67.46670291106713 12.968354636019292
-EPSG:325933
-  ll  -64.4745973056098 11.208508565566216
-  en  3317785.4845927716 2844655.216510535
-  ll2 -64.47459730551596 11.208508565679992
 EPSG:32634
   ll  75.90951295643045 25.503495199048984
@@ -545,12 +281,4 @@
   en  -22571.106634815456 1.0360208764095124E7
   ll2 3.247885247076826 16.301556703090707
-EPSG:325834
-  ll  -4.517988102520578 22.94921284404035
-  en  3716270.580250685 -499673.68409744324
-  ll2 -4.517988102519327 22.949212844030246
-EPSG:325934
-  ll  -66.80908136058187 16.14267050331656
-  en  3286725.4307625685 2581586.337268074
-  ll2 -66.80908136023545 16.14267050447666
 EPSG:32635
   ll  47.49067536542698 25.527726208112252
@@ -561,12 +289,4 @@
   en  352075.73642084474 2561806.4975045808
   ll2 -67.02488461221535 23.602574863972343
-EPSG:325835
-  ll  59.310337838927126 27.764745794983764
-  en  3543539.7873608056 6574859.024287401
-  ll2 59.31033783892869 27.764745794983803
-EPSG:325935
-  ll  -41.869069478688395 25.134315184294067
-  en  3345169.050015976 5363077.880150447
-  ll2 -41.869069478685255 25.13431518429081
 EPSG:32636
   ll  2.3826611804187845 35.69036984079036
@@ -577,12 +297,4 @@
   en  248987.61723446447 5283887.580592804
   ll2 -42.55662303147199 29.942428252161324
-EPSG:325836
-  ll  16.615535265561583 35.64542638829472
-  en  3782240.027963152 1838888.5328098293
-  ll2 16.615535265560666 35.645426388281585
-EPSG:325936
-  ll  -75.03852317262636 34.434468051988944
-  en  3541334.724856813 1671595.085656195
-  ll2 -75.0385231726253 34.43446805198884
 EPSG:32637
   ll  52.14316359823634 35.33858849767755
@@ -593,12 +305,4 @@
   en  310135.9849165189 2984926.8570488933
   ll2 -63.214447619588334 35.22228781624288
-EPSG:325837
-  ll  6.9163924168089235 39.74685370543559
-  en  3582507.6382259573 764571.1122650943
-  ll2 6.916392416807088 39.74685370543552
-EPSG:325937
-  ll  -14.08852279690737 38.543983228864015
-  en  3450772.8417472583 8442435.788948676
-  ll2 -14.08852279690611 38.54398322886402
 EPSG:32638
   ll  53.91509364067411 42.2117397712837
@@ -609,12 +313,4 @@
   en  907721.7528865209 6272366.919585204
   ll2 -33.61049536177813 49.39342803597181
-EPSG:325838
-  ll  74.9091597003715 48.6558222215854
-  en  3606180.541481807 8316743.387064737
-  ll2 74.90915970034688 48.65582222148265
-EPSG:325938
-  ll  -21.15366469684895 43.8728399352876
-  en  3382970.287678295 7660430.264294319
-  ll2 -21.153664696850008 43.872839935287615
 EPSG:32639
   ll  78.6419869416514 46.228999725737076
@@ -625,12 +321,4 @@
   en  350900.55360484595 5906320.568081439
   ll2 -36.97742607037497 49.324836404927225
-EPSG:325839
-  ll  10.069996634834698 50.89113881049788
-  en  3488071.8580129175 1113153.5634056593
-  ll2 10.069996634832757 50.89113881049788
-EPSG:325939
-  ll  -80.60626087327603 52.65395467079264
-  en  3530133.667575561 1050315.8629393857
-  ll2 -80.60626087327402 52.65395467079222
 EPSG:32640
   ll  53.864121366142705 57.44751774032813
@@ -641,12 +329,4 @@
   en  433274.5310192385 1247408.597646758
   ll2 -78.82845088034634 53.913620238883254
-EPSG:325840
-  ll  59.76387277043521 54.37575445989696
-  en  3352609.2433711775 6628031.663774361
-  ll2 59.76387277042328 54.3757544598978
-EPSG:325940
-  ll  -59.976831400819776 53.71307388643351
-  en  3316584.951075214 3346612.0227742614
-  ll2 -59.97683140076955 53.71307388645429
 EPSG:32641
   ll  49.571868382578565 60.41766515903435
@@ -657,12 +337,4 @@
   en  728606.5155660608 7089027.454681892
   ll2 -26.300363121968427 65.28977338534429
-EPSG:325841
-  ll  35.58653083746617 64.35677273465917
-  en  3622921.5587330637 3938937.297505369
-  ll2 35.58653083746628 64.3567727346599
-EPSG:325941
-  ll  -8.569269531855056 59.196306698858095
-  en  3081142.021083381 9050693.67939459
-  ll2 -8.569269531841547 59.196306699145694
 EPSG:32642
   ll  -1.9071382046033127 69.6619425586165
@@ -673,12 +345,4 @@
   en  305909.44786115893 4838613.998469358
   ll2 -46.577984188152286 66.46686755702721
-EPSG:325842
-  ll  25.166004030978193 65.74989542315689
-  en  3172361.982347163 2787283.797766475
-  ll2 25.166004030968768 65.74989542310783
-EPSG:325942
-  ll  4.080834969902384 68.85686170431453
-  en  3484112.3880951386 1.0451063940938618E7
-  ll2 4.0808349699011 68.85686170431453
 EPSG:32643
   ll  1.4895490042363466 73.50410601478126
@@ -689,12 +353,4 @@
   en  831325.5755857098 7197935.587045648
   ll2 -25.298456802245934 78.29022557747085
-EPSG:325843
-  ll  4.150327197207609 78.3848695646801
-  en  3875887.9687866927 459548.1926994108
-  ll2 4.150327197204124 78.3848695644895
-EPSG:325943
-  ll  -29.743707910694475 76.0025527331224
-  en  3596943.9161184365 6709192.520165732
-  ll2 -29.743707910696273 76.00255273312254
 EPSG:32644
   ll  62.44367553939567 85.9750751673437
@@ -705,12 +361,4 @@
   en  503490.800754981 7419521.505624639
   ll2 -23.33385396213198 81.03414728671824
-EPSG:325844
-  ll  75.60794388867498 76.12849875200254
-  en  3364981.5494354456 8397002.701060116
-  ll2 75.6079438885618 76.12849875337659
-EPSG:325944
-  ll  -30.531583699528298 81.70562992872959
-  en  3567691.5671678428 6622096.716226475
-  ll2 -30.531583699529946 81.70562992872962
 EPSG:32645
   ll  77.10426871059683 89.0221872636809
@@ -721,12 +369,4 @@
   en  647670.9268986753 6918455.120880485
   ll2 -27.85050176577014 88.49974130692154
-EPSG:325845
-  ll  26.567408149697318 83.36177880919017
-  en  3137515.090758361 2943675.0079206247
-  ll2 26.567408149671067 83.36177880907614
-EPSG:325945
-  ll  2.578648544548429 86.376506281797
-  en  3430689.1714494377 1.0285037041594315E7
-  ll2 2.5786485445475793 86.37650628179703
 EPSG:32646
   ll  50.87569190579864 89.74835752271836
@@ -737,12 +377,4 @@
   en  704183.7578679286 7671781.457049133
   ll2 -21.04349177141502 94.96493214411359
-EPSG:325846
-  ll  63.92292390294496 94.7877236444445
-  en  3587673.4974403377 7089654.0896276785
-  ll2 63.92292390294584 94.78772364444468
-EPSG:325946
-  ll  -27.516680128901726 90.30293533287998
-  en  3233587.260784949 6953437.221698701
-  ll2 -27.516680128899825 90.30293533285851
 EPSG:32647
   ll  70.62231324887725 99.90770843411856
@@ -753,12 +385,4 @@
   en  376622.8914274465 8070864.873775644
   ll2 -17.444781767557274 97.8382020112942
-EPSG:325847
-  ll  24.432295988352866 97.04644115456145
-  en  3301945.3911864622 2703485.993828944
-  ll2 24.43229598835463 97.04644115455939
-EPSG:325947
-  ll  -8.286948582210371 97.25620711941067
-  en  3307943.5927900937 9083557.980581835
-  ll2 -8.286948582208613 97.25620711941549
 EPSG:32648
   ll  39.26637557561634 107.38423392284906
@@ -769,12 +393,4 @@
   en  286575.74435410445 3542895.423578527
   ll2 -58.203363958762644 101.36763036814246
-EPSG:325848
-  ll  46.03384980661478 103.1140223730946
-  en  3354054.380634229 5099537.604773986
-  ll2 46.03384980661091 103.11402237309196
-EPSG:325948
-  ll  -40.2015653990426 107.76592292342754
-  en  3735418.107379437 5546201.218221534
-  ll2 -40.20156539902624 107.76592292345568
 EPSG:32649
   ll  11.255609425170523 111.88005555487531
@@ -785,12 +401,4 @@
   en  347437.22738472256 5766575.122088731
   ll2 -38.23589206710225 109.25679480724578
-EPSG:325849
-  ll  40.20888356028617 112.96180753860006
-  en  3666953.426840709 4452787.276805753
-  ll2 40.20888356028306 112.96180753860462
-EPSG:325949
-  ll  -14.246538618712663 111.16491045683226
-  en  3517789.6808880107 8425001.167366339
-  ll2 -14.246538618711444 111.16491045683226
 EPSG:32650
   ll  9.877161924846341 119.53983649063838
@@ -801,12 +409,4 @@
   en  455389.40541231557 6720322.495279071
   ll2 -29.64625641154921 116.53909173945958
-EPSG:325850
-  ll  7.616210715276484 116.45258981636005
-  en  3439619.8795212046 841907.9688378153
-  ll2 7.61621071527457 116.45258981636006
-EPSG:325950
-  ll  -76.47164414673738 118.0058453305328
-  en  3526264.3600744815 1511961.8654556144
-  ll2 -76.47164414673597 118.0058453305327
 EPSG:32651
   ll  29.894404052484198 123.73791699307937
@@ -817,12 +417,4 @@
   en  552907.9443416377 6424786.563103266
   ll2 -32.31249913837346 123.56204788254762
-EPSG:325851
-  ll  21.725369416249812 126.95031997743322
-  en  3908772.515332542 2407651.5549905016
-  ll2 21.725369416216548 126.95031997750917
-EPSG:325951
-  ll  0.7833031741643595 126.9511372405029
-  en  3939972.9174714684 1.0086786231606347E7
-  ll2 0.7833031741624975 126.95113724002216
 EPSG:32652
   ll  51.483168367165725 131.7547299698076
@@ -833,12 +425,4 @@
   en  366330.3564929392 5566680.742924484
   ll2 -40.03951775988467 127.43317318342785
-EPSG:325852
-  ll  77.67504105601225 126.61987537613251
-  en  3443299.8987672958 8623255.149683818
-  ll2 77.67504105600955 126.61987537613504
-EPSG:325952
-  ll  -46.165327233467806 132.73764589755302
-  en  3788543.241543582 4880789.639711136
-  ll2 -46.16532723334612 132.73764589761515
 EPSG:32653
   ll  3.9439937741275237 139.56906177178473
@@ -849,12 +433,4 @@
   en  871098.4449456041 6877512.944383415
   ll2 -28.176037015452554 138.77892968074894
-EPSG:325853
-  ll  26.083256744062194 136.89345436910952
-  en  3689380.01900658 2886280.227147239
-  ll2 26.083256744064073 136.89345436911194
-EPSG:325953
-  ll  -45.87471253428649 134.3177889336392
-  en  3447055.7540481216 4919646.390117302
-  ll2 -45.87471253428452 134.3177889336392
 EPSG:32654
   ll  0.16694081399375094 139.49272157099904
@@ -865,12 +441,4 @@
   en  584959.5966797009 1552021.5295583569
   ll2 -76.09420937278291 144.16836879819374
-EPSG:325854
-  ll  14.035950638187842 140.08015854857118
-  en  3400677.277176704 1551895.6508759246
-  ll2 14.035950638186595 140.0801585485713
-EPSG:325954
-  ll  -25.929690605130276 144.77860345874333
-  en  3878549.273940019 7126639.008097633
-  ll2 -25.929690605097683 144.77860345887737
 EPSG:32655
   ll  15.325514479625792 147.8741788025552
@@ -881,12 +449,4 @@
   en  505872.17624536785 9399764.410398081
   ll2 -5.430354355647516 147.0530080779711
-EPSG:325855
-  ll  77.98041139164597 150.59532728556897
-  en  3583530.9638016927 8658747.742117923
-  ll2 77.98041139163264 150.59532728547734
-EPSG:325955
-  ll  -67.36971313700667 147.14032372466914
-  en  3506025.4076778376 2527397.535901879
-  ll2 -67.36971313700812 147.14032372466914
 EPSG:32656
   ll  5.776293589970747 152.597733111241
@@ -897,12 +457,4 @@
   en  471106.27600235335 4184906.4029197395
   ll2 -52.48522451023299 152.57450200005235
-EPSG:325856
-  ll  75.75021549023971 156.78618479521796
-  en  3603965.805226966 8410644.654430462
-  ll2 75.75021549021352 156.78618479507574
-EPSG:325956
-  ll  -76.53705419120314 152.6360393265017
-  en  3490541.0647844165 1504857.830462996
-  ll2 -76.53705419120176 152.63603932650173
 EPSG:32657
   ll  46.64079768923685 162.60478038581513
@@ -913,12 +465,4 @@
   en  -11660.993969266012 7705261.8022987265
   ll2 -20.682272656454828 154.09167529182264
-EPSG:325857
-  ll  -2.5518216908727664 156.83036399626832
-  en  3258753.8207377037 -282258.28133069887
-  ll2 -2.5518216908720097 156.8303639962868
-EPSG:325957
-  ll  -58.994723879002095 160.57399408839512
-  en  3590438.0945516834 3459470.63889967
-  ll2 -58.99472387900292 160.5739940883954
 EPSG:32658
   ll  -0.9538168752974308 164.16373403116563
@@ -929,12 +473,4 @@
   en  143617.7405419257 9282345.981167397
   ll2 -6.48232231845288 161.77847911410754
-EPSG:325858
-  ll  -2.586076572514262 164.68386700435784
-  en  3464857.720582474 -285845.48559063184
-  ll2 -2.5860765725134036 164.68386700435784
-EPSG:325958
-  ll  -17.66251906484051 161.38408849981434
-  en  3116279.3397864336 8043474.153641874
-  ll2 -17.662519064826693 161.38408849985055
 EPSG:32659
   ll  40.50129189541295 171.1151678182983
@@ -945,12 +481,4 @@
   en  -33309.996839536005 8929144.290482178
   ll2 -9.653111284606696 166.1444317392922
-EPSG:325859
-  ll  52.00257317380204 174.55502943709467
-  en  3744002.8755504917 5767293.095868946
-  ll2 52.00257317370479 174.55502943709706
-EPSG:325959
-  ll  -14.819657409628974 166.9501496486915
-  en  3063930.2734069796 8357673.865215932
-  ll2 -14.819657409599168 166.95014964886468
 EPSG:32660
   ll  84.38466705329412 178.8187390897748
@@ -961,12 +489,4 @@
   en  933779.944968744 5972815.905636307
   ll2 -36.29211488900613 181.82910716792168
-EPSG:325860
-  ll  70.40119916139271 174.88104576259516
-  en  3420687.6959503973 7811996.6522821905
-  ll2 70.40119916139157 174.88104576259576
-EPSG:325960
-  ll  -15.122420619100339 174.82953069805916
-  en  3266743.101644071 8326980.665398677
-  ll2 -15.12242061909968 174.82953069806615
 EPSG:31370
   ll  49.91513996934379 3.0892264075922404
Index: /trunk/src/org/openstreetmap/josm/data/projection/Lambert.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 5235)
+++ /trunk/src/org/openstreetmap/josm/data/projection/Lambert.java	(revision 5236)
@@ -96,4 +96,6 @@
 
     public Lambert(final int layoutZone) {
+        if (layoutZone < 0 || layoutZone >= 4)
+            throw new IllegalArgumentException();
         this.layoutZone = layoutZone;
         ellps = Ellipsoid.clarkeIGN;
Index: /trunk/src/org/openstreetmap/josm/data/projection/ProjectionInfo.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/ProjectionInfo.java	(revision 5235)
+++ /trunk/src/org/openstreetmap/josm/data/projection/ProjectionInfo.java	(revision 5236)
@@ -4,4 +4,5 @@
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.Map;
 
 import org.openstreetmap.josm.gui.preferences.projection.ProjectionChoice;
@@ -9,9 +10,8 @@
 
 public class ProjectionInfo {
-    private static HashMap<String, ProjectionChoice> allCodesPC;
-    private static HashMap<String, Projection> allCodes;
+    private static Map<String, ProjectionChoice> allCodesPC = new HashMap<String, ProjectionChoice>();
+    private static Map<String, Projection> allCodes = new HashMap<String, Projection>();
 
     static {
-        allCodes = new HashMap<String, Projection>();
         for (ProjectionChoice pc : ProjectionPreference.getProjectionChoices()) {
             for (String code : pc.allCodes()) {
Index: /trunk/src/org/openstreetmap/josm/data/projection/Puwg.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/Puwg.java	(revision 5235)
+++ /trunk/src/org/openstreetmap/josm/data/projection/Puwg.java	(revision 5236)
@@ -22,5 +22,5 @@
     private final int zone;
 
-    static public PuwgData[] Zones = new PuwgData[] {
+    static public PuwgData[] zones = new PuwgData[] {
         new Epsg2180(),
         new Epsg2176(),
@@ -35,4 +35,6 @@
 
     public Puwg(int zone) {
+        if (zone < 0 || zone >= zones.length)
+            throw new IllegalArgumentException();
         ellps = Ellipsoid.GRS80;
         proj = new org.openstreetmap.josm.data.projection.proj.TransverseMercator();
@@ -44,5 +46,5 @@
         datum = GRS80Datum.INSTANCE;
         this.zone = zone;
-        PuwgData z = Zones[zone];
+        PuwgData z = zones[zone];
         x_0 = z.getPuwgFalseEasting();
         y_0 = z.getPuwgFalseNorthing();
@@ -58,5 +60,5 @@
     @Override
     public Integer getEpsgCode() {
-        return Zones[zone].getEpsgCode();
+        return zones[zone].getEpsgCode();
     }
 
@@ -68,10 +70,10 @@
     @Override
     public String getCacheDirectoryName() {
-        return Zones[zone].getCacheDirectoryName();
+        return zones[zone].getCacheDirectoryName();
     }
 
     @Override
     public Bounds getWorldBoundsLatLon() {
-        return Zones[zone].getWorldBoundsLatLon();
+        return zones[zone].getWorldBoundsLatLon();
     }
 
Index: /trunk/src/org/openstreetmap/josm/data/projection/UTM.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/UTM.java	(revision 5235)
+++ /trunk/src/org/openstreetmap/josm/data/projection/UTM.java	(revision 5236)
@@ -24,14 +24,11 @@
     private Hemisphere hemisphere;
 
-    /**
-     * Applies an additional false easting of 3000000 m if true.
-     */
-    private boolean offset;
-
     public UTM() {
-        this(DEFAULT_ZONE, DEFAULT_HEMISPHERE, false);
+        this(DEFAULT_ZONE, DEFAULT_HEMISPHERE);
     }
 
-    public UTM(int zone, Hemisphere hemisphere, boolean offset) {
+    public UTM(int zone, Hemisphere hemisphere) {
+        if (zone < 1 || zone > 60)
+            throw new IllegalArgumentException();
         ellps = Ellipsoid.WGS84;
         proj = new org.openstreetmap.josm.data.projection.proj.TransverseMercator();
@@ -44,6 +41,5 @@
         this.zone = zone;
         this.hemisphere = hemisphere;
-        this.offset = offset;
-        x_0 = 500000 + (offset ? 3000000 : 0);
+        x_0 = 500000;
         y_0 = hemisphere == Hemisphere.North ? 0 : 10000000;
         lon_0 = getUtmCentralMeridianDeg(zone);
@@ -81,5 +77,5 @@
     @Override
     public Integer getEpsgCode() {
-        return ((offset?325800:32600) + getzone() + (hemisphere == Hemisphere.South?100:0));
+        return (32600 + getzone() + (hemisphere == Hemisphere.South?100:0));
     }
 
Index: /trunk/src/org/openstreetmap/josm/data/projection/UTM_France_DOM.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/data/projection/UTM_France_DOM.java	(revision 5235)
+++ /trunk/src/org/openstreetmap/josm/data/projection/UTM_France_DOM.java	(revision 5236)
@@ -61,4 +61,6 @@
 
     public UTM_France_DOM(int currentGeodesic) {
+        if (currentGeodesic < 0 || currentGeodesic >= 5)
+            throw new IllegalArgumentException();
         this.currentGeodesic = currentGeodesic;
         datum = utmDatums[currentGeodesic];
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/projection/GaussKruegerProjectionChoice.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/projection/GaussKruegerProjectionChoice.java	(revision 5235)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/projection/GaussKruegerProjectionChoice.java	(revision 5236)
@@ -20,15 +20,18 @@
     @Override
     public Projection getProjection() {
-        return new GaussKrueger(indexToZone(index));
+        return new GaussKrueger(index + 2);
     }
 
     @Override
-    protected int indexToZone(int index) {
-        return index + 2;
+    protected String indexToZone(int index) {
+        return Integer.toString(index + 2);
     }
 
     @Override
-    protected int zoneToIndex(int zone) {
-        return zone - 2;
+    protected int zoneToIndex(String zone) {
+        try {
+            return Integer.parseInt(zone) - 2;
+        } catch(NumberFormatException e) {}
+        return defaultIndex;
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/projection/LambertCC9ZonesProjectionChoice.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/projection/LambertCC9ZonesProjectionChoice.java	(revision 5235)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/projection/LambertCC9ZonesProjectionChoice.java	(revision 5236)
@@ -76,11 +76,14 @@
     
     @Override
-    protected int indexToZone(int index) {
-        return index + 1;
+    protected String indexToZone(int index) {
+        return Integer.toString(index + 1);
     }
 
     @Override
-    protected int zoneToIndex(int zone) {
-        return zone - 1;
+    protected int zoneToIndex(String zone) {
+        try {
+            return Integer.parseInt(zone) - 1;
+        } catch(NumberFormatException e) {}
+        return defaultIndex;
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/projection/LambertProjectionChoice.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/projection/LambertProjectionChoice.java	(revision 5235)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/projection/LambertProjectionChoice.java	(revision 5236)
@@ -70,11 +70,14 @@
 
     @Override
-    protected int indexToZone(int index) {
-        return index + 1;
+    protected String indexToZone(int index) {
+        return Integer.toString(index + 1);
     }
 
     @Override
-    protected int zoneToIndex(int zone) {
-        return zone - 1;
+    protected int zoneToIndex(String zone) {
+        try {
+            return Integer.parseInt(zone) - 1;
+        } catch(NumberFormatException e) {}
+        return defaultIndex;
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java	(revision 5235)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/projection/ListProjectionChoice.java	(revision 5236)
@@ -46,18 +46,16 @@
      * Convert 0-based index to preference value.
      */
-    abstract protected int indexToZone(int index);
+    abstract protected String indexToZone(int index);
 
     /**
      * Convert preference value to 0-based index.
      */
-    abstract protected int zoneToIndex(int zone);
+    abstract protected int zoneToIndex(String zone);
 
     @Override
     public void setPreferences(Collection<String> args) {
-        Integer zone = null;
+        String zone = null;
         if (args != null && args.size() >= 1) {
-            try {
-                zone = Integer.parseInt(args.iterator().next());
-            } catch(NumberFormatException e) {}
+            zone = args.iterator().next();
         }
         int index;
@@ -101,5 +99,5 @@
         CBPanel p = (CBPanel) panel;
         int index = p.prefcb.getSelectedIndex();
-        return Collections.singleton(Integer.toString(indexToZone(index)));
+        return Collections.singleton(indexToZone(index));
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/projection/PuwgProjectionChoice.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/projection/PuwgProjectionChoice.java	(revision 5235)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/projection/PuwgProjectionChoice.java	(revision 5236)
@@ -13,5 +13,5 @@
 
     public PuwgProjectionChoice() {
-        super("core:puwg", tr("PUWG (Poland)"), Puwg.Zones, tr("PUWG Zone"));
+        super("core:puwg", tr("PUWG (Poland)"), Puwg.zones, tr("PUWG Zone"));
     }
 
@@ -23,7 +23,7 @@
     @Override
     public String[] allCodes() {
-        String[] zones = new String[Puwg.Zones.length];
-        for (int zone = 0; zone < Puwg.Zones.length; zone++) {
-            zones[zone] = Puwg.Zones[zone].toCode();
+        String[] zones = new String[Puwg.zones.length];
+        for (int index = 0; index < Puwg.zones.length; index++) {
+            zones[index] = Puwg.zones[index].toCode();
         }
         return zones;
@@ -32,5 +32,5 @@
     @Override
     public Collection<String> getPreferencesFromCode(String code) {
-        for (Puwg.PuwgData p : Puwg.Zones) {
+        for (Puwg.PuwgData p : Puwg.zones) {
             if (code.equals(p.toCode()))
                 return Collections.singleton(code);
@@ -45,11 +45,16 @@
 
     @Override
-    protected int indexToZone(int index) {
-        return index;
+    protected String indexToZone(int index) {
+        return Puwg.zones[index].toCode();
     }
 
     @Override
-    protected int zoneToIndex(int zone) {
-        return zone;
+    protected int zoneToIndex(String zone) {
+        for (int i=0; i<Puwg.zones.length; i++) {
+            if (zone.equals(Puwg.zones[i].toCode())) {
+                return i;
+            }
+        }
+        return defaultIndex;
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java	(revision 5235)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/projection/UTMProjectionChoice.java	(revision 5236)
@@ -12,5 +12,4 @@
 
 import javax.swing.ButtonGroup;
-import javax.swing.JCheckBox;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
@@ -27,9 +26,4 @@
     private UTM.Hemisphere hemisphere;
     
-    /**
-     * Applies an additional false easting of 3000000 m if true.
-     */
-    private boolean offset;
-
     private final static List<String> cbEntries = new ArrayList<String>();
     static {
@@ -46,5 +40,4 @@
 
         public JRadioButton north, south;
-        public JCheckBox offsetBox;
 
         public UTMPanel(Object[] entries, int initialIndex, String label, ActionListener listener) {
@@ -76,17 +69,7 @@
             this.add(GBC.glue(1, 1), GBC.eol().fill(GBC.BOTH));
 
-            //Offset
-            offsetBox = new JCheckBox();
-            offsetBox.setSelected(offset);
-
-            this.add(new JLabel(tr("Offset 3.000.000m east")), GBC.std().insets(5,5,0,5));
-            this.add(GBC.glue(1, 0), GBC.std().fill(GBC.HORIZONTAL));
-            this.add(offsetBox, GBC.eop().fill(GBC.HORIZONTAL));
-            this.add(GBC.glue(1, 1), GBC.eol().fill(GBC.BOTH));
-
             if (listener != null) {
                 north.addActionListener(listener);
                 south.addActionListener(listener);
-                offsetBox.addActionListener(listener);
             }
         }
@@ -100,5 +83,5 @@
     @Override
     public Projection getProjection() {
-        return new UTM(indexToZone(index), hemisphere, offset);
+        return new UTM(index + 1, hemisphere);
     }
 
@@ -108,6 +91,5 @@
         int index = p.prefcb.getSelectedIndex();
         UTM.Hemisphere hemisphere = p.south.isSelected()?UTM.Hemisphere.South:UTM.Hemisphere.North;
-        boolean offset = p.offsetBox.isSelected();
-        return Arrays.asList(Integer.toString(indexToZone(index)), hemisphere.toString(), (offset?"offset":"standard"));
+        return Arrays.asList(indexToZone(index), hemisphere.toString());
     }
 
@@ -116,8 +98,6 @@
         ArrayList<String> projections = new ArrayList<String>(60*4);
         for (int zone = 1;zone <= 60; zone++) {
-            for (boolean offset : new boolean[] { false, true }) {
-                for (UTM.Hemisphere hemisphere : UTM.Hemisphere.values()) {
-                    projections.add("EPSG:" + ((offset?325800:32600) + zone + (hemisphere == UTM.Hemisphere.South?100:0)));
-                }
+            for (UTM.Hemisphere hemisphere : UTM.Hemisphere.values()) {
+                projections.add("EPSG:" + (32600 + zone + (hemisphere == UTM.Hemisphere.South?100:0)));
             }
         }
@@ -127,21 +107,12 @@
     @Override
     public Collection<String> getPreferencesFromCode(String code) {
-        boolean offset = code.startsWith("EPSG:3258") || code.startsWith("EPSG:3259");
 
-        if (code.startsWith("EPSG:326") || code.startsWith("EPSG:327") || offset) {
+        if (code.startsWith("EPSG:326") || code.startsWith("EPSG:327")) {
             try {
-                UTM.Hemisphere hemisphere;
-                String zonestring;
-                if (offset) {
-                    hemisphere = code.charAt(8)=='8'?UTM.Hemisphere.North:UTM.Hemisphere.South;
-                    zonestring = code.substring(9);
-                } else {
-                    hemisphere = code.charAt(7)=='6'?UTM.Hemisphere.North:UTM.Hemisphere.South;
-                    zonestring = code.substring(8);
-                }
-
+                UTM.Hemisphere hemisphere = code.charAt(7)=='6'?UTM.Hemisphere.North:UTM.Hemisphere.South;
+                String zonestring = code.substring(8);
                 int zoneval = Integer.parseInt(zonestring);
                 if(zoneval > 0 && zoneval <= 60)
-                    return Arrays.asList(zonestring, hemisphere.toString(), (offset?"offset":"standard"));
+                    return Arrays.asList(zonestring, hemisphere.toString());
             } catch(NumberFormatException e) {}
         }
@@ -153,5 +124,4 @@
         super.setPreferences(args);
         UTM.Hemisphere hemisphere = DEFAULT_HEMISPHERE;
-        boolean offset = false;
 
         if(args != null) {
@@ -161,21 +131,19 @@
                 hemisphere = UTM.Hemisphere.valueOf(array[1]);
             }
-
-            if (array.length > 2) {
-                offset = array[2].equals("offset");
-            }
         }
         this.hemisphere = hemisphere;
-        this.offset = offset;
     }
 
     @Override
-    protected int indexToZone(int index) {
-        return index + 1;
+    protected String indexToZone(int index) {
+        return Integer.toString(index + 1);
     }
 
     @Override
-    protected int zoneToIndex(int zone) {
-        return zone - 1;
+    protected int zoneToIndex(String zone) {
+        try {
+            return Integer.parseInt(zone) - 1;
+        } catch(NumberFormatException e) {}
+        return defaultIndex;
     }
 
Index: /trunk/src/org/openstreetmap/josm/gui/preferences/projection/UTM_France_DOM_ProjectionChoice.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/preferences/projection/UTM_France_DOM_ProjectionChoice.java	(revision 5235)
+++ /trunk/src/org/openstreetmap/josm/gui/preferences/projection/UTM_France_DOM_ProjectionChoice.java	(revision 5236)
@@ -24,11 +24,14 @@
 
     @Override
-    protected int indexToZone(int index) {
-        return index + 1;
+    protected String indexToZone(int index) {
+        return Integer.toString(index + 1);
     }
 
     @Override
-    protected int zoneToIndex(int zone) {
-        return zone - 1;
+    protected int zoneToIndex(String zone) {
+        try {
+            return Integer.parseInt(zone) - 1;
+        } catch(NumberFormatException e) {}
+        return defaultIndex;
     }
 
Index: /trunk/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java	(revision 5235)
+++ /trunk/test/unit/org/openstreetmap/josm/data/projection/ProjectionRefTest.java	(revision 5236)
@@ -12,4 +12,5 @@
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
 
@@ -17,4 +18,6 @@
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
+import org.openstreetmap.josm.gui.preferences.projection.ProjectionChoice;
+import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
 import org.openstreetmap.josm.tools.Utils;
 
@@ -29,20 +32,15 @@
 
     /**
-     * create a list of epsg codes and bounds to be used by
+     * create a list of epsg codes and bounds to be used by the perl script
      * @param args
      */
     public static void main(String[] args) {
-        HashMap<String, Projection> allCodes = new LinkedHashMap<String, Projection>();
-        List<Projection> projs = Projections.getProjections();
-        for (Projection p: projs) {
-            if (p instanceof ProjectionSubPrefs) {
-                for (String code : ((ProjectionSubPrefs)p).allCodes()) {
-                    ProjectionSubPrefs projSub = recreateProj((ProjectionSubPrefs)p);
-                    Collection<String> prefs = projSub.getPreferencesFromCode(code);
-                    projSub.setPreferences(prefs);
-                    allCodes.put(code, projSub);
-                }
-            } else {
-                allCodes.put(p.toCode(), p);
+        Map<String, Projection> allCodes = new HashMap<String, Projection>();
+        for (ProjectionChoice pc : ProjectionPreference.getProjectionChoices()) {
+            for (String code : pc.allCodes()) {
+                Collection<String> pref = pc.getPreferencesFromCode(code);
+                pc.setPreferences(pref);
+                Projection p = pc.getProjection();
+                allCodes.put(code, p);
             }
         }
@@ -51,14 +49,5 @@
         }
     }
-
-    private static ProjectionSubPrefs recreateProj(ProjectionSubPrefs proj) {
-        try {
-            return proj.getClass().newInstance();
-        } catch (Exception e) {
-            throw new IllegalStateException(
-                    tr("Cannot instantiate projection ''{0}''", proj.getClass().toString()), e);
-        }
-    }
-
+ 
     @Test
     public void test() throws IOException, FileNotFoundException {
Index: /trunk/test/unit/org/openstreetmap/josm/data/projection/ProjectionRegressionTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/projection/ProjectionRegressionTest.java	(revision 5235)
+++ /trunk/test/unit/org/openstreetmap/josm/data/projection/ProjectionRegressionTest.java	(revision 5236)
@@ -2,5 +2,4 @@
 package org.openstreetmap.josm.data.projection;
 
-import static org.openstreetmap.josm.tools.I18n.tr;
 
 import java.io.BufferedReader;
@@ -12,10 +11,8 @@
 import java.io.IOException;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.LinkedHashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -31,5 +28,6 @@
 import org.openstreetmap.josm.data.coor.EastNorth;
 import org.openstreetmap.josm.data.coor.LatLon;
-import org.openstreetmap.josm.tools.Utils;
+import org.openstreetmap.josm.gui.preferences.projection.ProjectionChoice;
+import org.openstreetmap.josm.gui.preferences.projection.ProjectionPreference;
 import org.openstreetmap.josm.tools.Pair;
 
@@ -58,16 +56,12 @@
     public static void main(String[] args) throws IOException, FileNotFoundException {
         setUp();
-        Map<String, Projection> allCodes = new LinkedHashMap<String, Projection>();
-        List<Projection> projs = Projections.getProjections();
-        for (Projection p: projs) {
-            if (p instanceof ProjectionSubPrefs) {
-                for (String code : ((ProjectionSubPrefs)p).allCodes()) {
-                    ProjectionSubPrefs projSub = recreateProj((ProjectionSubPrefs)p);
-                    Collection<String> prefs = projSub.getPreferencesFromCode(code);
-                    projSub.setPreferences(prefs);
-                    allCodes.put(code, projSub);
-                }
-            } else {
-                allCodes.put(p.toCode(), p);
+
+        Map<String, Projection> supportedCodesMap = new HashMap<String, Projection>();
+        for (ProjectionChoice pc : ProjectionPreference.getProjectionChoices()) {
+            for (String code : pc.allCodes()) {
+                Collection<String> pref = pc.getPreferencesFromCode(code);
+                pc.setPreferences(pref);
+                Projection p = pc.getProjection();
+                supportedCodesMap.put(code, p);
             }
         }
@@ -77,7 +71,19 @@
             prevData = readData();
         }
-        Map<String,TestData> prevCodes = new HashMap<String,TestData>();
+        Map<String,TestData> prevCodesMap = new HashMap<String,TestData>();
         for (TestData data : prevData) {
-            prevCodes.put(data.code, data);
+            prevCodesMap.put(data.code, data);
+        }
+
+        Set<String> codesToWrite = new LinkedHashSet<String>();
+        for (TestData data : prevData) {
+            if (supportedCodesMap.containsKey(data.code)) {
+                codesToWrite.add(data.code);
+            }
+        }
+        for (String code : supportedCodesMap.keySet()) {
+            if (!codesToWrite.contains(code)) {
+                codesToWrite.add(code);
+            }
         }
 
@@ -86,9 +92,11 @@
         out.write("# Data for test/unit/org/openstreetmap/josm/data/projection/ProjectionRegressionTest.java\n");
         out.write("# Format: 1. Projection code; 2. lat/lon; 3. lat/lon projected -> east/north; 4. east/north (3.) inverse projected\n");
-        for (Entry<String, Projection> e : allCodes.entrySet()) {
-            Projection proj = e.getValue();
+        for (Entry<String, Projection> e : supportedCodesMap.entrySet()) {
+        }
+        for (String code : codesToWrite) {
+            Projection proj = supportedCodesMap.get(code);
             Bounds b = proj.getWorldBoundsLatLon();
             double lat, lon;
-            TestData prev = prevCodes.get(proj.toCode());
+            TestData prev = prevCodesMap.get(proj.toCode());
             if (prev != null) {
                 lat = prev.ll.lat();
@@ -103,13 +111,4 @@
         }
         out.close();
-    }
-
-    private static ProjectionSubPrefs recreateProj(ProjectionSubPrefs proj) {
-        try {
-            return proj.getClass().newInstance();
-        } catch (Exception e) {
-            throw new IllegalStateException(
-                    tr("Cannot instantiate projection ''{0}''", proj.getClass().toString()), e);
-        }
     }
 
@@ -163,13 +162,6 @@
         StringBuilder fail = new StringBuilder();
 
-        List<Projection> projs = Projections.getProjections();
-        for (Projection p: projs) {
-            Collection<String> codes = null;
-            if (p instanceof ProjectionSubPrefs) {
-                codes = Arrays.asList(((ProjectionSubPrefs)p).allCodes());
-            } else {
-                codes = Collections.singleton(p.toCode());
-            }
-            for (String code : codes) {
+        for (ProjectionChoice pc : ProjectionPreference.getProjectionChoices()) {
+            for (String code : pc.allCodes()) {
                if (!dataCodes.contains(code)) {
                     fail.append("Did not find projection "+code+" in test data!\n");
Index: /trunk/test/unit/org/openstreetmap/josm/data/projection/ProjectionTest.java
===================================================================
--- /trunk/test/unit/org/openstreetmap/josm/data/projection/ProjectionTest.java	(revision 5235)
+++ /trunk/test/unit/org/openstreetmap/josm/data/projection/ProjectionTest.java	(revision 5236)
@@ -2,5 +2,4 @@
 package org.openstreetmap.josm.data.projection;
 
-import java.util.Collections;
 import java.util.Random;
 
@@ -30,45 +29,35 @@
         }
 
-        Lambert lam = new Lambert();
-        for (int zone=1; zone<=4; ++zone) {
-            lam.setPreferences(Collections.singletonList(Integer.toString(zone)));
-            testProj(lam);
+        for (int i=0; i<=3; ++i) {
+            testProj(new Lambert(i));
         }
 
-        Puwg puwg = new Puwg();
-        for (PuwgData pd : Puwg.Zones) {
-            puwg.setPreferences(Collections.singletonList(pd.toCode()));
-            testProj(puwg);
+        for (int i=0; i<=4; ++i) {
+            testProj(new Puwg(i));
         }
 
         testProj(new SwissGrid());
 
-        UTM utm = new UTM();
         for (int i=0; i<=6; ++i) {
             int zone;
             if (i==0) {
-                zone = 0;
+                zone = 1;
             } else if (i==6) {
-                zone = 59;
+                zone = 60;
             } else {
-                zone = rand.nextInt(60);
+                zone = rand.nextInt(60) + 1;
             }
-            utm.setPreferences(Collections.singletonList(Integer.toString(zone)));
-            testProj(utm);
-
+            UTM.Hemisphere hem = rand.nextBoolean() ? UTM.Hemisphere.North : UTM.Hemisphere.South;
+            testProj(new UTM(zone, hem));
         }
 
         if (!"yes".equals(System.getProperty("suppressPermanentFailure"))) {
-            UTM_France_DOM utmFr = new UTM_France_DOM();
-            for (int zone=1; zone<=5; ++zone) {
-                utmFr.setPreferences(Collections.singletonList(Integer.toString(zone)));
-                testProj(utmFr);
+            for (int i=0; i<=4; ++i) {
+                testProj(new UTM_France_DOM(i));
             }
         }
 
-        LambertCC9Zones lamCC9 = new LambertCC9Zones();
-        for (int i=1; i<=9; ++i) {
-            lamCC9.setPreferences(Collections.singletonList(Integer.toString(i)));
-            testProj(lamCC9);
+        for (int i=0; i<=8; ++i) {
+            testProj(new LambertCC9Zones(i));
         }
 
