Merged from 0.8

Change-Id: I02cf4990118631fcb34846b6f84a1ccd6798021d
diff --git a/bundles/org.eclipse.uomo.business/.classpath b/bundles/org.eclipse.uomo.business/.classpath
index 04f0184..b5948d9 100644
--- a/bundles/org.eclipse.uomo.business/.classpath
+++ b/bundles/org.eclipse.uomo.business/.classpath
@@ -1,7 +1,8 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src/main/java/"/>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src/main/java"/>

+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Indriya"/>

+	<classpathentry kind="output" path="target/classes"/>

+</classpath>

diff --git a/bundles/org.eclipse.uomo.business/META-INF/MANIFEST.MF b/bundles/org.eclipse.uomo.business/META-INF/MANIFEST.MF
index 3e0903b..90a06af 100644
--- a/bundles/org.eclipse.uomo.business/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.uomo.business/META-INF/MANIFEST.MF
@@ -4,6 +4,17 @@
 Bundle-SymbolicName: org.eclipse.uomo.business
 Bundle-Version: 0.8.0.qualifier
 Bundle-Vendor: Eclipse.org
+Import-Package: javax.measure;version="[1.0,2)",
+ javax.measure.format;version="[1.0,2)",
+ javax.measure.quantity;version="[1.0,2)",
+ javax.measure.spi;version="[1.0,2)",
+ tech.units.indriya,
+ tech.units.indriya.format,
+ tech.units.indriya.function,
+ tech.units.indriya.quantity,
+ tech.units.indriya.spi,
+ tech.units.indriya.unit,
+ systems.uom.quantity
 Require-Bundle: org.eclipse.uomo.core;bundle-version="0.8.0",
- org.eclipse.uomo.units;bundle-version="0.5.0"
+ com.ibm.icu;bundle-version="4.2.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
diff --git a/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MonetaryUnits.java b/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MonetaryUnits.java
index 3f9c181..6706e4a 100644
--- a/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MonetaryUnits.java
+++ b/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MonetaryUnits.java
@@ -1,5 +1,5 @@
 /**

- * Copyright (c) 2006, 2013, Werner Keil and others.

+ * Copyright (c) 2006, 2020, Werner Keil and others.

  * All rights reserved. This program and the accompanying materials

  * are made available under the terms of the Eclipse Public License v1.0

  * which accompanies this distribution, and is available at

@@ -11,8 +11,8 @@
 package org.eclipse.uomo.business.money;

 

 import org.eclipse.uomo.business.types.IMoney;

-import org.eclipse.uomo.units.AbstractSystemOfUnits;

-import org.unitsofmeasurement.unit.SystemOfUnits;

+import tech.units.indriya.AbstractSystemOfUnits;

+import javax.measure.spi.SystemOfUnits;

 import javax.measure.Unit;

 

 import com.ibm.icu.util.Currency;

@@ -59,7 +59,7 @@
      * @return <code>unit</code>.

      */

     private final static <U extends Unit<?>> U monetary(U unit) {

-        UNITS.add(unit);

+        INSTANCE.add(unit);

         return unit;

     }

 

diff --git a/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MoneyAmount.java b/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MoneyAmount.java
index 3598c5a..2c94656 100644
--- a/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MoneyAmount.java
+++ b/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MoneyAmount.java
@@ -18,11 +18,10 @@
 import org.eclipse.uomo.business.internal.CurrencyUnit;
 import org.eclipse.uomo.business.internal.MonetaryAmount;
 import org.eclipse.uomo.business.internal.MonetaryOperator;
-import org.eclipse.uomo.business.types.IMoney;
+import org.eclipse.uomo.business.types.Quantity;
 import org.eclipse.uomo.core.UOMoRuntimeException;
-import org.eclipse.uomo.units.AbstractConverter;
-import org.eclipse.uomo.units.IMeasure;
-import org.eclipse.uomo.units.QuantityAmount;
+import tech.units.indriya.AbstractConverter;
+import javax.measure.Quantity;
 import org.eclipse.uomo.units.impl.converter.RationalConverter;
 import org.unitsofmeasurement.unit.IncommensurableException;
 import org.unitsofmeasurement.unit.UnconvertibleException;
@@ -40,13 +39,13 @@
  * @author <a href="mailto:units@catmedia.us">Werner Keil</a>
  * @version 0.8, $Date: 2014-08-03 $
  */
-public class MoneyAmount extends QuantityAmount<IMoney> implements IMoney, MonetaryAmount,
+public class MoneyAmount extends QuantityAmount<Quantity> implements Quantity, MonetaryAmount,
 		Comparable<MonetaryAmount> {
 
 	/**
 	 * Holds the base unit for money quantities (symbol "$").
 	 */
-	public final static MoneyUnit<IMoney> UNIT = new MoneyUnit<IMoney>(
+	public final static MoneyUnit<Quantity> UNIT = new MoneyUnit<Quantity>(
 			"$");
 
 	/**
@@ -134,7 +133,7 @@
 	 *             if the SI unit of the specified amount is not a
 	 *             {@link Currency}.
 	 */
-	public static MoneyAmount of(QuantityAmount<IMoney> amount) {
+	public static MoneyAmount of(QuantityAmount<Quantity> amount) {
 		// MoneyAmount amountSI = amount.toSI();
 		return MoneyAmount.of(BigDecimal.valueOf(amount.getValue()
 				.doubleValue()), amount.unit().getSystemUnit());
@@ -183,7 +182,7 @@
 	// return MoneyAmount.valueOf(_value.opposite(), getCurrency());
 	// }
 
-	protected MoneyAmount plus(IMoney that) {
+	protected MoneyAmount plus(Quantity that) {
 		// Measure<BigDecimal, ?> amount = that.to((Unit) getCurrency());
 		return MoneyAmount.of(this.getNumber().doubleValue()
 				+ that.value().doubleValue(), getCurrency());
@@ -254,17 +253,17 @@
 	 * @provisional This API might change or be removed in a future release.
 	 */
 	@SuppressWarnings("unchecked")
-	public MoneyUnit<IMoney> unit() {
-		return (MoneyUnit<IMoney>) getUnit();
+	public MoneyUnit<Quantity> unit() {
+		return (MoneyUnit<Quantity>) getUnit();
 	}
 
-	public int compareTo(IMoney o) {
+	public int compareTo(Quantity o) {
 		// TODO Auto-generated method stub
 		return 0;
 	}
 
-	public double doubleValue(Unit<IMoney> unit) {
-		Unit<IMoney> myUnit = unit();
+	public double doubleValue(Unit<Quantity> unit) {
+		Unit<Quantity> myUnit = unit();
 		try {
 			UnitConverter converter = unit.getConverterToAny(myUnit);
 			return converter.convert(getNumber().doubleValue());
@@ -275,8 +274,8 @@
 		}
 	}
 
-	public long longValue(Unit<IMoney> unit) throws ArithmeticException {
-		Unit<IMoney> myUnit = unit();
+	public long longValue(Unit<Quantity> unit) throws ArithmeticException {
+		Unit<Quantity> myUnit = unit();
 		try {
 			UnitConverter converter = unit.getConverterToAny(myUnit);
 			return (converter.convert(BigDecimal.valueOf(super.getNumber()
@@ -288,25 +287,25 @@
 		}
 	}
 
-	public IMeasure<IMoney> divide(IMeasure<?> that) {
+	public Quantity<Quantity> divide(Quantity<?> that) {
 		return divide((MoneyAmount) that);
 	}
 
-	public IMeasure<IMoney> multiply(IMeasure<?> that) {
+	public Quantity<Quantity> multiply(Quantity<?> that) {
 		return multiply((MonetaryAmount) that);
 	}
 
-	public IMeasure<IMoney> to(Unit<IMoney> unit) {
+	public Quantity<Quantity> to(Unit<Quantity> unit) {
 		return to(unit, MathContext.DECIMAL32);
 	}
 
-	protected IMeasure<IMoney> to(Unit<IMoney> unit, MathContext ctx) {
+	protected Quantity<Quantity> to(Unit<Quantity> unit, MathContext ctx) {
 		if (this.unit().equals(unit))
 			return this;
 		UnitConverter cvtr = this.unit().getConverterTo(unit);
 		if (cvtr == AbstractConverter.IDENTITY)
-			return (IMeasure<IMoney>) of(this.getNumber(), unit);
-		return (IMeasure<IMoney>) of(convert(this.getNumber(), cvtr, ctx),
+			return (Quantity<Quantity>) of(this.getNumber(), unit);
+		return (Quantity<Quantity>) of(convert(this.getNumber(), cvtr, ctx),
 				unit);
 	}
 
@@ -367,8 +366,8 @@
 		return getNumber();
 	}
 
-	public IMeasure<? extends IMeasure<IMoney>> inverse() {
-		final IMeasure<? extends IMeasure<IMoney>> m = of(value(), unit()
+	public Quantity<? extends Quantity<Quantity>> inverse() {
+		final Quantity<? extends Quantity<Quantity>> m = of(value(), unit()
 				.inverse());
 		return m;
 	}
@@ -690,8 +689,8 @@
 	}
 
 	@Override
-	public IMoney add(IMeasure<IMoney> that) {
-		return plus((IMoney) that);
+	public Quantity add(Quantity<Quantity> that) {
+		return plus((Quantity) that);
 	}
 
 	@Override
@@ -700,7 +699,7 @@
 	}
 
 	@Override
-	public IMeasure<IMoney> subtract(IMeasure<IMoney> that) {
+	public Quantity<Quantity> subtract(Quantity<Quantity> that) {
 		// TODO Auto-generated method stub
 		return null;
 	}
diff --git a/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MoneyConverter.java b/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MoneyConverter.java
index 372ad53..79902d3 100644
--- a/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MoneyConverter.java
+++ b/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MoneyConverter.java
@@ -23,7 +23,6 @@
 import org.eclipse.uomo.business.internal.ExchangeRate;
 import org.eclipse.uomo.business.internal.Messages;
 import org.eclipse.uomo.business.types.IMoney;
-import org.eclipse.uomo.units.AbstractConverter;
 import javax.measure.Unit;
 import javax.measure.UnitConverter;
 
@@ -46,10 +45,10 @@
  * 
  * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
  * @author <a href="mailto:units@catmedia.us">Werner Keil</a>
- * @version 5.3, $Date: 2013-05-25 $
+ * @version 5.4, $Date: 2020-03-17 $
  * @deprecated use JSR 354
  */
-public class MoneyConverter extends AbstractConverter implements Formattable {
+public class MoneyConverter implements UnitConverter, Formattable {
 
 	/**
      * 
@@ -284,4 +283,10 @@
 
 		fmt.format(sb.toString());
 	}
+
+	@Override
+	public List<? extends UnitConverter> getConversionSteps() {
+		// TODO Auto-generated method stub
+		return null;
+	}
 }
diff --git a/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MoneyUnit.java b/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MoneyUnit.java
index 0a37c43..151fbb3 100644
--- a/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MoneyUnit.java
+++ b/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/money/MoneyUnit.java
@@ -19,28 +19,30 @@
 import org.eclipse.uomo.business.internal.Localizable;
 import org.eclipse.uomo.business.types.IMoney;
 import org.eclipse.uomo.core.IName;
-import org.eclipse.uomo.units.AbstractConverter;
-import org.eclipse.uomo.units.AbstractUnit;
-import org.eclipse.uomo.units.impl.AlternateUnit;
-import org.eclipse.uomo.units.impl.ProductUnit;
-import org.eclipse.uomo.units.impl.TransformedUnit;
-import org.eclipse.uomo.units.impl.converter.AddConverter;
-import org.eclipse.uomo.units.impl.converter.MultiplyConverter;
-import org.eclipse.uomo.units.impl.converter.RationalConverter;
+
 import javax.measure.Quantity;
+import javax.measure.UnconvertibleException;
 import javax.measure.Dimension;
-import org.unitsofmeasurement.unit.IncommensurableException;
-import org.unitsofmeasurement.unit.UnconvertibleException;
+import javax.measure.IncommensurableException;
 import javax.measure.Unit;
 import javax.measure.UnitConverter;
 
 import com.ibm.icu.util.Currency;
 import com.ibm.icu.util.ULocale;
 
+import tech.units.indriya.AbstractConverter;
+import tech.units.indriya.AbstractUnit;
+import tech.units.indriya.function.AddConverter;
+import tech.units.indriya.function.MultiplyConverter;
+import tech.units.indriya.function.RationalConverter;
+import tech.units.indriya.unit.AlternateUnit;
+import tech.units.indriya.unit.ProductUnit;
+import tech.units.indriya.unit.TransformedUnit;
+
 
 /**
  * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 0.2.8, $Date: 2015-04-15
+ * @version 0.3, $Date: 2020-03-16
  * @param <Q> the monetary quantity
  * 
  */
@@ -168,7 +170,7 @@
 	 */
 	@SuppressWarnings({ "unchecked", "rawtypes" })
 	public final Unit<IMoney> alternate(String symbol) {
-		return new AlternateUnit(symbol, this);
+		return new AlternateUnit(this, symbol);
 	}
 
 	public <T extends Quantity<T>> Unit<T> asType(Class<T> type) {
@@ -244,7 +246,7 @@
 			return this;
 		if (this.isRationalFactor())
 			return this.transform(this.getConverterTo((Unit) ONE).inverse());
-		return ProductUnit.getQuotientInstance(ONE, this);
+		return ProductUnit.ofQuotient(ONE, this);
 	}
 
 	public boolean isCompatible(Unit<?> that) {
@@ -300,7 +302,7 @@
 			return that.transform(this.getConverterTo(ONE));
 		if (((MoneyUnit<?>) that).isRationalFactor())
 			return this.transform(that.getConverterTo((Unit) ONE));
-		return ProductUnit.getProductInstance(this, (AbstractUnit<?>) that);
+		return ProductUnit.ofProduct(this, (AbstractUnit<?>) that);
 	}
 
 	/**
@@ -332,7 +334,7 @@
 	 */
 	public final Unit<?> root(int n) {
 		if (n > 0)
-			return ProductUnit.getRootInstance(this, n);
+			return ProductUnit.ofRoot(this, n);
 		else if (n == 0)
 			throw new ArithmeticException("Root's order of zero"); //$NON-NLS-1$
 		else
@@ -361,7 +363,7 @@
 			Unit<IMoney> tf = this;
 			Unit<?> parent = (Unit<?>) ((TransformedUnit<?>) tf)
 					.getParentUnit();
-			UnitConverter toParent = ((TransformedUnit<?>) tf).toParentUnit();
+			UnitConverter toParent = tf.getConverterTo((Unit<IMoney>) parent);
 			if (toParent == null)
 				return (Unit<IMoney>) parent;
 			UnitConverter toParentConcat = toParent.concatenate(operation);
@@ -478,6 +480,18 @@
 		return new MoneyUnit(currencyCode);
 	}
 
+	@Override
+	public Map<? extends Unit<?>, Integer> getBaseUnits() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public Unit<IMoney> shift(double offset) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
 //	public String getDisplayName(Locale locale) {
 //		return getName(ULocale.forLocale(locale), LONG_NAME, new boolean[1]);
 //	}
diff --git a/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/types/IMarket.java b/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/types/IMarket.java
index 183601d..3e4d223 100644
--- a/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/types/IMarket.java
+++ b/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/types/IMarket.java
@@ -4,7 +4,7 @@
 
 import org.eclipse.uomo.core.IName;
 import org.eclipse.uomo.core.ISymbol;
-import org.unitsofmeasurement.quantity.Time;
+import javax.measure.quantity.Time;
 import javax.measure.Unit;
 
 import com.ibm.icu.util.Holiday;
diff --git a/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/types/IMoney.java b/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/types/IMoney.java
index e6d98fb..1613d5f 100644
--- a/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/types/IMoney.java
+++ b/bundles/org.eclipse.uomo.business/src/main/java/org/eclipse/uomo/business/types/IMoney.java
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.
+ * Copyright (c) 2005, 2020, Werner Keil and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,8 @@
 
 import static org.eclipse.uomo.business.money.MoneyAmount.UNIT;
 
-import org.eclipse.uomo.units.IMeasure;
 import javax.measure.Dimension;
+import javax.measure.Quantity;
 
 /**
  * This interface represents something generally accepted as a medium of
@@ -24,7 +24,7 @@
  * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
  * @version 3.2 ($Revision: 227 $), $Date: 2010-10-01 00:54:55 +0200 (Fr, 01 Okt 2010) $
  */
-public interface IMoney extends IBDType, IMeasure<IMoney> {
+public interface IMoney extends IBDType, Quantity<IMoney> {
 
     /**
      * Holds the dimension for money quantities (dimension [$]).
diff --git a/bundles/org.eclipse.uomo.core/META-INF/MANIFEST.MF b/bundles/org.eclipse.uomo.core/META-INF/MANIFEST.MF
index 2cddaef..710e0c7 100644
--- a/bundles/org.eclipse.uomo.core/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.uomo.core/META-INF/MANIFEST.MF
@@ -19,7 +19,7 @@
 Bundle-Activator: org.eclipse.uomo.core.internal.Activator

 Bundle-ManifestVersion: 2

 Bundle-Description: UOMo adds Units of Measurement support for IT Syst

- ems and Services both to Language and Data.

+ ems to Services and Data.

 Import-Package: com.ibm.icu.math,

  org.osgi.framework;version="1.3",

  org.osgi.util.tracker

@@ -27,6 +27,4 @@
 Bundle-DocURL: http://www.eclipse.org

 Include-Resource: src/main/resources

 Originally-Created-By: 1.6.0_23-ea (Sun Microsystems Inc.)

-Bundle-ClassPath: libs/unit-api-0.6.1.jar,

- .

-

+Bundle-ClassPath: .

diff --git a/bundles/org.eclipse.uomo.core/build.properties b/bundles/org.eclipse.uomo.core/build.properties
index 0ba6ea6..5791b54 100644
--- a/bundles/org.eclipse.uomo.core/build.properties
+++ b/bundles/org.eclipse.uomo.core/build.properties
@@ -1,5 +1,4 @@
 source.. = src/main/java/,src/main/resources/

 output.. = target/classes

 bin.includes = META-INF/,\

-               .,\

-               libs/unit-api-0.6.1.jar

+               .

diff --git a/bundles/org.eclipse.uomo.core/libs/README b/bundles/org.eclipse.uomo.core/libs/README
deleted file mode 100644
index 9edcad5..0000000
--- a/bundles/org.eclipse.uomo.core/libs/README
+++ /dev/null
@@ -1,3 +0,0 @@
-This jar file is included here because it cannot be downloaded from a public p2 repository at this time.
-
-If this file is included in Orbit - it can be removed.
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.core/libs/unit-api-0.6.1.jar b/bundles/org.eclipse.uomo.core/libs/unit-api-0.6.1.jar
deleted file mode 100644
index 212a4ef..0000000
--- a/bundles/org.eclipse.uomo.core/libs/unit-api-0.6.1.jar
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.uomo.core/src/main/java/org/eclipse/uomo/core/IListValidator.java b/bundles/org.eclipse.uomo.core/src/main/java/org/eclipse/uomo/core/IListValidator.java
index dcca5bf..f1a255a 100644
--- a/bundles/org.eclipse.uomo.core/src/main/java/org/eclipse/uomo/core/IListValidator.java
+++ b/bundles/org.eclipse.uomo.core/src/main/java/org/eclipse/uomo/core/IListValidator.java
@@ -1,5 +1,5 @@
 /**

- * Copyright (c) 2005, 2013, Werner Keil, Unit-API and others.

+ * Copyright (c) 2005, 2020, Werner Keil and others.

  * All rights reserved. This program and the accompanying materials

  * are made available under the terms of the Eclipse Public License v1.0

  * which accompanies this distribution, and is available at

diff --git a/bundles/org.eclipse.uomo.core/src/main/java/org/eclipse/uomo/core/impl/LogServiceImpl.java b/bundles/org.eclipse.uomo.core/src/main/java/org/eclipse/uomo/core/impl/LogServiceImpl.java
deleted file mode 100644
index 0ea6f7e..0000000
--- a/bundles/org.eclipse.uomo.core/src/main/java/org/eclipse/uomo/core/impl/LogServiceImpl.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.core.impl;

-

-import org.osgi.framework.ServiceReference;

-import org.osgi.service.log.LogService;

-

-public class LogServiceImpl implements LogService {

-

-	public void log(int arg0, String arg1) {

-		OutputHelper.print(arg1);

-	}

-

-	public void log(int arg0, String arg1, Throwable arg2) {

-		OutputHelper.print(arg1 + " " + arg2);

-	}

-

-	public void log(ServiceReference arg0, int arg1, String arg2) {

-		OutputHelper.print(arg2);

-	}

-

-	public void log(ServiceReference arg0, int arg1, String arg2, Throwable arg3) {

-		log(arg1, arg2, arg3);

-	}

-

-}

diff --git a/bundles/org.eclipse.uomo.core/src/main/java/org/eclipse/uomo/core/impl/OutputHelper.java b/bundles/org.eclipse.uomo.core/src/main/java/org/eclipse/uomo/core/impl/OutputHelper.java
index d44d195..fbc5990 100644
--- a/bundles/org.eclipse.uomo.core/src/main/java/org/eclipse/uomo/core/impl/OutputHelper.java
+++ b/bundles/org.eclipse.uomo.core/src/main/java/org/eclipse/uomo/core/impl/OutputHelper.java
@@ -13,7 +13,7 @@
 /**

  * A static helper class, checking e.g. if some tests require optional console

  * output XXX this could have options for using a logging framework eventually

- * TODO change to Service (either OSGi LogService or separate service)

+ * TODO change to Service

  * @version 0.98, 2013-12-08

  * @author Werner Keil

  */

diff --git a/bundles/org.eclipse.uomo.core/src/main/resources/META-INF/spring/bundle-context-osgi.xml b/bundles/org.eclipse.uomo.core/src/main/resources/META-INF/spring/bundle-context-osgi.xml
deleted file mode 100644
index 82dc439..0000000
--- a/bundles/org.eclipse.uomo.core/src/main/resources/META-INF/spring/bundle-context-osgi.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<beans xmlns="http://www.springframework.org/schema/beans"

-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

-  xmlns:osgi="http://www.springframework.org/schema/osgi"

-  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

-                      http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd">

-

-  <!-- definitions using elements of the osgi namespace can be included

-       in this file. There is no requirement to keep these definitions

-       in a separate file if you do not want to. The rationale for 

-       keeping these definitions separate is to facilitate integration

-       testing of the bundle outside of an OSGi container -->

-

-</beans>
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.core/src/main/resources/META-INF/spring/bundle-context.xml b/bundles/org.eclipse.uomo.core/src/main/resources/META-INF/spring/bundle-context.xml
deleted file mode 100644
index 2459eb0..0000000
--- a/bundles/org.eclipse.uomo.core/src/main/resources/META-INF/spring/bundle-context.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<beans xmlns="http://www.springframework.org/schema/beans"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
-
-  <!-- regular spring configuration file defining the beans for this
-       bundle. We've kept the osgi definitions in a separate 
-       configuration file so that this file can easily be used
-       for integration testing outside of an OSGi environment -->
-
-  <bean name="myBean" class="org.eclipse.uomo.core.impl.BeanImpl" />
-
-</beans>
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.core/src/main/resources/log4j.properties b/bundles/org.eclipse.uomo.core/src/main/resources/log4j.properties
index 18cfaa3..b05c341 100644
--- a/bundles/org.eclipse.uomo.core/src/main/resources/log4j.properties
+++ b/bundles/org.eclipse.uomo.core/src/main/resources/log4j.properties
@@ -2,7 +2,4 @@
 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.stdout.layout.ConversionPattern=%t %p [%c] - %m%n
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.threshold=TRACE
-
-#log4j.logger.org.springframework.osgi=DEBUG
-#log4j.logger.org.springframework=DEBUG
\ No newline at end of file
+log4j.appender.stdout.threshold=TRACE
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.icu/META-INF/MANIFEST.MF b/bundles/org.eclipse.uomo.icu/META-INF/MANIFEST.MF
index a5c14f1..7358c7e 100644
--- a/bundles/org.eclipse.uomo.icu/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.uomo.icu/META-INF/MANIFEST.MF
@@ -6,10 +6,10 @@
 Export-Package: org.eclipse.uomo.icu,

  org.eclipse.uomo.icu.impl

 Require-Bundle: com.ibm.icu;visibility:=reexport,

- org.eclipse.uomo.core;bundle-version="0.7.1",

- org.eclipse.uomo.units;bundle-version="0.7.1"

+ org.eclipse.uomo.core;bundle-version="0.8.0",

+ tech.units.indriya;bundle-version="1.3.0"

 Bundle-Vendor: Eclipse.org

 Bundle-RequiredExecutionEnvironment: JavaSE-1.7

 Import-Package: javax.measure,

  javax.measure.quantity,

- tec.uom.lib.common.function

+ tech.uom.lib.common.function

diff --git a/bundles/org.eclipse.uomo.ucum/META-INF/MANIFEST.MF b/bundles/org.eclipse.uomo.ucum/META-INF/MANIFEST.MF
index f635afb..852026a 100644
--- a/bundles/org.eclipse.uomo.ucum/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.uomo.ucum/META-INF/MANIFEST.MF
@@ -10,20 +10,20 @@
  org.eclipse.uomo.ucum.model,

  org.eclipse.uomo.ucum.parsers,

  org.eclipse.uomo.ucum.special

-Import-Package: javax.measure;version="[1.0,2)",

- javax.measure.format;version="[1.0,2)",

- javax.measure.quantity;version="[1.0,2)",

- javax.measure.spi;version="[1.0,2)",

+Import-Package: javax.measure,

+ javax.measure.format,

+ javax.measure.quantity,

+ javax.measure.spi,

+ systems.uom.quantity,

  tech.units.indriya,

  tech.units.indriya.format,

  tech.units.indriya.function,

  tech.units.indriya.quantity,

  tech.units.indriya.spi,

- tech.units.indriya.unit,

- systems.uom.quantity

-Require-Bundle: org.eclipse.uomo.core;bundle-version="0.1.0",

- org.eclipse.uomo.util;bundle-version="0.2.6",

- org.eclipse.uomo.xml;bundle-version="0.2.0",

+ tech.units.indriya.unit

+Require-Bundle: org.eclipse.uomo.core;bundle-version="0.7.0",

+ org.eclipse.uomo.util;bundle-version="0.7.0",

+ org.eclipse.uomo.xml;bundle-version="0.7.0",

  org.apache.commons.lang;bundle-version="2.3.0"

 Bundle-Vendor: Eclipse.org

 Bundle-RequiredExecutionEnvironment: JavaSE-1.8

diff --git a/bundles/org.eclipse.uomo.ucum/src/main/java/org/eclipse/uomo/ucum/impl/UcumConverter.java b/bundles/org.eclipse.uomo.ucum/src/main/java/org/eclipse/uomo/ucum/impl/UcumConverter.java
index af6f781..32ddd0b 100644
--- a/bundles/org.eclipse.uomo.ucum/src/main/java/org/eclipse/uomo/ucum/impl/UcumConverter.java
+++ b/bundles/org.eclipse.uomo.ucum/src/main/java/org/eclipse/uomo/ucum/impl/UcumConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************

- * Crown Copyright (c) 2006, 2011, Copyright (c) 2006, 2017 Kestral Computing P/L and others.

+ * Crown Copyright (c) 2006, 2020, Copyright (c) 2006, 2017 Kestral Computing P/L and others.

  * All rights reserved. This program and the accompanying materials

  * are made available under the terms of the Eclipse Public License v1.0

  * which accompanies this distribution, and is available at

@@ -17,6 +17,7 @@
 import static org.eclipse.uomo.ucum.model.ConceptKind.*;

 import static org.eclipse.uomo.ucum.expression.Operator.*;

 

+import java.io.Serializable;

 import java.math.BigDecimal;

 import java.math.MathContext;

 import java.util.ArrayList;

@@ -45,7 +46,7 @@
  * @author Grahame Grieve

  * @author Werner Keil

  */

-class UcumConverter extends AbstractConverter {

+class UcumConverter implements UnitConverter, Serializable, Comparable<UnitConverter> {

 

 	/**

 	 * 

@@ -300,10 +301,10 @@
 		return compound.convert(value);

 	}

 

-	public BigDecimal convert(BigDecimal value, MathContext ctx)

-			throws ArithmeticException {

-		return ((AbstractConverter)compound).convert(value, ctx);

-	}

+//	public BigDecimal convert(BigDecimal value, MathContext ctx)

+//			throws ArithmeticException {

+//		return ((AbstractConverter)compound).convert(value, ctx);

+//	}

 

 	public List<UnitConverter> getCompoundConverters() {

 		final List<UnitConverter> compound = new ArrayList<UnitConverter>();

@@ -338,4 +339,16 @@
 		// TODO Auto-generated method stub

 		return 0;

 	}

+

+	@Override

+	public int compareTo(UnitConverter o) {

+		// TODO Auto-generated method stub

+		return 0;

+	}

+

+	@Override

+	public List<? extends UnitConverter> getConversionSteps() {

+		// TODO Auto-generated method stub

+		return null;

+	}

 }

diff --git a/bundles/org.eclipse.uomo.ucum/src/main/java/org/eclipse/uomo/ucum/model/Value.java b/bundles/org.eclipse.uomo.ucum/src/main/java/org/eclipse/uomo/ucum/model/Value.java
index b536e9f..1f67fa9 100644
--- a/bundles/org.eclipse.uomo.ucum/src/main/java/org/eclipse/uomo/ucum/model/Value.java
+++ b/bundles/org.eclipse.uomo.ucum/src/main/java/org/eclipse/uomo/ucum/model/Value.java
@@ -89,5 +89,59 @@
 	 */

 	public Unit<Q> unit() {

 		return realUnit;

+	}

+

+	@Override

+	public Quantity<Q> add(Quantity<Q> augend) {

+		// TODO Auto-generated method stub

+		return null;

+	}

+

+	@Override

+	public Quantity<Q> subtract(Quantity<Q> subtrahend) {

+		// TODO Auto-generated method stub

+		return null;

+	}

+

+	@Override

+	public Quantity<?> divide(Quantity<?> divisor) {

+		// TODO Auto-generated method stub

+		return null;

+	}

+

+	@Override

+	public Quantity<Q> divide(Number divisor) {

+		// TODO Auto-generated method stub

+		return null;

+	}

+

+	@Override

+	public Quantity<?> multiply(Quantity<?> multiplier) {

+		// TODO Auto-generated method stub

+		return null;

+	}

+

+	@Override

+	public Quantity<Q> multiply(Number multiplier) {

+		// TODO Auto-generated method stub

+		return null;

+	}

+

+	@Override

+	public Quantity<?> inverse() {

+		// TODO Auto-generated method stub

+		return null;

+	}

+

+	@Override

+	public Quantity<Q> to(Unit<Q> unit) {

+		// TODO Auto-generated method stub

+		return null;

+	}

+

+	@Override

+	public <T extends Quantity<T>> Quantity<T> asType(Class<T> type) throws ClassCastException {

+		// TODO Auto-generated method stub

+		return null;

 	}		

 }

diff --git a/bundles/org.eclipse.uomo.units.tests/.classpath b/bundles/org.eclipse.uomo.units.tests/.classpath
deleted file mode 100644
index 4e5d4c5..0000000
--- a/bundles/org.eclipse.uomo.units.tests/.classpath
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<classpath>

-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>

-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

-	<classpathentry kind="src" path="src/">

-		<attributes>

-			<attribute name="test" value="true"/>

-		</attributes>

-	</classpathentry>

-	<classpathentry kind="output" path="target/classes"/>

-</classpath>

diff --git a/bundles/org.eclipse.uomo.units.tests/.gitignore b/bundles/org.eclipse.uomo.units.tests/.gitignore
deleted file mode 100644
index ea8c4bf..0000000
--- a/bundles/org.eclipse.uomo.units.tests/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/target
diff --git a/bundles/org.eclipse.uomo.units.tests/.project b/bundles/org.eclipse.uomo.units.tests/.project
deleted file mode 100644
index 335f2a5..0000000
--- a/bundles/org.eclipse.uomo.units.tests/.project
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.uomo.units.tests</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/bundles/org.eclipse.uomo.units.tests/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.uomo.units.tests/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 4824b80..0000000
--- a/bundles/org.eclipse.uomo.units.tests/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,2 +0,0 @@
-eclipse.preferences.version=1

-encoding/<project>=UTF-8

diff --git a/bundles/org.eclipse.uomo.units.tests/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.uomo.units.tests/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 0c68a61..0000000
--- a/bundles/org.eclipse.uomo.units.tests/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bundles/org.eclipse.uomo.units.tests/.settings/org.eclipse.m2e.core.prefs b/bundles/org.eclipse.uomo.units.tests/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644
index f897a7f..0000000
--- a/bundles/org.eclipse.uomo.units.tests/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-activeProfiles=
-eclipse.preferences.version=1
-resolveWorkspaceProjects=true
-version=1
diff --git a/bundles/org.eclipse.uomo.units.tests/META-INF/MANIFEST.MF b/bundles/org.eclipse.uomo.units.tests/META-INF/MANIFEST.MF
deleted file mode 100644
index ad65c56..0000000
--- a/bundles/org.eclipse.uomo.units.tests/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,13 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: UoMO Units Tests
-Bundle-SymbolicName: org.eclipse.uomo.units.tests
-Bundle-Version: 0.8.0.qualifier
-Bundle-Vendor: Eclipse org
-Fragment-Host: org.eclipse.uomo.units;bundle-version="0.8.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Export-Package: org.eclipse.uomo.units,
- org.eclipse.uomo.units.impl,
- org.eclipse.uomo.units.impl.format,
- org.eclipse.uomo.units.impl.quantity
-Require-Bundle: org.junit;bundle-version="4.8.2"
diff --git a/bundles/org.eclipse.uomo.units.tests/build.properties b/bundles/org.eclipse.uomo.units.tests/build.properties
deleted file mode 100644
index ced5f40..0000000
--- a/bundles/org.eclipse.uomo.units.tests/build.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-source.. = src/
-output.. = target/classes
-bin.includes = META-INF/,\
-               .
diff --git a/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/QuantityAmountTest.java b/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/QuantityAmountTest.java
deleted file mode 100644
index 6ad4d66..0000000
--- a/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/QuantityAmountTest.java
+++ /dev/null
@@ -1,94 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil, JScience and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Martin Desruisseaux, Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units;

-

-import static org.eclipse.uomo.units.SI.METRE;

-import static org.eclipse.uomo.units.SI.Prefix.CENTI;

-import static org.junit.Assert.assertEquals;

-import static org.junit.Assert.assertFalse;

-import static org.junit.Assert.assertSame;

-import static org.junit.Assert.assertTrue;

-

-import java.math.BigInteger;

-

-import org.eclipse.uomo.units.impl.quantity.LengthAmount;

-import org.junit.Test;

-

-/**

- * Tests {@link QuantityAmount} implementations and subclasses.

- * 

- * @author Martin Desruisseaux

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version $Revision$, $Date$

- */

-public class QuantityAmountTest {

-

-    /**

-     * Tests the creation quantities backed by the {@code double} primitive

-     * type.

-     */

-    @Test

-    public void testDouble() {

-	// final QuantityFactory<Length> factory =

-	// QuantityFactory.getInstance(Length.class);

-	final LengthAmount length = new LengthAmount(Double.valueOf(4.0), METRE);

-

-	assertSame("Wrong tuple element.", METRE, length.unit());

-	assertEquals("Wrong tuple element.", Double.valueOf(4.0), 

-			length.value());

-	assertEquals("Wrong conversion.", 4.0, length.doubleValue(METRE), 0.0);

-	assertEquals("Wrong conversion.", 0.04, length

-		.doubleValue(CENTI(METRE)), 0.0);

-

-	final LengthAmount other = new LengthAmount(8.0, METRE);

-	assertSame("Expected same implementation class.", length.getClass(),

-		other.getClass());

-	assertFalse("Quantities shall not be equal.", length.equals(other));

-	assertFalse("Quantities shall not be equal.",

-		length.hashCode() == other.hashCode());

-

-	final LengthAmount equivalent = new LengthAmount(Double.valueOf(4.0),

-		METRE);

-	assertSame("Expected same implementation class.", length.getClass(),

-		equivalent.getClass());

-	assertFalse("Quantities shall not be equal.", equivalent.equals(other));

-	assertEquals("Quantities shall be equal.", equivalent, length); // .equals(length));

-	assertTrue("'equals' shall be symmetric.", length.equals(equivalent));

-	assertEquals("Expected same hash code.", length.hashCode(), equivalent

-		.hashCode());

-    }

-

-    /**

-     * Tests the creation quantities backed by the {@link Number} class.

-     */

-    @Test

-    public void testNumber() {

-	// final QuantityFactory<Length> factory =

-	// QuantityFactory.getInstance(Length.class);

-	final BigInteger value = BigInteger.valueOf(4);

-	final LengthAmount length = new LengthAmount(value, METRE);

-

-	assertSame("Wrong tuple element.", METRE, length.unit());

-	assertEquals("Wrong tuple element.", BigInteger.valueOf(4), length.value());

-	assertEquals("Wrong conversion.", 4.0, length.doubleValue(METRE), 0.0);

-	assertEquals("Wrong conversion.", 0.04, length

-		.doubleValue(CENTI(METRE)), 0.0);

-

-	// Quantity equivalent to 'length', but backed by a double.

-	// This is not the same class, but should nevertheless by considered

-	// equivalent.

-	final LengthAmount equivalent = new LengthAmount(4, METRE);

-	assertTrue("Quantities shall be equal.", equivalent.equals(length));

-	assertTrue("'equals' shall be symmetric.", length.equals(equivalent));

-	assertEquals("Expected same hash code.", length.hashCode(), equivalent

-		.hashCode());

-    }

-}

diff --git a/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/SITest.java b/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/SITest.java
deleted file mode 100644
index f5409b7..0000000
--- a/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/SITest.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units;

-

-import static org.eclipse.uomo.core.impl.OutputHelper.print;

-import static org.eclipse.uomo.core.impl.OutputHelper.println;

-import static org.eclipse.uomo.units.SI.GRAM;

-import static org.eclipse.uomo.units.SI.KILOGRAM;

-import static org.eclipse.uomo.units.SI.METRE;

-import static org.eclipse.uomo.units.SI.Prefix.MILLI;

-import static org.eclipse.uomo.units.impl.system.USCustomary.LITER;

-import static org.eclipse.uomo.units.impl.system.USCustomary.METER;

-import static org.junit.Assert.assertEquals;

-import static org.junit.Assert.assertTrue;

-

-import org.junit.After;

-import org.junit.Before;

-import org.junit.Test;

-import org.unitsofmeasurement.quantity.Mass;

-import org.unitsofmeasurement.quantity.Volume;

-import org.unitsofmeasurement.unit.SystemOfUnits;

-import javax.measure.Unit;

-

-/**

- * Unit test for class org.eclipse.uomo.units.SI

- * 

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.3 ($Revision: 172 $), $Date: 2010-02-21 20:02:14 +0100 (So, 21

- *          Feb 2010) $

- */

-public class SITest {

-	SystemOfUnits result;

-

-	@Before

-	public void setUp() throws Exception {

-		result = SI.getInstance();

-	}

-

-	@After

-	public void tearDown() throws Exception {

-		result = null;

-	}

-

-	//

-	// public static void main(String[] args) {

-	// new SITest("").testGetInstance();

-	// }

-	/**

-	 * Test of getInstance method, of class SI.

-	 */

-	@Test

-	public void testGetInstance() {

-		// print("getInstance: " + NonSI.GALLON_UK.divide(8) + " (" +

-		// NonSI.GALLON_UK.divide(8).getDimension().toString() + ")");

-

-		// Checks SI contains the 7 SI base units.

-		assertTrue(result.getUnits().contains(AbstractUnit.valueOf("m")));

-		assertTrue(result.getUnits().contains(SI.KILOGRAM)); // TODO check

-																// parsing: "kg"

-		assertTrue(result.getUnits().contains(AbstractUnit.valueOf("s")));

-		assertTrue(result.getUnits().contains(AbstractUnit.valueOf("mol")));

-		assertTrue(result.getUnits().contains(AbstractUnit.valueOf("K")));

-		assertTrue(result.getUnits().contains(AbstractUnit.valueOf("cd")));

-		assertTrue(result.getUnits().contains(AbstractUnit.valueOf("A")));

-

-		print(AbstractUnit.valueOf("m"));

-		println(AbstractUnit.valueOf("m").getDimension().toString());

-	}

-

-	@Test

-	public void testMass() {

-		assertTrue(GRAM.isCompatible(KILOGRAM));

-		Unit<Mass> MILLIGRAM = MILLI(GRAM);

-		println(MILLIGRAM);

-	}

-

-	@Test

-	public void testVolume() {

-		// print("ML: ");

-		Unit<Volume> MILLILITER = MILLI(LITER);

-		println(MILLILITER);

-	}

-

-	@Test

-	public void testSIvsUS() {

-		assertEquals(METRE, METER);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/UnitTest.java b/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/UnitTest.java
deleted file mode 100644
index 9e9ddc2..0000000
--- a/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/UnitTest.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units;

-

-import static org.eclipse.uomo.core.impl.OutputHelper.println;

-import static org.eclipse.uomo.units.SI.*;

-import static org.junit.Assert.assertEquals;

-import static org.junit.Assert.assertNotNull;

-import static org.junit.Assert.assertNotSame;

-import static org.junit.Assert.assertTrue;

-import static org.junit.Assert.fail;

-

-import org.eclipse.uomo.units.AbstractConverter;

-import org.eclipse.uomo.units.AbstractUnit;

-import org.eclipse.uomo.units.impl.BaseAmount;

-import org.junit.After;

-import org.junit.Before;

-import org.junit.Ignore;

-import org.junit.Test;

-import org.unitsofmeasurement.quantity.Dimensionless;

-import org.unitsofmeasurement.quantity.Power;

-import javax.measure.Unit;

-import javax.measure.UnitConverter;

-

-

-/**

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version $Revision: 195 $, $LastChangedDate: 2010-02-24 18:40:34 +0100 (Mi, 24 Feb 2010) $

- */

-public class UnitTest {

-	Unit<Dimensionless> one;

-

-    /* (non-Javadoc)

-     * @see junit.framework.TestCase#setUp()

-     */

-    @Before

-    public void setUp() throws Exception {

-//      super.setUp();

-        one = AbstractUnit.ONE;

-    }

-

-    /* (non-Javadoc)

-     * @see junit.framework.TestCase#tearDown()

-     */

-    @After

-    public void tearDown() throws Exception {

-//      super.tearDown();

-        one = null;

-    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#toMetric()}.

-     */

-//    @Test

-//    public void testToMetric() {

-//        AbstractUnit<? extends QuantityAmount> su = (AbstractUnit<? extends QuantityAmount>) one.toMetric();

-//        assertTrue(su.isUnscaledMetric());

-//    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#getConverterTo}.

-     */

-    @Test

-    public void testConverterToSI() {

-        Double factor = new Double(10);

-        UnitConverter converter = one.getConverterTo(one);

-        Double result = converter.convert(factor.doubleValue());

-        assertEquals(result, factor);

-        println(result.toString());

-    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#isMetric()}.

-     */

-//    @Test

-//    public void testIsMetric() {

-//        boolean standard = one.isMetric();

-//        assertTrue(standard);

-//    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#asType(java.lang.Class)}.

-     */

-  @Test

-  @Ignore

-  public void testAsType() {

-      one.asType(Dimensionless.class);

-      try {

-          METRE.asType(Dimensionless.class);

-          fail("Should have raised ClassCastException");

-      } catch (ClassCastException e) {

-          assertTrue(true);

-      }

-  }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#getDimension()}.

-     */

-    @Test

-    public void testGetDimension() {

-        one.getDimension();

-    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#alternate(java.lang.String)}.

-     */

-    @Test

-    public void testAlternate() {

-        Unit<?> alternate = one.alternate(null);

-        assertNotNull(alternate);

-    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#compound(org.unitsofmeasure.Unit)}.

-     */

-    /*public void testCompound() {

-        Unit<? extends Quantity> compound = one.compound(one);

-        assertNotNull(compound);

-    }*/

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#transform}.

-     */

-    @Test

-    public void testTransform() {

-        Unit<?> result = one.transform(AbstractConverter.IDENTITY);

-        assertEquals(result, one);

-    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#add(double)}.

-     */

-    @Test

-    public void testAdd() {

-    	Unit<?> result = one.add(10);

-        assertNotSame(result, one);

-    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#multiply(long)}.

-     */

-    @Test

-    public void testMultiplyLong() {

-    	Unit<?> result = one.multiply(2L);

-        assertNotSame(result, one);

-    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#multiply(double)}.

-     */

-    @Test

-    public void testMultiplyDouble() {

-    	Unit<?> result = one.multiply(2.1);

-        assertNotSame(result, one);

-    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#multiply(org.unitsofmeasure.Unit)}.

-     */

-    @Test

-    public void testMultiplyUnitOfQ() {

-        AbstractUnit<?> result = (AbstractUnit<?>) one.multiply(one);

-        assertEquals(result, one);

-    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#inverse()}.

-     */

-    @Test

-    public void testInverse() {

-    	Unit<?> result = one.inverse();

-        assertEquals(result, one);

-    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#divide(long)}.

-     */

-    @Test

-    public void testDivideLong() {

-    	Unit<?> result = one.divide(2L);

-        assertNotSame(result, one);

-    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#divide(double)}.

-     */

-    @Test

-    public void testDivideDouble() {

-    	Unit<?> result = one.divide(3.2);

-        assertNotSame(result, one);

-    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#divide(org.unitsofmeasure.Unit)}.

-     */

-    @Test

-    public void testDivideUnitOfQ() {

-    	Unit<?> result = one.divide(one);

-        assertEquals(result, one);

-    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#root(int)}.

-     */

-    @Test

-    public void testRoot() {

-    	Unit<?> result = one.root(2);

-        assertEquals(result, one);

-    }

-

-    /**

-     * Test method for {@link org.unitsofmeasure.Unit#pow(int)}.

-     */

-    @Test

-    public void testPow() {

-    	Unit<?> result = one.pow(10);

-        assertEquals(result, one);

-    }

-    

-    @Test

-    public void testKiloIsAThousand() {

-    	//FIXME: Need to find the org.hamcrest assertion libs

-    	BaseAmount<Power> w2000 = new BaseAmount<Power>(2000, WATT);

-    	BaseAmount<Power> kW2 = new BaseAmount<Power>(2, Prefix.KILO(WATT));

-    	//assertThat(w2000, is(kW2));

-    }

-}

diff --git a/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/impl/Benchmark.java b/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/impl/Benchmark.java
deleted file mode 100644
index a8e1245..0000000
--- a/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/impl/Benchmark.java
+++ /dev/null
@@ -1,105 +0,0 @@
-/**
- * Copyright (c) 2005, 2011, Werner Keil, Ikayzo and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-package org.eclipse.uomo.units.impl;
-
-import static org.eclipse.uomo.units.SI.GRAM;
-import static org.eclipse.uomo.units.SI.KILOGRAM;
-import static org.eclipse.uomo.units.SI.Prefix.*;
-
-import java.util.Random;
-import java.util.logging.Logger;
-
-import org.eclipse.uomo.units.impl.quantity.MassAmount;
-import javax.measure.Quantity;
-import org.unitsofmeasurement.unit.IncommensurableException;
-import org.unitsofmeasurement.unit.UnconvertibleException;
-import javax.measure.Unit;
-import javax.measure.UnitConverter;
-
-/**
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version $Revision$, $Date$
- * @param <Q> a quantity
- */
-public class Benchmark<Q extends Quantity<Q>> {
-    // Create logger object (usually with the class name)
-	private static Logger benchmarkLogger = Logger.getLogger(Benchmark.class.getName());
-	
-	private static final int N = 100000;
-
-	// Because of generic array creation.
-	private static final Unit<?>[] UNITS = new Unit[] { MEGA(GRAM), KILOGRAM,
-			GRAM, CENTI(GRAM), MILLI(GRAM), MICRO(GRAM) };
-
-	@SuppressWarnings("unchecked")
-	private static long usingQuantities(final long seed) {
-		long time = System.currentTimeMillis();
-		final Random r = new Random(seed);
-		// final QuantityFactory<Mass> factory =
-		// QuantityFactory.getInstance(Mass.class);
-		final MassAmount[] m = new MassAmount[N];
-		for (int i = 0; i < N; i++) {
-			m[i] = new MassAmount(r.nextGaussian(), KILOGRAM);
-		}
-		// Now perform some computation in a random unit.
-		@SuppressWarnings("rawtypes")
-		final Unit targetUnit = (Unit<?>) UNITS[r.nextInt(UNITS.length)];
-		double sum = 0;
-		for (int i = 0; i < N; i++) {
-			sum += m[i].doubleValue(targetUnit);
-		}
-		time = System.currentTimeMillis() - time;
-		benchmarkLogger.info("Using quantities: ellapsed time=" + (time / 1000f)
-				+ " s., result=" + sum);
-		return time;
-	}
-
-	private static long usingDouble(final long seed)
-			throws UnconvertibleException, IncommensurableException {
-		long time = System.currentTimeMillis();
-		final Random r = new Random(seed);
-		final double[] m = new double[N];
-		for (int i = 0; i < N; i++) {
-			m[i] = r.nextGaussian();
-		}
-		// Now perform some computation in a random unit.
-		final Unit<?> sourceUnit = KILOGRAM;
-		final Unit<?> targetUnit = (Unit<?>) UNITS[r.nextInt(UNITS.length)];
-		UnitConverter cv = sourceUnit.getConverterToAny((Unit<?>) targetUnit);
-		double sum = 0;
-		for (int i = 0; i < N; i++) {
-			sum += cv.convert(m[i]);
-		}
-		time = System.currentTimeMillis() - time;
-		benchmarkLogger.info("Using primitives: ellapsed time=" + (time / 1000f)
-				+ " s., result=" + sum);
-		return time;
-	}
-
-	public static void main(String[] args) throws InterruptedException {
-		// TODO add IE and UE to main
-		// Execute the loop many time for letting Hotspot to "warn up".
-		try {
-			final Random r = new Random();
-			for (int i = 0; i < 20; i++) {
-				final long seed = r.nextLong();
-				long t1 = usingQuantities(seed);
-				long t2 = usingDouble(seed);
-				benchmarkLogger.fine("Ratio: " + (float) t1 / (float) t2);
-				Thread.sleep(100);
-			}
-		} catch (IncommensurableException ie) {
-			throw new InterruptedException();
-		} catch (UnconvertibleException ue) {
-			throw new InterruptedException();
-		}
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/impl/format/UnitFormatTest.java b/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/impl/format/UnitFormatTest.java
deleted file mode 100644
index da2f73c..0000000
--- a/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/impl/format/UnitFormatTest.java
+++ /dev/null
@@ -1,121 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.format;

-

-import static org.eclipse.uomo.core.impl.OutputHelper.*;

-import static org.eclipse.uomo.units.SI.METRE;

-import static org.eclipse.uomo.units.SI.Prefix.CENTI;

-import static org.eclipse.uomo.units.SI.Prefix.KILO;

-import static org.eclipse.uomo.units.SI.Prefix.MILLI;

-import static org.eclipse.uomo.units.impl.system.USCustomary.ELECTRON_VOLT;

-import static org.eclipse.uomo.units.impl.system.USCustomary.FOOT;

-import static org.junit.Assert.assertEquals;

-

-import java.math.BigInteger;

-import java.util.Locale;

-

-import org.eclipse.uomo.units.AbstractUnit;

-import org.junit.After;

-import org.junit.Before;

-import org.junit.Test;

-import org.unitsofmeasurement.quantity.Length;

-import javax.measure.Unit;

-

-/**

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version $Revision: 206 $, $Date: 2010-02-25 02:40:17 +0100 (Do, 25 Feb 2010)

- *          $

- */

-public class UnitFormatTest {

-	private static final String COMPARISON_FOOT = "ft";

-	private static final String COMPARISON_KM = "km";

-	private static final Locale COMPARISON_LOCALE = Locale.UK;

-	private static final Locale MULTI_LOCALE = Locale.ENGLISH;

-

-	LocalUnitFormat format;

-	Unit<Length> cm;

-	Unit<Length> mm;

-	Unit<Length> foot;

-

-	@Before

-	public void setUp() throws Exception {

-		// setName(UCUMFormatTest.class.getSimpleName());

-		cm = CENTI(METRE);

-		mm = MILLI(METRE);

-		foot = FOOT;

-	}

-

-	@After

-	public void tearDown() throws Exception {

-		// super.tearDown();

-	}

-

-	@Test

-	public void testDefault() {

-		format = LocalUnitFormat.getInstance();

-		// format.format(unit, appendable);

-		String formattedText = format.format(cm);

-		println(formattedText);

-		// System.out.println(unit2);

-		formattedText = format.format(mm);

-		println(formattedText);

-		formattedText = format.format(foot);

-		print(formattedText);

-	}

-

-	@Test

-	public void testGetInstanceLocale() {

-		format = LocalUnitFormat.getInstance(COMPARISON_LOCALE);

-		String formattedText = format.format(cm);

-		print(formattedText);

-		// System.out.println(unit2);

-		formattedText = format.format(mm);

-		print(formattedText);

-		formattedText = format.format(foot);

-		print(formattedText);

-		assertEquals(COMPARISON_FOOT, formattedText);

-	}

-

-	@Test

-	public void testUSVolt() {

-		print(ELECTRON_VOLT.getDimension().toString());

-		println(ELECTRON_VOLT.toString());

-	}

-

-	@Test

-	public void testSubMultiples() {

-		Unit<Length> u = CENTI(METRE);

-		println(u.toString());

-	}

-

-	/**

-	 * Tests the {@link AbstractUnit#toString()} method, which is backed by

-	 * {@link BaseFormat}.

-	 * 

-	 * @see http://kenai.com/jira/browse/JSR_275-43

-	 */

-	@Test

-	public void testMultiples() {

-		format = LocalUnitFormat.getInstance(MULTI_LOCALE);

-		assertEquals("m", format.format(METRE));

-		// Multiples

-		assertEquals(COMPARISON_KM, format.format(KILO(METRE)));

-		assertEquals(COMPARISON_KM, format.format(METRE.multiply(1000)));

-		assertEquals(COMPARISON_KM, format.format(METRE.multiply(1000d)));

-		assertEquals("Tm", METRE.multiply(BigInteger.TEN.pow(12).longValue())

-				.toString());

-		// Submultiples

-		assertEquals("cm", format.format(METRE.divide(100d)));

-		assertEquals("mm", format.format(METRE.divide(1000d)));

-		assertEquals("fm", format.format(METRE.divide(BigInteger.TEN.pow(15).

-				longValue())));

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/impl/quantity/QuantityTest.java b/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/impl/quantity/QuantityTest.java
deleted file mode 100644
index a9d50aa..0000000
--- a/bundles/org.eclipse.uomo.units.tests/src/org/eclipse/uomo/units/impl/quantity/QuantityTest.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/**
- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import static org.eclipse.uomo.core.impl.OutputHelper.*;
-import static org.eclipse.uomo.units.SI.AMPERE_TURN;
-import static org.eclipse.uomo.units.SI.KILOGRAM;
-import static org.eclipse.uomo.units.SI.METRE;
-import static org.eclipse.uomo.units.SI.METRES_PER_SQUARE_SECOND;
-import static org.eclipse.uomo.units.SI.Prefix.KILO;
-import static org.junit.Assert.assertEquals;
-
-import org.eclipse.uomo.units.impl.quantity.AccelerationAmount;
-import org.eclipse.uomo.units.impl.quantity.LengthAmount;
-import org.eclipse.uomo.units.impl.quantity.MagnetomotiveForceAmount;
-import org.eclipse.uomo.units.impl.quantity.MassAmount;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version $Revision$, $Date$
- */
-public class QuantityTest {
-	LengthAmount length;
-	AccelerationAmount accel;
-	MagnetomotiveForceAmount magneto;
-	
-    // universal gravitational constant  (m3 kg-1 s-2)
-    private static final double G = 6.67300E-11;
-	
-	private MassAmount mass;   // in kilograms
-	private LengthAmount radius; // in meters
-
-	
-	@Before
-	public void setUp() throws Exception {
-		length  = new LengthAmount(4.0, METRE);
-		accel   = new AccelerationAmount(30, METRES_PER_SQUARE_SECOND);
-		magneto = new MagnetomotiveForceAmount(50, AMPERE_TURN);
-		
-		mass 	= new MassAmount(30, KILOGRAM);
-		radius  = new LengthAmount(400, KILO(METRE));
-	}
-
-	@After
-	public void tearDown() throws Exception {
-		length = null;
-	}
-
-	@Test
-	public void testLength() {
-		LengthAmount len2 = new LengthAmount(4.0, METRE);
-		assertEquals(length, len2);
-	}
-	
-	private AccelerationAmount surfaceGravity() {
-        double m = mass.doubleValue(KILOGRAM);
-        double r = radius.doubleValue(METRE);
-        return new AccelerationAmount(
-                G * m / (r * r), METRES_PER_SQUARE_SECOND);
-    }
-	
-	@Test
-	public void testAccelo1() {
-		AccelerationAmount ac1 = surfaceGravity();
-		print("Gravity: ");
-		println(ac1);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/.classpath b/bundles/org.eclipse.uomo.units/.classpath
deleted file mode 100644
index 07a34e9..0000000
--- a/bundles/org.eclipse.uomo.units/.classpath
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<classpath>

-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">

-		<attributes>

-			<attribute name="owner.project.facets" value="java"/>

-		</attributes>

-	</classpathentry>

-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

-	<classpathentry kind="src" path="src/main/java/"/>

-	<classpathentry kind="src" path="src/main/resources/"/>

-	<classpathentry kind="output" path="target/classes"/>

-</classpath>

diff --git a/bundles/org.eclipse.uomo.units/.gitignore b/bundles/org.eclipse.uomo.units/.gitignore
deleted file mode 100644
index 2c36b17..0000000
--- a/bundles/org.eclipse.uomo.units/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/target
-/.settings
diff --git a/bundles/org.eclipse.uomo.units/.project b/bundles/org.eclipse.uomo.units/.project
deleted file mode 100644
index 174d877..0000000
--- a/bundles/org.eclipse.uomo.units/.project
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>org.eclipse.uomo.units</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.ManifestBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.pde.SchemaBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.jboss.tools.jst.web.kb.kbbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.jboss.tools.cdi.core.cdibuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.pde.PluginNature</nature>
-	</natures>
-</projectDescription>
diff --git a/bundles/org.eclipse.uomo.units/.settings/org.eclipse.core.resources.prefs b/bundles/org.eclipse.uomo.units/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index cf6931b..0000000
--- a/bundles/org.eclipse.uomo.units/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-eclipse.preferences.version=1

-encoding//src/main/java=UTF-8

-encoding//src/main/resources=UTF-8

-encoding/<project>=UTF-8

diff --git a/bundles/org.eclipse.uomo.units/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.uomo.units/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 295926d..0000000
--- a/bundles/org.eclipse.uomo.units/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,7 +0,0 @@
-eclipse.preferences.version=1

-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8

-org.eclipse.jdt.core.compiler.compliance=1.8

-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

-org.eclipse.jdt.core.compiler.source=1.8

diff --git a/bundles/org.eclipse.uomo.units/.springBeans b/bundles/org.eclipse.uomo.units/.springBeans
deleted file mode 100644
index ef666ef..0000000
--- a/bundles/org.eclipse.uomo.units/.springBeans
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<beansProjectDescription>

-	<version>1</version>

-	<pluginVersion><![CDATA[2.5.0.201010221000-RELEASE]]></pluginVersion>

-	<configSuffixes>

-		<configSuffix><![CDATA[xml]]></configSuffix>

-	</configSuffixes>

-	<enableImports><![CDATA[false]]></enableImports>

-	<configs>

-	</configs>

-	<configSets>

-	</configSets>

-</beansProjectDescription>

diff --git a/bundles/org.eclipse.uomo.units/META-INF/MANIFEST.MF b/bundles/org.eclipse.uomo.units/META-INF/MANIFEST.MF
deleted file mode 100644
index df34c4a..0000000
--- a/bundles/org.eclipse.uomo.units/META-INF/MANIFEST.MF
+++ /dev/null
@@ -1,29 +0,0 @@
-Manifest-Version: 1.0
-Bundle-ManifestVersion: 2
-Bundle-Name: UOMo Units of Measurement
-Bundle-SymbolicName: org.eclipse.uomo.units;singleton:=true
-Bundle-Version: 0.8.0.qualifier
-Bundle-Activator: org.eclipse.uomo.units.Activator
-Bundle-Vendor: Eclipse.org
-Require-Bundle: org.eclipse.uomo.core;bundle-version="0.1.0"
-Import-Package: javax.measure,
- javax.measure.format,
- javax.measure.quantity,
- javax.measure.spi,
- org.osgi.framework;version="1.3.0",
- org.osgi.util.tracker;version="1.3.1",
- systems.uom.quantity,
- tec.uom.lib.common.function
-Bundle-ActivationPolicy: lazy
-Export-Package: org.eclipse.uomo.units,
- org.eclipse.uomo.units.impl;uses:="javax.measure,org.eclipse.uomo.units",
- org.eclipse.uomo.units.impl.converter;uses:="javax.measure,org.eclipse.uomo.units",
- org.eclipse.uomo.units.impl.format,
- org.eclipse.uomo.units.impl.quantity;
-  uses:="org.eclipse.uomo.units.impl,
-   javax.measure.quantity,
-   javax.measure,
-   org.eclipse.uomo.units",
- org.eclipse.uomo.units.impl.system;uses:="javax.measure,org.eclipse.uomo.units,javax.measure.service"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
-Bundle-ClassPath: .
diff --git a/bundles/org.eclipse.uomo.units/build.properties b/bundles/org.eclipse.uomo.units/build.properties
deleted file mode 100644
index d2a44c1..0000000
--- a/bundles/org.eclipse.uomo.units/build.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-source.. = src/main/java/,\

-           src/main/resources/

-bin.includes = META-INF/,\

-               .,\

-               plugin.xml

-additional.bundles = javax.measure.unit-api

diff --git a/bundles/org.eclipse.uomo.units/libs/README b/bundles/org.eclipse.uomo.units/libs/README
deleted file mode 100644
index 9edcad5..0000000
--- a/bundles/org.eclipse.uomo.units/libs/README
+++ /dev/null
@@ -1,3 +0,0 @@
-This jar file is included here because it cannot be downloaded from a public p2 repository at this time.
-
-If this file is included in Orbit - it can be removed.
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/libs/unit-api-0.6.1.jar b/bundles/org.eclipse.uomo.units/libs/unit-api-0.6.1.jar
deleted file mode 100644
index af84a8a..0000000
--- a/bundles/org.eclipse.uomo.units/libs/unit-api-0.6.1.jar
+++ /dev/null
Binary files differ
diff --git a/bundles/org.eclipse.uomo.units/plugin.xml b/bundles/org.eclipse.uomo.units/plugin.xml
deleted file mode 100644
index b60f62a..0000000
--- a/bundles/org.eclipse.uomo.units/plugin.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<?eclipse version="3.4"?>

-<plugin>

-

-</plugin>

diff --git a/bundles/org.eclipse.uomo.units/src/etc/header.txt b/bundles/org.eclipse.uomo.units/src/etc/header.txt
deleted file mode 100644
index 8471428..0000000
--- a/bundles/org.eclipse.uomo.units/src/etc/header.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

-All rights reserved. This program and the accompanying materials

-are made available under the terms of the Eclipse Public License v1.0

-which accompanies this distribution, and is available at

-http://www.eclipse.org/legal/epl-v10.html

-

-Contributors:

-    Werner Keil - initial API and implementation
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/.gitignore b/bundles/org.eclipse.uomo.units/src/main/java/.gitignore
deleted file mode 100644
index 1a70481..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/META-INF
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractConverter.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractConverter.java
deleted file mode 100644
index df61330..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractConverter.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/**
- * Copyright (c) 2005, 2017, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil and others - initial API and implementation
- */
-package org.eclipse.uomo.units;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.math.MathContext;
-import java.util.Arrays;
-import java.util.List;
-
-import javax.measure.UnitConverter;
-
-/**
- * <p> This class represents a converter of numeric values.</p>
- *
- * <p> It is not required for sub-classes to be immutable
- *     (e.g. currency converter).</p>
- *
- * <p> Sub-classes must ensure unicity of the {@linkplain #IDENTITY identity}
- *     converter. In other words, if the result of an operation is equivalent
- *     to the identity converter, then the unique {@link #IDENTITY} instance
- *     should be returned.</p>
- *
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.5, $Date: 2017-12-24 $
- */
-public abstract class AbstractConverter implements UnitConverter, Serializable {
-
-    /**
-     * For cross-version compatibility.
-     */
-    private static final long serialVersionUID = 2557410026012911803L;
-
-    /**
-     * Holds the identity converter (unique). This converter does nothing
-     * (<code>ONE.convert(x) == x</code>). This instance is unique.
-     */
-    public static final UnitConverter IDENTITY = new Identity();
-
-    /**
-     * Default constructor.
-     */
-    protected AbstractConverter() {
-    }
-
-    /**
-     * Returns the inverse of this converter. If <code>x</code> is a valid
-     * value, then <code>x == inverse().convert(convert(x))</code> to within
-     * the accuracy of computer arithmetic.
-     *
-     * @return the inverse of this converter.
-     */
-    public abstract UnitConverter inverse();
-    
-    public abstract BigDecimal convert(BigDecimal value, MathContext ctx) throws ArithmeticException;
-
-    /**
-     * Indicates whether this converter is considered to be the the same as the
-     * one specified.
-     *
-     * @param  cvtr the converter with which to compare.
-     * @return <code>true</code> if the specified object is a converter
-     *         considered equals to this converter;<code>false</code> otherwise.
-     */
-//    @Override
-//    public abstract boolean equals(Object cvtr);
-
-    /**
-     * Returns a hash code value for this converter. Equals object have equal
-     * hash codes.
-     *
-     * @return this converter hash code value.
-     * @see    #equals
-     */
-    //@Override
-    //public abstract int hashCode();
-
-    /**
-     * Concatenates this converter with another converter. The resulting
-     * converter is equivalent to first converting by the specified converter
-     * (right converter), and then converting by this converter (left converter).
-     *
-     * <p>Note: Implementations must ensure that the {@link #IDENTITY} instance
-     *          is returned if the resulting converter is an identity
-     *          converter.</p>
-     *
-     * @param  converter the other converter.
-     * @return the concatenation of this converter with the other converter.
-     */
-    public UnitConverter concatenate(UnitConverter converter) {
-        return (converter == IDENTITY) ? this : new CompoundImpl(this, converter);
-    }
-	
-    @Override
-	public boolean isIdentity() {
-		return false;
-	}
-
-	@Override
-	public List<UnitConverter> getConversionSteps() {
-		return Arrays.asList((UnitConverter)new CompoundImpl(this, this));
-	}
-	
-    /**
-     * This interface is implemented by converters made up of two
-     * separate converters (in matrix notation
-     * <code>[compound] = [left] x [right]</code>).
-     */
-    public interface Compound {
-
-        /**
-         * Returns the left converter of this compound converter
-         * (the last one performing the conversion).
-         *
-         * @return the left converter.
-         */
-        AbstractConverter getLeft();
-
-        /**
-         * Returns the right converter of this compound converter
-         * (the first one performing the conversion).
-         *
-         * @return the right converter.
-         */
-        AbstractConverter getRight();
-    }
-
-    /**
-     * This inner class represents the identity converter (singleton).
-     */
-    private static final class Identity extends AbstractConverter {
-
-        /**
-         * For cross-version compatibility.
-         */
-        private static final long serialVersionUID = 7675901502919547460L;
-
-        @Override
-        public Identity inverse() {
-            return this;
-        }
-
-        @Override
-        public double convert(double value) {
-            return value;
-        }
-
-        public BigDecimal convert(BigDecimal value, MathContext ctx) {
-            return value;
-        }
-
-		public Number convert(Number value) {
-			return value;
-		}
-		
-        @Override
-        public boolean equals(Object cvtr) {
-            return this == cvtr; // Unique instance.
-        }
-
-        @Override
-        public int hashCode() {
-            return 0;
-        }
-
-        @Override
-        public boolean isLinear() {
-            return true;
-        }
-
-		@Override
-		public boolean isIdentity() {
-			return true;
-		}
-    }
-
-    /**
-     * This inner class represents a compound converter (non-linear).
-     */
-    private static final class CompoundImpl extends AbstractConverter implements Compound {
-
-        /**
-         * For cross-version compatibility.
-         */
-        private static final long serialVersionUID = 2242882007946934958L;
-
-        /**
-         * Holds the first converter.
-         */
-        private final AbstractConverter left;
-
-        /**
-         * Holds the second converter.
-         */
-        private final AbstractConverter right;
-
-        /**
-         * Creates a compound converter resulting from the combined
-         * transformation of the specified converters.
-         *
-         * @param  unitConverter the left converter.
-         * @param  unitConverter2 the right converter.
-         */
-        private CompoundImpl(UnitConverter unitConverter, UnitConverter unitConverter2) {
-            this.left = (AbstractConverter) unitConverter;
-            this.right = (AbstractConverter) unitConverter2;
-        }
-
-        @Override
-        public UnitConverter inverse() {
-            return new CompoundImpl(right.inverse(), left.inverse());
-        }
-
-        @Override
-        public double convert(double value) {
-            return left.convert(right.convert(value));
-        }
-
-        public BigDecimal convert(BigDecimal value, MathContext ctx) {
-            return ((CompoundImpl)left).convert(((CompoundImpl)right).convert(value, ctx), ctx);
-        }
-
-
-		public Number convert(Number value) {
-			return left.convert(right.convert(value));
-		}
-        
-        @Override
-        public boolean equals(Object cvtr) {
-            if (this == cvtr)
-                return true;
-            if (!(cvtr instanceof Compound))
-                return false;
-            Compound that = (Compound) cvtr;
-            return (this.left.equals(that.getLeft()))
-                    && (this.right.equals(that.getRight()));
-        }
-
-        @Override
-        public int hashCode() {
-            return left.hashCode() + right.hashCode();
-        }
-
-        @Override
-        public boolean isLinear() {
-            return left.isLinear() && right.isLinear();
-        }
-
-        public AbstractConverter getLeft() {
-            return left;
-        }
-
-        public AbstractConverter getRight() {
-            return right;
-        }
-
-		@Override
-		public UnitConverter concatenate(UnitConverter converter) {
-			return (converter == IDENTITY) ? this : new CompoundImpl(this, converter);
-		}
-
-		@Override
-		public List<UnitConverter> getConversionSteps() {
-			return Arrays.asList((UnitConverter)new CompoundImpl(this, this));
-		}
-    }
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractQuantity.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractQuantity.java
deleted file mode 100644
index 87c2ff8..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractQuantity.java
+++ /dev/null
@@ -1,348 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil 

- *    - initial API and implementation

- */

-package org.eclipse.uomo.units;

-

-import java.util.Comparator;

-import java.util.Objects;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-import javax.measure.quantity.Dimensionless;

-

-import org.eclipse.uomo.units.impl.NaturalOrder;

-import org.eclipse.uomo.units.impl.NumberQuantity;

-import org.eclipse.uomo.units.impl.format.QuantityFormat;

-

-import tec.uom.lib.common.function.UnitSupplier;

-import tec.uom.lib.common.function.ValueSupplier;

-

-/**

- * <p>

- * This class represents the immutable result of a scalar measurement stated in a known unit.

- * </p>

- * 

- * <p>

- * <code>

- *         public static final Quantity&lt;Speed&gt; C = NumberQuantity.parse("299792458 m/s").asType(Speed.class);

- *         // Speed of Light (exact).

- *    </code>

- * </p>

- * 

- * <p>

- * Quantities can be converted to different units.<br>

- * <code>

- *         Quantity&lt;Speed&gt; milesPerHour = C.to(MILES_PER_HOUR); // Use double implementation (fast).

- *         System.out.println(milesPerHour);

- * 

- *         &gt; 670616629.3843951 m/h

- *     </code>

- * </p>

- * 

- * <p>

- * Applications may sub-class {@link AbstractQuantity} for particular quantity types.<br>

- * <code>

- *         // Quantity of type Mass based on double primitive types.<br>

- * public class MassAmount extends AbstractQuantity&lt;Mass&gt; {<br>

- * private final double kilograms; // Internal SI representation.<br>

- * private Mass(double kg) { kilograms = kg; }<br>

- * public static Mass of(double value, Unit&lt;Mass&gt; unit) {<br>

- * return new Mass(unit.getConverterTo(SI.KILOGRAM).convert(value));<br>

- * }<br>

- * public Unit&lt;Mass&gt; getUnit() { return SI.KILOGRAM; }<br>

- * public Double getValue() { return kilograms; }<br>

- * ...<br>

- * }<br>

- * <p>

- * // Complex numbers measurements.<br>

- * public class ComplexQuantity

- * &lt;Q extends Quantity&gt;extends AbstractQuantity

- * &lt;Q&gt;{<br>

- * public Complex getValue() { ... } // Assuming Complex is a Number.<br>

- * ...<br>

- * }<br>

- * <br>

- * // Specializations of complex numbers measurements.<br>

- * public final class Current extends ComplexQuantity&lt;ElectricCurrent&gt; {...}<br>

- * public final class Tension extends ComplexQuantity&lt;ElectricPotential&gt; {...} <br>

- * </code>

- * </p>

- * 

- * <p>

- * All instances of this class shall be immutable.

- * </p>

- * 

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @version 1.4, December 21, 2017

- * @since 0.6

- */

-public abstract class AbstractQuantity<Q extends Quantity<Q>> implements Quantity<Q>, Comparable<Quantity<Q>>, UnitSupplier<Q>, ValueSupplier<Number> {

-

-  /**

-     * 

-     */

-  // private static final long serialVersionUID = -4993173119977931016L;

-

-  private final Unit<Q> unit;

-

-  /**

-   * Holds a dimensionless quantity of none (exact).

-   */

-  public static final Quantity<Dimensionless> NONE = NumberQuantity.of(0, AbstractUnit.ONE);

-

-  /**

-   * Holds a dimensionless quantity of one (exact).

-   */

-  public static final Quantity<Dimensionless> ONE = NumberQuantity.of(1, AbstractUnit.ONE);

-

-  /**

-   * constructor.

-   */

-  protected AbstractQuantity(Unit<Q> unit) {

-    this.unit = unit;

-  }

-

-  /**

-   * Returns the measurement numeric value.

-   *

-   * @return the measurement value.

-   */

-  public abstract Number getValue();

-

-  /**

-   * Returns the measurement unit.

-   *

-   * @return the measurement unit.

-   */

-  public Unit<Q> getUnit() {

-    return unit;

-  }

-

-  /**

-   * Convenient method equivalent to {@link #to(javax.measure.unit.Unit) to(this.getUnit().toSI())}.

-   *

-   * @return this measure or a new measure equivalent to this measure but stated in SI units.

-   * @throws ArithmeticException

-   *           if the result is inexact and the quotient has a non-terminating decimal expansion.

-   */

-  public Quantity<Q> toSI() {

-    return to(this.getUnit().getSystemUnit());

-  }

-

-  /**

-   * Returns this measure after conversion to specified unit. The default implementation returns <code>Measure.valueOf(doubleValue(unit), unit)</code>

-   * . If this measure is already stated in the specified unit, then this measure is returned and no conversion is performed.

-   *

-   * @param unit

-   *          the unit in which the returned measure is stated.

-   * @return this measure or a new measure equivalent to this measure but stated in the specified unit.

-   * @throws ArithmeticException

-   *           if the result is inexact and the quotient has a non-terminating decimal expansion.

-   */

-  public Quantity<Q> to(Unit<Q> unit) {

-    if (unit.equals(this.getUnit())) {

-      return this;

-    }

-    return NumberQuantity.of(doubleValue(unit), unit);

-  }

-

-  /**

-   * Compares this measure to the specified Measurement quantity. The default implementation compares the {@link AbstractQuantity#doubleValue(Unit)}

-   * of both this measure and the specified Measurement stated in the same unit (this measure's {@link #getUnit() unit}).

-   *

-   * @return a negative integer, zero, or a positive integer as this measure is less than, equal to, or greater than the specified Measurement

-   *         quantity.

-   * @see {@link NaturalOrder}

-   */

-  public int compareTo(Quantity<Q> that) {

-    final Comparator<Quantity<Q>> comparator = new NaturalOrder<Q>();

-    return comparator.compare(this, that);

-  }

-

-  /**

-   * Compares this measure against the specified object for <b>strict</b> equality (same unit and same amount).

-   *

-   * <p>

-   * Similarly to the {@link BigDecimal#equals} method which consider 2.0 and 2.00 as different objects because of different internal scales,

-   * measurements such as <code>Measure.valueOf(3.0, KILOGRAM)</code> <code>Measure.valueOf(3, KILOGRAM)</code> and

-   * <code>Quantities.getQuantity("3 kg")</code> might not be considered equals because of possible differences in their implementations.

-   * </p>

-   *

-   * <p>

-   * To compare measures stated using different units or using different amount implementations the {@link #compareTo compareTo} or

-   * {@link #equals(javax.measure.Measurement, double, javax.measure.unit.Unit) equals(Measurement, epsilon, epsilonUnit)} methods should be used.

-   * </p>

-   *

-   * @param obj

-   *          the object to compare with.

-   * @return <code>this.getUnit.equals(obj.getUnit())

-   *         &amp;&amp; this.getValue().equals(obj.getValue())</code>

-   */

-  @Override

-  public boolean equals(Object obj) {

-    if (!(obj instanceof AbstractQuantity<?>)) {

-      return false;

-    }

-    AbstractQuantity<?> that = (AbstractQuantity<?>) obj;

-    return this.getUnit().equals(that.getUnit()) && this.getValue().equals(that.getValue());

-  }

-

-  /**

-   * Compares this measure and the specified Measurement to the given accuracy. Measurements are considered approximately equals if their absolute

-   * differences when stated in the same specified unit is less than the specified epsilon.

-   *

-   * @param that

-   *          the Measurement to compare with.

-   * @param epsilon

-   *          the absolute error stated in epsilonUnit.

-   * @param epsilonUnit

-   *          the epsilon unit.

-   * @return <code>abs(this.doubleValue(epsilonUnit) - that.doubleValue(epsilonUnit)) &lt;= epsilon</code>

-   */

-  public boolean equals(AbstractQuantity<Q> that, double epsilon, Unit<Q> epsilonUnit) {

-    return Math.abs(this.doubleValue(epsilonUnit) - that.doubleValue(epsilonUnit)) <= epsilon;

-  }

-

-  /**

-   * Returns the hash code for this quantity.

-   *

-   * @return the hash code value.

-   */

-  @Override

-  public int hashCode() {

-    return getUnit().hashCode() + getValue().hashCode();

-  }

-

-  protected abstract boolean isBig();

-

-  /**

-   * Returns the <code>String</code> representation of this quantity. The string produced for a given quantity is always the same; it is not affected

-   * by locale. This means that it can be used as a canonical string representation for exchanging quantity, or as a key for a Hashtable, etc.

-   * Locale-sensitive quantity formatting and parsing is handled by the {@link QuantityFormat} class and its subclasses.

-   *

-   * @return <code>UnitFormat.getInternational().format(this)</code>

-   */

-  @Override

-  public String toString() {

-    // return MeasureFormat.getStandard().format(this); TODO improve

-    // MeasureFormat

-    // return String.valueOf(getValue()) + " " + String.valueOf(getUnit());

-    return QuantityFormat.getInstance().format(this);

-  }

-

-  public abstract double doubleValue(Unit<Q> unit) throws ArithmeticException;

-

-  protected long longValue(Unit<Q> unit) throws ArithmeticException {

-    double result = doubleValue(unit);

-    if ((result < Long.MIN_VALUE) || (result > Long.MAX_VALUE)) {

-      throw new ArithmeticException("Overflow (" + result + ")");

-    }

-    return (long) result;

-  }

-

-  protected float floatValue(Unit<Q> unit) {

-    return (float) doubleValue(unit);

-  }

-

-  /**

-   * Casts this quantity to a parameterized unit of specified nature or throw a <code>ClassCastException</code> if the dimension of the specified

-   * quantity and this measure unit's dimension do not match. For example: <br>

-   * <code>

-   *     Measure&lt;Length&gt; length = Quantities.getQuantity("2 km").asType(Length.class);

-   * </code>

-   *

-   * @param type

-   *          the quantity class identifying the nature of the quantity.

-   * @return this quantity parameterized with the specified type.

-   * @throws ClassCastException

-   *           if the dimension of this unit is different from the specified quantity dimension.

-   * @throws UnsupportedOperationException

-   *           if the specified quantity class does not have a public static field named "UNIT" holding the SI unit for the quantity.

-   * @see Unit#asType(Class)

-   */

-  @SuppressWarnings("unchecked")

-  public final <T extends Quantity<T>> Quantity<T> asType(Class<T> type) throws ClassCastException {

-    this.getUnit().asType(type); // Raises ClassCastException is dimension

-    // mismatches.

-    return (Quantity<T>) this;

-  }

-

-  /**

-   * Returns the quantity of unknown type corresponding to the specified representation. This method can be used to parse dimensionless quantities.<br/>

-   * <code>

-   *     Quantity<Dimensionless> proportion = AbstractQuantity.parse("0.234").asType(Dimensionless.class);

-   * </code>

-   *

-   * <p>

-   * Note: This method handles only {@link org.eclipse.uomo.units.SimpleUnitFormat.UnitFormat#getStandard standard} unit format.

-   * </p>

-   *

-   * @param csq

-   *          the decimal value and its unit (if any) separated by space(s).

-   * @return <code>QuantityFormat.getInstance().parse(csq)</code>

-   */

-  public static Quantity<?> parse(CharSequence csq) {

-    return QuantityFormat.getInstance().parse(csq);

-  }

-

-  /**

-   * Utility class for number comparison and equality

-   */

-  protected static final class Equalizer {

-

-    /**

-     * Converts a number to {@link Double}

-     *

-     * @param value

-     *          the value to be converted

-     * @return the value converted

-     */

-    public static Double toDouble(Number value) {

-      if (Double.class.isInstance(value)) {

-        return Double.class.cast(value);

-      }

-      return value.doubleValue();

-    }

-

-    /**

-     * Check if the both value has equality number, in other words, 1 is equals to 1.0000 and 1.0.

-     * 

-     * If the first value is a <type>Number</type> of either <type>Double</type>, <type>Float</type>, <type>Integer</type>, <type>Long</type>,

-     * <type>Short</type> or <type>Byte</type> it is compared using the respective <code>*value()</code> method of <type>Number</type>. Otherwise it

-     * is checked, if {@link Double#compareTo(Object)} is equal to zero.

-     *

-     * @param valueA

-     *          the value a

-     * @param valueB

-     *          the value B

-     * @return {@link Double#compareTo(Object)} == zero

-     */

-    public static boolean hasEquality(Number valueA, Number valueB) {

-      Objects.requireNonNull(valueA);

-      Objects.requireNonNull(valueB);

-

-      if (valueA instanceof Double && valueB instanceof Double) {

-        return valueA.doubleValue() == valueB.doubleValue();

-      } else if (valueA instanceof Float && valueB instanceof Float) {

-        return valueA.floatValue() == valueB.floatValue();

-      } else if (valueA instanceof Integer && valueB instanceof Integer) {

-        return valueA.intValue() == valueB.intValue();

-      } else if (valueA instanceof Long && valueB instanceof Long) {

-        return valueA.longValue() == valueB.longValue();

-      } else if (valueA instanceof Short && valueB instanceof Short) {

-        return valueA.shortValue() == valueB.shortValue();

-      } else if (valueA instanceof Byte && valueB instanceof Byte) {

-        return valueA.byteValue() == valueB.byteValue();

-      }

-      return toDouble(valueA).compareTo(toDouble(valueB)) == 0;

-    }

-  }

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractSystemOfUnits.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractSystemOfUnits.java
deleted file mode 100644
index aad4892..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractSystemOfUnits.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/**

- * Copyright (c) 2005, 2011, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units;

-

-import java.util.Collections;

-import java.util.HashSet;

-import java.util.Set;

-

-import org.eclipse.uomo.core.IName;

-import javax.measure.Quantity;

-import javax.measure.Dimension;

-import javax.measure.spi.ServiceProvider;

-import javax.measure.spi.SystemOfUnits;

-import javax.measure.Unit;

-

-/**

- * <p> An abstract base class for unit systems.</p>

- *

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.2, $Date: 2011-09-11 14:52:11 +0200 (So, 11 Sep 2011) $

- */

-public abstract class AbstractSystemOfUnits implements SystemOfUnits, IName {

-	/**

-	 * Holds collection of units.

-	 */

-	protected static final Set<Unit<?>> UNITS = new HashSet<Unit<?>>();

-

-	// ///////////////////

-	// Collection View //

-	// ///////////////////

-	/**

-	 * Returns a read only view over the units defined in this class.

-	 * 

-	 * @return the collection of units.

-	 */

-	public Set<Unit<?>> getUnits() {

-		return Collections.unmodifiableSet(UNITS);

-	}

-	

-	@Override

-	public Set<Unit<?>> getUnits(Dimension dimension) {

-		return Helper.getUnitsOfDimension(UNITS, dimension);

-	}

-

-	@Override

-	public <T extends Quantity<T>> Unit<T> getUnit(Class<T> quantityType) {

-		return ServiceProvider.current().getQuantityFactory(quantityType).getSystemUnit();

-	}

-	

-	/**

-	 * Adds a new named unit to the collection.

-	 * 

-	 * @param unit the unit being added.

-	 * @param name the name of the unit.

-	 * @return <code>unit</code>.

-	 */

-	@SuppressWarnings("unchecked")

-	protected static <U extends Unit<?>> U addUnit(U unit, String name) {

-		if (name != null && unit instanceof AbstractUnit) {

-			AbstractUnit<?> aUnit = (AbstractUnit<?>)unit;

-			aUnit.setName(name);

-			UNITS.add(aUnit);

-			return (U) aUnit;

-		}

-		UNITS.add(unit);

-		return unit;

-	}

-

-	/**

-	 * Adds a new unit to the collection.

-	 * 

-	 * @param unit

-	 *            the unit being added.

-	 * @return <code>unit</code>.

-	 */

-	protected static <U extends Unit<?>> U addUnit(U unit) {

-		UNITS.add(unit);

-		return unit;

-	}

-	static class Helper {

-		static Set<Unit<?>> getUnitsOfDimension(final Set<Unit<?>> units, 

-				Dimension dimension) {

-			if (dimension != null) {

-				Set<Unit<?>>dimSet = new HashSet<Unit<?>>();

-				for (Unit<?> u : units) {

-					if (dimension.equals(u.getDimension())) {

-						dimSet.add(u);

-					}

-				}

-				return dimSet;

-			}

-			return null;

-		}

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractUnit.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractUnit.java
deleted file mode 100644
index 0c3d57b..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractUnit.java
+++ /dev/null
@@ -1,647 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Jean-Marie Dautelle, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Jean-Marie Dautelle, Steve Emmerson  

- *    - initial API and implementation

- */

-package org.eclipse.uomo.units;

-

-import java.io.IOException;

-import java.io.Serializable;

-import java.math.BigInteger;

-import java.text.ParsePosition;

-import java.util.HashMap;

-import java.util.Map;

-

-import javax.measure.IncommensurableException;

-import javax.measure.Dimension;

-import javax.measure.Quantity;

-import javax.measure.UnconvertibleException;

-import javax.measure.Unit;

-import javax.measure.UnitConverter;

-import javax.measure.format.UnitFormat;

-import javax.measure.quantity.Dimensionless;

-

-import tec.uom.lib.common.function.Nameable;

-import tec.uom.lib.common.function.SymbolSupplier;

-import org.eclipse.uomo.units.impl.AlternateUnit;

-import org.eclipse.uomo.units.impl.BaseUnit;

-import org.eclipse.uomo.units.impl.DimensionImpl;

-import org.eclipse.uomo.units.impl.ProductUnit;

-import org.eclipse.uomo.units.impl.QuantityFactoryImpl;

-import org.eclipse.uomo.units.impl.TransformedUnit;

-import org.eclipse.uomo.units.impl.converter.AddConverter;

-import org.eclipse.uomo.units.impl.converter.LogConverter;

-import org.eclipse.uomo.units.impl.converter.MultiplyConverter;

-import org.eclipse.uomo.units.impl.converter.RationalConverter;

-import org.eclipse.uomo.units.impl.format.LocalUnitFormat;

-import org.eclipse.uomo.units.impl.system.SI;

-

-/**

- * <p>

- * This class represents a determinate

- * {@linkplain javax.measure.quantity.Quantity quantity} (as of length, time,

- * heat, or value) adopted as a standard of measurement.

- * </p>

- * 

- * <p>

- * It is helpful to think of instances of this class as recording the history by

- * which they are created. Thus, for example, the string "g/kg" (which is a

- * dimensionless unit) would result from invoking the method toString() on a

- * unit that was created by dividing a gram unit by a kilogram unit. Yet, "kg"

- * divided by "kg" returns {@link #ONE} and not "kg/kg" due to automatic unit

- * factorization.

- * </p>

- * 

- * <p>

- * This class supports the multiplication of offsets units. The result is

- * usually a unit not convertible to its {@linkplain #toMetric metric unit}.

- * Such units may appear in derivative quantities. For example Celsius per meter

- * is an unit of gradient, which is common in atmospheric and oceanographic

- * research.

- * </p>

- * 

- * <p>

- * Units raised at non-integral powers are not supported. For example,

- * <code>LITRE.root(2)</code> raises an <code>ArithmeticException</code>; but

- * <code>LITRE.toMetric().root(2)</code> returns <code>METRE</code>.

- * </p>

- * 

- * <p>

- * Instances of this class and sub-classes are immutable.

- * </p>

- * 

- * @param <Q>

- *            The type of the quantity measured by this unit.

- * 

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author <a href="mailto:steve@unidata.ucar.edu">Steve Emmerson</a>

- * @author <a href="mailto:desruisseaux@users.sourceforge.net">Martin

- *         Desruisseaux</a>

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * 

- * @version 1.9, $Date: 2017-11-24 $

- * @see <a href="http://en.wikipedia.org/wiki/Units_of_measurement"> Wikipedia:

- *      Units of measurement</a>

- */

-public abstract class AbstractUnit<Q extends Quantity<Q>> implements Unit<Q>, Nameable, SymbolSupplier, Serializable {

-

-	/**

-	 * For cross-version compatibility.

-	 */

-	private static final long serialVersionUID = -2107517222666572443L;

-

-	/**

-	 * Holds the name.

-	 */

-	private String name;

-

-	/**

-	 * Holds the symbol.

-	 */

-	private String symbol;

-

-	/**

-	 * Holds the dimensionless unit <code>ONE</code>.

-	 */

-	public static final Unit<Dimensionless> ONE = new ProductUnit<Dimensionless>();

-

-	/**

-	 * Holds the unique symbols collection (base unit or alternate units).

-	 */

-	protected static final HashMap<String, Unit<?>> SYMBOL_TO_UNIT = new HashMap<String, Unit<?>>();

-

-	/**

-	 * Default constructor.

-	 */

-	protected AbstractUnit() {

-		this(null);

-	}

-

-	/**

-	 * Named constructor.

-	 */

-	protected AbstractUnit(String name) {

-		this.name = name;

-	}

-

-	protected void setName(String name) {

-		this.name = name;

-	}

-

-	@Override

-	public String getName() {

-		return name;

-	}

-

-	/**

-	 * Returns the symbol (if any) of this unit. The default implementation

-	 * returns <code>null</code> (no symbol).

-	 * 

-	 * @return this unit symbol or <code>null</code> if this unit has not

-	 *         specific symbol associated with (e.g. product of units).

-	 */

-	public String getSymbol() {

-		return null;

-	}

-

-	protected void setSymbol(String s) {

-		this.symbol = s;

-	}

-

-	/**

-	 * Returns the simple units and their exponent whose product is this unit or

-	 * <code>null</code> if this unit is a simple unit (not a product of

-	 * existing units).

-	 * 

-	 * @return the simple units and their exponent making up this unit.

-	 */

-	public Map<Unit<?>, Integer> getProductUnits() {

-		return null;

-	}

-

-	// ////////////////////////////////////////////////////

-	// Contract methods (for sub-classes to implement). //

-	// ////////////////////////////////////////////////////

-	/**

-	 * Returns the unscaled metric unit from which this unit is derived.

-	 * <p>

-	 * Metric units are either {@link BaseUnit base units}, {@link #alternate

-	 * alternate units} or product of rational powers of metric units.

-	 * </p>

-	 * <p>

-	 * Because the metric unit is unique by quantity type, it can be be used to

-	 * identify the quantity given the unit. For example:[code] static boolean

-	 * isAngularSpeed(Unit<?> unit) { return

-	 * unit.toMetric().equals(RADIAN.divide(SECOND)); }

-	 * assert(REVOLUTION.divide(MINUTE).isAngularSpeed()); // Returns true.

-	 * [/code]

-	 * 

-	 * @return the metric unit this unit is derived from or <code>this</code> if

-	 *         this unit {@link #isMetric() is a metric} unit.

-	 * @see #isMetric()

-	 */

-	protected abstract Unit<Q> toMetric();

-

-	/**

-	 * Returns the converter to the metric unit.

-	 * 

-	 * <p>

-	 * <i> Note: Having the same metric unit is not sufficient to ensure that a

-	 * converter exists between the two units (e.g. °C/m and K/m).</i>

-	 * </p>

-	 * 

-	 * @return the unit converter from this unit to its metric unit.

-	 */

-	public abstract UnitConverter getConverterToMetric();

-

-	/**

-	 * Returns the hash code for this unit.

-	 * 

-	 * @return this unit hashcode value.

-	 */

-	@Override

-	public abstract int hashCode();

-

-	/**

-	 * Indicates if the specified unit can be considered equals to the one

-	 * specified.

-	 * 

-	 * @param that

-	 *            the object to compare to.

-	 * @return <code>true</code> if this unit is considered equal to that unit;

-	 *         <code>false</code> otherwise.

-	 */

-	@Override

-	public abstract boolean equals(Object that);

-

-	/**

-	 * Indicates if this unit is an unscaled metric unit. Metric units are

-	 * either {@link BaseUnit base units}, {@link #alternate alternate units} or

-	 * product of rational powers of metric units. Because metric units are

-	 * unscaled units, {@link SI#METRE METRE} is a metric units; but

-	 * <code>KILO(METRE)</code> is not.

-	 * 

-	 * @return <code>this.toMetric().equals(this)</code>

-	 * @see #toMetric()

-	 */

-	public boolean isUnscaledMetric() {

-		return toMetric().equals(this);

-	}

-

-	/**

-	 * Indicates if this unit is compatible with the unit specified. Units don't

-	 * need to be equals to be compatible. For example:[code] RADIAN.equals(ONE)

-	 * == false RADIAN.isCompatible(ONE) == true [/code]

-	 * 

-	 * @param that

-	 *            the other unit.

-	 * @return <code>this.getDimension().equals(that.getDimension())</code>

-	 * @see #getDimension()

-	 */

-	public final boolean isCompatible(Unit<?> that) {

-		return (this == that) || this.toMetric().equals(that.getSystemUnit())

-				|| (!"".equals(this.getDimension().toString()) && this //$NON-NLS-1$

-						.getDimension().equals(that.getDimension()));

-	}

-

-	/**

-	 * Casts this unit to a parameterized unit of specified nature or throw a

-	 * <code>ClassCastException</code> if the dimension of the specified

-	 * quantity and this unit's dimension do not match. For example:[code]

-	 * Unit<Speed> C =

-	 * METRE.times(299792458).divide(SECOND).asType(Speed.class); [/code]

-	 * 

-	 * @param <T>

-	 *            The type of the quantity measured by the unit.

-	 * @param type

-	 *            the quantity class identifying the nature of the unit.

-	 * @return this unit parameterized with the specified type.

-	 * @throws ClassCastException

-	 *             if the dimension of this unit is different from the specified

-	 *             quantity dimension.

-	 * @throws UnsupportedOperationException

-	 *             if the specified type is not recognized.

-	 */

-	@SuppressWarnings("unchecked")

-	public final <T extends Quantity<T>> Unit<T> asType(Class<T> type) throws ClassCastException {

-		Unit<T> metricUnit = QuantityFactoryImpl.getInstance(type).getSystemUnit();

-		if ((metricUnit == null) || metricUnit.isCompatible(this))

-			return (Unit<T>) this;

-		throw new ClassCastException("The unit: " + this //$NON-NLS-1$

-				+ " is not of parameterized type " + type); //$NON-NLS-1$

-		// TODO use NLS

-	}

-

-	/**

-	 * Returns the dimension of this unit (depends upon the current dimension

-	 * {@linkplain QuantityDimension.Model model}).

-	 * 

-	 * @return the dimension of this unit for the current model.

-	 */

-	public Dimension getDimension() {

-		// All possible metric units (BaseUnit, AlternateUnit and ProductUnit)

-		// overrides this method.

-		return this.toMetric().getDimension();

-	}

-

-	/**

-	 * Returns the intrinsic dimensional transform of this unit (depends upon

-	 * the current {@linkplain QuantityDimension.Model model} for

-	 * {@link BaseUnit} instance). Metric units should override this method.

-	 * 

-	 * @return the intrinsic transformation of this unit relatively to its

-	 *         dimension.

-	 * @throws UnsupportedOperationException

-	 *             if this unit is a metric unit and it does not override this

-	 *             method.

-	 */

-	public UnitConverter getDimensionalTransform() {

-		// All possible metric units (BaseUnit, AlternateUnit and ProductUnit)

-		// overrides this method.

-		return this.getConverterToMetric().concatenate(((AbstractUnit<Q>) this.toMetric()).getDimensionalTransform());

-	}

-

-	/**

-	 * Returns a converter of numeric values from this unit to another unit of

-	 * same type (convenience method not raising checked exception).

-	 * 

-	 * @param that

-	 *            the unit of same type to which to convert the numeric values.

-	 * @return the converter from this unit to <code>that</code> unit.

-	 * @throws UnconvertibleException

-	 *             if the converter cannot be constructed.

-	 */

-	public UnitConverter getConverterTo(Unit<Q> that) throws UnconvertibleException {

-		return searchConverterTo(that);

-	}

-

-	/**

-	 * Returns a converter form this unit to the specified unit of type unknown.

-	 * This method can be used when the dimension of the specified unit is

-	 * unknown at compile-time or when the {@linkplain QuantityDimension.Model

-	 * dimensional model} allows for conversion between units of different type.

-	 * To convert to a unit having the same parameterized type,

-	 * {@link #getConverterTo(AbstractUnit)} is preferred (no checked exception

-	 * raised).

-	 * 

-	 * @param that

-	 *            the unit to which to convert the numeric values.

-	 * @return the converter from this unit to <code>that</code> unit.

-	 * @throws ConversionException

-	 *             if the units are not compatible (e.g.

-	 *             <code>!this.isCompatible(that)</code>).

-	 * @throws UnsupportedOperationException

-	 *             if the converter cannot be constructed.

-	 */

-	public UnitConverter getConverterToAny(Unit<?> that) throws IncommensurableException, UnconvertibleException {

-		return ((this == that) || this.equals(that)) ? AbstractConverter.IDENTITY : searchConverterTo(that);

-	}

-

-	@SuppressWarnings("unchecked")

-	private UnitConverter searchConverterTo(Unit<?> that) throws UnconvertibleException {

-		// First we have find a common dimension to convert to.

-

-		// Try the SI unit.

-		Unit<Q> thisSI = this.toMetric();

-		Unit<?> thatSI = that.getSystemUnit();

-		if (thisSI.equals(thatSI))

-			return ((AbstractUnit<?>) that).getConverterToMetric().inverse().concatenate(this.getConverterToMetric());

-

-		// Use dimensional unit.

-		if (!thisSI.getDimension().equals(thatSI.getDimension()))

-			throw new UnconvertibleException(this + " is not compatible with " //$NON-NLS-1$

-					+ that);

-		UnitConverter thisTransform = ((AbstractUnit<?>) thisSI).getDimensionalTransform()

-				.concatenate(this.getConverterToMetric());

-		@SuppressWarnings("rawtypes")

-		UnitConverter thatTransform = ((AbstractUnit<Dimensionless>) thatSI).getDimensionalTransform()

-				.concatenate(((AbstractUnit) that).getConverterToMetric());

-		return thatTransform.inverse().concatenate(thisTransform);

-	}

-

-	/**

-	 * Returns a metric unit equivalent to this unscaled metric unit but used in

-	 * expressions to distinguish between quantities of a different nature but

-	 * of the same dimensions.

-	 * 

-	 * <p>

-	 * Examples of alternate units:[code] Unit<Angle> RADIAN =

-	 * ONE.alternate("rad"); Unit<Force> NEWTON =

-	 * METRE.times(KILOGRAM).divide(SECOND.pow(2)).alternate("N");

-	 * Unit<Pressure> PASCAL = NEWTON.divide(METRE.pow(2)).alternate("Pa");

-	 * [/code]

-	 * </p>

-	 * 

-	 * @param <Q>

-	 *            the type of the quantity measured by the new alternate unit.

-	 * 

-	 * @param symbol

-	 *            the new symbol for the alternate unit.

-	 * @return the alternate unit.

-	 * @throws UnsupportedOperationException

-	 *             if this unit is not an unscaled metric unit.

-	 * @throws IllegalArgumentException

-	 *             if the specified symbol is already associated to a different

-	 *             unit.

-	 */

-	@SuppressWarnings({ "unchecked", "rawtypes" })

-	public final Unit<Q> alternate(String symbol) {

-		return new AlternateUnit(this, symbol);

-	}

-

-	/**

-	 * Returns the unit derived from this unit using the specified converter.

-	 * The converter does not need to be linear. For example:[code]

-	 * Unit<Dimensionless> DECIBEL = Unit.ONE.transform( new

-	 * LogConverter(10).inverse().concatenate( new RationalConverter(1, 10)));

-	 * [/code]

-	 * 

-	 * @param operation

-	 *            the converter from the transformed unit to this unit.

-	 * @return the unit after the specified transformation.

-	 */

-	@SuppressWarnings("unchecked")

-	public final Unit<Q> transform(UnitConverter operation) {

-		if (this instanceof TransformedUnit) {

-			Unit<Q> tf = this;

-			Unit<?> parent = (Unit<?>) ((TransformedUnit<?>) tf).getParentUnit();

-			UnitConverter toParent = ((TransformedUnit<?>) tf).toParentUnit();

-			if (toParent == null)

-				return (Unit<Q>) parent;

-			UnitConverter toParentConcat = toParent.concatenate(operation);

-			if (toParentConcat == AbstractConverter.IDENTITY)

-				return (Unit<Q>) parent;

-			return new TransformedUnit<Q>((Unit<Q>) parent, (AbstractConverter) toParentConcat);

-		}

-		if (operation == AbstractConverter.IDENTITY)

-			return this;

-		return new TransformedUnit<Q>(this, (AbstractConverter) operation);

-	}

-

-	/**

-	 * Returns the result of adding an offset to this unit. The returned unit is

-	 * convertible with all units that are convertible with this unit.

-	 * 

-	 * @param offset

-	 *            the offset added (expressed in this unit, e.g.

-	 *            <code>CELSIUS = KELVIN.add(273.15)</code>).

-	 * @return <code>this.transform(new AddConverter(offset))</code>

-	 */

-	public final Unit<Q> shift(double offset) {

-		if (offset == 0)

-			return this;

-		return transform(new AddConverter(offset));

-	}

-

-	/**

-	 * Returns the result of multiplying this unit by an exact factor.

-	 * 

-	 * @param factor

-	 *            the exact scale factor (e.g.

-	 *            <code>KILOMETRE = METRE.multiply(1000)</code>).

-	 * @return <code>this.transform(new RationalConverter(factor, 1))</code>

-	 */

-	final Unit<Q> multiply(long factor) {

-		if (factor == 1)

-			return this;

-		return transform(new RationalConverter(BigInteger.valueOf(factor), BigInteger.ONE));

-	}

-

-	/**

-	 * Returns the result of multiplying this unit by a an approximate factor.

-	 * 

-	 * @param factor

-	 *            the approximate factor (e.g.

-	 *            <code>ELECTRON_MASS = KILOGRAM.multiply(9.10938188e-31)</code>

-	 *            ).

-	 * @return <code>this.transform(new MultiplyConverter(factor))</code>

-	 */

-	public final Unit<Q> multiply(double factor) {

-		if (factor == 1)

-			return this;

-		return transform(new MultiplyConverter(factor));

-	}

-

-	/**

-	 * Returns the product of this unit with the one specified.

-	 * 

-	 * @param that

-	 *            the unit multiplicand.

-	 * @return <code>this * that</code>

-	 */

-	@SuppressWarnings({ "unchecked", "rawtypes" })

-	public final Unit<?> multiply(Unit<?> that) {

-		if (this.equals(ONE))

-			return that;

-		if (that.equals(ONE))

-			return this;

-		if (this.isRationalFactor())

-			return that.transform(this.getConverterTo((Unit) ONE));

-		if (((AbstractUnit) that).isRationalFactor())

-			return this.transform(that.getConverterTo((Unit) ONE));

-		return ProductUnit.getProductInstance(this, (AbstractUnit<?>) that);

-	}

-

-	private boolean isRationalFactor() {

-		if (!(this instanceof TransformedUnit<?>))

-			return false;

-		TransformedUnit<Q> tu = (TransformedUnit<Q>) this;

-		return tu.getParentUnit().equals(ONE) && (tu.getConverterTo(tu.getSystemUnit()) instanceof RationalConverter);

-	}

-

-	/**

-	 * Returns the inverse of this unit.

-	 * 

-	 * @return <code>1 / this</code>

-	 */

-	@SuppressWarnings({ "unchecked", "rawtypes" })

-	public final Unit<?> inverse() {

-		if (this.equals(ONE))

-			return this;

-		if (this.isRationalFactor())

-			return this.transform(this.getConverterTo((Unit) ONE).inverse());

-		return ProductUnit.getQuotientInstance((AbstractUnit<?>) ONE, this);

-	}

-

-	/**

-	 * Returns the result of dividing this unit by an exact divisor.

-	 * 

-	 * @param divisor

-	 *            the exact divisor. (e.g.

-	 *            <code>QUART = GALLON_LIQUID_US.divide(4)</code>).

-	 * @return <code>this.transform(new RationalConverter(1 , divisor))</code>

-	 */

-	public final Unit<Q> divide(long divisor) {

-		if (divisor == 1)

-			return this;

-		return transform(new RationalConverter(BigInteger.ONE, BigInteger.valueOf(divisor)));

-	}

-

-	/**

-	 * Returns the result of dividing this unit by an approximate divisor.

-	 * 

-	 * @param divisor

-	 *            the approximate divisor.

-	 * @return <code>this.transform(new MultiplyConverter(1.0 / divisor))</code>

-	 */

-	public final Unit<Q> divide(double divisor) {

-		if (divisor == 1)

-			return this;

-		return transform(new MultiplyConverter(1.0 / divisor));

-	}

-

-	/**

-	 * Returns the logarithmic result of this unit.

-	 * 

-	 * @param base

-	 *            the logarithmic base.

-	 * @return <code>this.transform(new MultiplyConverter(1.0 / divisor))</code>

-	 */

-	public final Unit<Q> log(double base) {

-		return transform(new LogConverter(base));

-	}

-

-	/**

-	 * Returns the quotient of this unit with the one specified.

-	 * 

-	 * @param that

-	 *            the unit divisor.

-	 * @return <code>this / that</code>

-	 */

-	public final Unit<?> divide(Unit<?> that) {

-		return (AbstractUnit<?>) this.multiply(that.inverse());

-	}

-

-	/**

-	 * Returns a unit equals to the given root of this unit.

-	 * 

-	 * @param n

-	 *            the root's order.

-	 * @return the result of taking the given root of this unit.

-	 * @throws ArithmeticException

-	 *             if <code>n == 0</code> or if this operation would result in

-	 *             an unit with a fractional exponent.

-	 */

-	public final Unit<?> root(int n) {

-		if (n > 0)

-			return ProductUnit.getRootInstance(this, n);

-		else if (n == 0)

-			throw new ArithmeticException("Root's order of zero"); //$NON-NLS-1$

-		else

-			// n < 0

-			return ONE.divide(this.root(-n));

-	}

-

-	/**

-	 * Returns a unit equals to this unit raised to an exponent.

-	 * 

-	 * @param n

-	 *            the exponent.

-	 * @return the result of raising this unit to the exponent.

-	 */

-	public final Unit<?> pow(int n) {

-		if (n > 0)

-			return this.multiply(this.pow(n - 1));

-		else if (n == 0)

-			return ONE;

-		else

-			// n < 0

-			return ONE.divide(this.pow(-n));

-	}

-

-	/**

-	 * Returns a unit instance that is defined from the specified character

-	 * sequence (text) using the {@linkplain AbstractUnitFormat#getInstance

-	 * default} unit format (<a href="http://unitsofmeasure.org/">UCUM</a>

-	 * based). This method is capable of parsing any units representations

-	 * produced by {@link #toString()}. Locale-sensitive unit formatting and

-	 * parsing are handled by the {@link AbstractUnitFormat} class and its

-	 * subclasses.

-	 * 

-	 * <p>

-	 * This method can be used to parse dimensionless units.[code]

-	 * Unit<Dimensionless> PERCENT =

-	 * Unit.valueOf("100").inverse().asType(Dimensionless.class); [/code]

-	 * 

-	 * @param charSequence

-	 *            the character sequence to parse.

-	 * @return <code>UnitFormat.getInstance().parse(csq, new ParsePosition(0))</code>

-	 * @throws IllegalArgumentException

-	 *             if the specified character sequence cannot be correctly

-	 *             parsed (e.g. not UCUM compliant).

-	 */

-	public static Unit<?> valueOf(CharSequence charSequence) {

-		return LocalUnitFormat.getInstance().parse(charSequence, new ParsePosition(0));

-	}

-

-	// ////////////////////

-	// GENERAL CONTRACT //

-	// ////////////////////

-	/**

-	 * Returns the international <code>String</code> representation of this unit

-	 * (<a href="http://unitsofmeasure.org/">UCUM</a> based). The string

-	 * produced for a given unit is always the same; it is not affected by the

-	 * locale. This means that it can be used as a canonical string

-	 * representation for exchanging units, or as a key for a Hashtable, etc.

-	 * Locale-sensitive unit formatting and parsing is handled by

-	 * {@link AbstractUnitFormat} class and its subclasses.

-	 * 

-	 * @return <code>UnitFormat.getInstance().format(this)</code>

-	 */

-	@Override

-	public String toString() {

-		try {

-			UnitFormat format = LocalUnitFormat.getInstance();

-			return String.valueOf(format.format(this, new StringBuilder()));

-		} catch (IOException e) {

-			// TODO should this happen?

-			return ""; //$NON-NLS-1$

-		}

-	}

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractUnitFormat.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractUnitFormat.java
deleted file mode 100644
index 349a5b6..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/AbstractUnitFormat.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- * Copyright (c) 2005, 2017, Werner Keil, Ikayzo and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-package org.eclipse.uomo.units;
-
-import java.io.IOException;
-import java.text.Format;
-import java.text.ParsePosition;
-import java.util.Locale;
-
-import org.eclipse.uomo.units.impl.format.LocalUnitFormat;
-import org.eclipse.uomo.units.impl.system.USCustomary;
-import javax.measure.Unit;
-import javax.measure.format.UnitFormat;
-
-
-/**
- * <p> This class provides the interface for formatting and parsing {@link
- *     AbstractUnit units}.</p>
- *
- * <p> For all metric units, the 20 SI prefixes used to form decimal
- *     multiples and sub-multiples of SI units are recognized.
- *     {@link USCustomary US Customary} units are directly recognized. For example:[code]
- *        Unit.valueOf("m°C").equals(SI.MILLI(SI.CELSIUS))
- *        Unit.valueOf("kW").equals(SI.KILO(SI.WATT))
- *        Unit.valueOf("ft").equals(SI.METRE.multiply(3048).divide(10000))[/code]</p>
- *
- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.5.1 ($Revision: 215 $), $Date: 2010-09-19 22:12:08 +0200 (So, 19 Sep 2010) $
- * 
- */
-public abstract class AbstractUnitFormat extends Format implements UnitFormat {
-
-   /**
-     * Returns the {@link SymbolMap} for this unit format.
-     *
-     * @return the symbol map used by this format.
-     */
-    protected abstract SymbolMap getSymbolMap();
-
-    /**
-     * Formats the specified unit.
-     *
-     * @param unit the unit to format.
-     * @param appendable the appendable destination.
-     * @return The appendable destination passed in as {@code appendable},
-     *         with formatted text appended.
-     * @throws IOException if an error occurs.
-     */
-    public abstract Appendable format(Unit<?> unit, Appendable appendable)
-            throws IOException;
-
-    /**
-     * Parses a portion of the specified <code>CharSequence</code> from the
-     * specified position to produce a unit. If there is no unit to parse
-     * {@link AbstractUnit#ONE} is returned.
-     *
-     * @param csq the <code>CharSequence</code> to parse.
-     * @param cursor the cursor holding the current parsing index.
-     * @return the unit parsed from the specified character sub-sequence.
-     * @throws IllegalArgumentException if any problem occurs while parsing the
-     *         specified character sequence (e.g. illegal syntax).
-     */
-    public abstract Unit<?> parse(CharSequence csq, ParsePosition cursor)
-            throws IllegalArgumentException;
-
-    /**
-     * Return a formatter for CurrencyAmount objects in the given
-     * locale.
-     * @param locale desired locale
-     * @return a formatter object
-     * @stable ICU 3.0
-     */
-    public static AbstractUnitFormat getUnitFormat(Locale locale) {
-        return LocalUnitFormat.getInstance(locale);
-    }
-
-    /**
-     * Return a formatter for CurrencyAmount objects in the default
-     * locale.
-     * @return a formatter object
-     * @stable ICU 3.0
-     */
-    public static AbstractUnitFormat getUnitFormat() {
-        return getUnitFormat(Locale.getDefault());
-    }
-    
-    /**
-     * Convenience method equivalent to {@link #format(AbstractUnit, Appendable)}
-     * except it does not raise an IOException.
-     *
-     * @param unit the unit to format.
-     * @param dest the appendable destination.
-     * @return the specified <code>StringBuilder</code>.
-     */
-    final StringBuilder format(AbstractUnit<?> unit, StringBuilder dest) {
-        try {
-            return (StringBuilder) this.format(unit, (Appendable) dest);
-        } catch (IOException ex) {
-            throw new Error(ex); // Can never happen.
-        }
-    }
-
-    /**
-     * serialVersionUID
-     */
-    private static final long serialVersionUID = -2046025267890654321L;
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/Activator.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/Activator.java
deleted file mode 100644
index 9a2482f..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/Activator.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (c) 2005, 2017, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil - initial API and implementation
- */
-package org.eclipse.uomo.units;
-
-import java.util.Dictionary;
-import java.util.Locale;
-
-import javax.measure.spi.SystemOfUnits;
-import javax.measure.spi.SystemOfUnitsService;
-import javax.measure.spi.UnitFormatService;
-
-import org.eclipse.uomo.units.impl.format.UnitFormatServiceImpl;
-import org.eclipse.uomo.units.impl.system.SystemOfUnitsServiceImpl;
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceEvent;
-import org.osgi.framework.ServiceListener;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * OSGi part of implementation.
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 0.6, $Date: 2017-07-31 $
- */
-public class Activator implements BundleActivator, ServiceListener {
-	private SystemOfUnitsService souService;
-	private ServiceTracker souServiceTracker;
-	private UnitFormatService formatService;
-	private ServiceTracker formatServiceTracker;
-	private BundleContext fContext;
-	
-	/*
-	 * (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
-	public void start(BundleContext context) throws Exception {
-		fContext = context;
-		
-		// register the services
-		startFormat(context, null);
-		startSOU(context, null);
-//		startDictionary(context, props);
-	}
-	
-	private void startFormat(BundleContext context, Dictionary<String, ?> props) throws Exception {
-		formatService = new UnitFormatServiceImpl();
-		
-		// register the service
-		context.registerService(UnitFormatService.class.getName(), formatService, props);
-
-		// create a tracker and track the service
-		formatServiceTracker = new ServiceTracker(context, UnitFormatService.class.getName(), null);
-		formatServiceTracker.open();
-
-		// have a service listener to implement the whiteboard pattern
-	    fContext.addServiceListener(this, "(objectclass=" + Locale.class.getName() + ")");
-		
-		// grab the service
-//		formatService = (LocalFormatService) formatServiceTracker.getService();
-		
-		// register the locale
-//		formatService.registerDictionary(new DictionaryImpl());
-	}
-	
-	private void startSOU(BundleContext context, Dictionary<String, ?> props) throws Exception {
-		souService = new SystemOfUnitsServiceImpl();
-		
-		// register the service
-		context.registerService(SystemOfUnitsService.class.getName(), souService, props);
-
-		// create a tracker and track the service
-		souServiceTracker = new ServiceTracker(context, SystemOfUnitsService.class.getName(), null);
-		souServiceTracker.open();
-
-		// have a service listener to implement the whiteboard pattern
-	    fContext.addServiceListener(this, "(objectclass=" + SystemOfUnits.class.getName() + ")");
-		
-		// grab the service
-//		formatService = (LocalFormatService) formatServiceTracker.getService();
-		
-	}	
-
-	/*
-	 * (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
-	public void stop(BundleContext context) throws Exception {
-		// close the service tracker(s)
-		stopFormat();
-		stopSOU();
-//		stopDictionary();
-		fContext = null;
-	}
-	
-	private void stopFormat() throws Exception {
-		formatServiceTracker.close();
-		formatServiceTracker = null;
-
-		formatService = null;
-	}
-	
-	private void stopSOU() throws Exception {
-		souServiceTracker.close();
-		souServiceTracker = null;
-
-		souService = null;
-	}
-
-	public void serviceChanged(ServiceEvent ev) {
-//		ServiceReference sr = ev.getServiceReference();
-		switch(ev.getType()) {
-			case ServiceEvent.REGISTERED:
-			{
-//				Dictionary dictionary = (Dictionary) fContext.getService(sr);
-//				dictService.registerDictionary(dictionary);
-			}
-			break;
-			case ServiceEvent.UNREGISTERING:
-			{
-//				Dictionary dictionary = (Dictionary) fContext.getService(sr);
-//				dictService.unregisterDictionary(dictionary);
-			}
-			break;
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/BinaryPrefix.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/BinaryPrefix.java
deleted file mode 100644
index ef57a5c..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/BinaryPrefix.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation

- */

-package org.eclipse.uomo.units;

-

-import java.math.BigInteger;

-

-import org.eclipse.uomo.units.impl.converter.RationalConverter;

-import javax.measure.Quantity;

-import javax.measure.Unit;

-

-// ///////////////////

-// BINARY PREFIXES  //

-// ///////////////////

-/**

- * Utility class holding binary prefixes.

- * 

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.1 ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $

- * @see <a href="http://en.wikipedia.org/wiki/Binary_prefix">Wikipedia: Binary

- *      Prefix</a>

- * @deprecated use org.eclipse.uomo.units.impl.system.BinaryPrefix

- */

-public final class BinaryPrefix {

-

-	private BinaryPrefix() {

-		// Utility class no visible constructor.

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>10</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1024)</code>.

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> KIBI(Unit<?> unit) {

-		return unit.multiply(K);

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>20</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1048576)</code>.

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> MEBI(Unit<?> unit) {

-		return unit.multiply(K2);

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>30</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1073741824)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<?> GIBI(Unit<?> unit) {

-		return unit.multiply(K3);

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>40</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1099511627776L)</code>.

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> TEBI(Unit<?> unit) {

-		return unit.multiply(1099511627776L);

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>50</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1125899906842624L)</code>.

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> PEBI(Unit<?> unit) {

-		return unit.multiply(1125899906842624L);

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>60</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1152921504606846976L)</code>.

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> EXBI(Unit<?> unit) {

-		return unit.multiply(1152921504606846976L);

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>70</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.transform(2<sup>70</sup>)</code>.

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> ZEBI(Unit<?> unit) {

-		return unit.transform(K70);

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>80</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.transform(2<sup>80</sup>)</code>.

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> YOBI(Unit<?> unit) {

-		return unit.transform(K80);

-	}

-

-	// ///////////////////

-	//  JDEC PREFIXES   //

-	// ///////////////////

-	

-	/**

-	 * <p>

-	 * kilo (K)

-	 * </p>

-	 * This JEDEC prefix is equivalent to <{@link #KIBI}>.

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1024)</code>.

-	 * @see <a

-	 *      href="http://en.wikipedia.org/wiki/JEDEC_memory_standards">Wikipedia:

-	 *      JEDEC memory standards</a>

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> JEDEC_KILO(Unit<?> unit) {

-		return unit.multiply(K);

-	}

-

-	/**

-	 * <p>

-	 * mega (M)

-	 * </p>

-	 * This JEDEC prefix is equal to <{@link #MEBI}>.

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1048576)</code>.

-	 * @see <a

-	 *      href="http://en.wikipedia.org/wiki/JEDEC_memory_standards">Wikipedia:

-	 *      JEDEC memory standards</a>

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> JEDEC_MEGA(Unit<?> unit) {

-		return unit.multiply(K2);

-	}

-

-	/**

-	 * <p>

-	 * giga (G)

-	 * </p>

-	 * This JEDEC prefix is equal to <{@link #GIBI}>.

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1073741824)</code>.

-	 * @see <a

-	 *      href="http://en.wikipedia.org/wiki/JEDEC_memory_standards">Wikipedia:

-	 *      JEDEC memory standards</a>

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> JEDEC_GIGA(Unit<?> unit) {

-		return unit.multiply(K3);

-	}

-

-	// Holds prefix converters (optimization).

-	private static int K = 1024;

-

-	private static int K2 = 1048576;

-

-	private static int K3 = 1073741824;

-

-	private static RationalConverter K70 = new RationalConverter(BigInteger

-			.valueOf(2).pow(70), BigInteger.ONE);

-

-	private static RationalConverter K80 = new RationalConverter(BigInteger

-			.valueOf(2).pow(80), BigInteger.ONE);

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/ComparableQuantity.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/ComparableQuantity.java
deleted file mode 100644
index 52055cd..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/ComparableQuantity.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units;

-import java.io.Serializable;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-

-/**

- * Quantity specialized for the Java SE platform. It extends {@link Quantity} with {@linkplain Comparable} and {@linkplain Serializable }

- * 

- * @see {@link Quantity}

- * @author otaviojava

- * @author werner

- * @param <Q>

- * @version 1.0.1, August 7, 2017

- * @since 0.7

- */

-public interface ComparableQuantity<Q extends Quantity<Q>> extends Quantity<Q>, Comparable<Quantity<Q>>, Serializable {

-

-  /**

-   * @see Quantity#add(Quantity)

-   */

-  ComparableQuantity<Q> add(Quantity<Q> that);

-

-  /**

-   * @see Quantity#subtract(Quantity)

-   */

-  ComparableQuantity<Q> subtract(Quantity<Q> that);

-

-  /**

-   * @see Quantity#divide(Quantity)

-   */

-  ComparableQuantity<?> divide(Quantity<?> that);

-

-  /**

-   * @see Quantity#divide(Number)

-   */

-  ComparableQuantity<Q> divide(Number that);

-

-  /**

-   * @see Quantity#multiply(Quantity)

-   */

-  ComparableQuantity<?> multiply(Quantity<?> multiplier);

-

-  /**

-   * @see Quantity#multiply(Number)

-   */

-  ComparableQuantity<Q> multiply(Number multiplier);

-

-  /**

-   * @see Quantity#inverse()

-   */

-  ComparableQuantity<?> inverse();

-

-  /**

-   * invert and already cast to defined quantityClass

-   * 

-   * @param quantityClass

-   *          Quantity to be converted

-   * @see Quantity#inverse()

-   * @see Quantity#asType(Class)

-   */

-  <T extends Quantity<T>> ComparableQuantity<T> inverse(Class<T> quantityClass);

-

-  /**

-   * @see Quantity#to(Unit)

-   */

-  ComparableQuantity<Q> to(Unit<Q> unit);

-

-  /**

-   * @see Quantity#asType(Class)

-   */

-  <T extends Quantity<T>> ComparableQuantity<T> asType(Class<T> type) throws ClassCastException;

-

-  /**

-   * Compares two instances of {@link Quantity <Q>}. Conversion of unit can happen if necessary

-   *

-   * @param that

-   *          the {@code quantity<Q>} to be compared with this instance.

-   * @return {@code true} if {@code that > this}.

-   * @throws NullPointerException

-   *           if the that is null

-   */

-  boolean isGreaterThan(Quantity<Q> that);

-

-  /**

-   * Compares two instances of {@link Quantity <Q>}, doing the conversion of unit if necessary.

-   *

-   * @param that

-   *          the {@code quantity<Q>} to be compared with this instance.

-   * @return {@code true} if {@code that >= this}.

-   * @throws NullPointerException

-   *           if the that is null

-   */

-  boolean isGreaterThanOrEqualTo(Quantity<Q> that);

-

-  /**

-   * Compares two instances of {@link Quantity <Q>}, doing the conversion of unit if necessary.

-   *

-   * @param that

-   *          the {@code quantity<Q>} to be compared with this instance.

-   * @return {@code true} if {@code that < this}.

-   * @throws NullPointerException

-   *           if the quantity is null

-   */

-  boolean isLessThan(Quantity<Q> that);

-

-  /**

-   * Compares two instances of {@link Quantity <Q>}, doing the conversion of unit if necessary.

-   *

-   * @param that

-   *          the {@code quantity<Q>} to be compared with this instance.

-   * @return {@code true} if {@code that < this}.

-   * @throws NullPointerException

-   *           if the quantity is null

-   */

-  boolean isLessThanOrEqualTo(Quantity<Q> that);

-

-  /**

-   * Compares two instances of {@link Quantity <Q>}, doing the conversion of unit if necessary.

-   *

-   * @param that

-   *          the {@code quantity<Q>} to be compared with this instance.

-   * @return {@code true} if {@code that < this}.

-   * @throws NullPointerException

-   *           if the quantity is null

-   */

-  boolean isEquivalentOf(Quantity<Q> that);

-

-  /**

-   * Multiply and cast the {@link ComparableQuantity}

-   * 

-   * @param that

-   *          quantity to be multiplied

-   * @param asTypeQuantity

-   *          quantity to be converted

-   * @return the QuantityOperations multiplied and converted

-   * @see Quantity#divide(Quantity)

-   * @see Quantity#asType(Class)

-   * @exception NullPointerException

-   */

-  <T extends Quantity<T>, E extends Quantity<E>> ComparableQuantity<E> divide(Quantity<T> that, Class<E> asTypeQuantity);

-

-  /**

-   * Divide and cast the {@link ComparableQuantity}

-   * 

-   * @param that

-   *          quantity to be divided

-   * @param asTypeQuantity

-   *          quantity to be converted

-   * @return the QuantityOperations multiplied and converted

-   * @see QuantityOperations

-   * @see QuantityOperations#of(Quantity, Class)

-   * @see Quantity#asType(Class)

-   * @see Quantity#multiply(Quantity)

-   * @exception NullPointerException

-   */

-  <T extends Quantity<T>, E extends Quantity<E>> ComparableQuantity<E> multiply(Quantity<T> that, Class<E> asTypeQuantity);

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/ComparableUnit.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/ComparableUnit.java
deleted file mode 100644
index 750df2b..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/ComparableUnit.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units;

-

-import java.io.Serializable;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-

-/**

- * Unit specialized for the Java SE platform. It extends {@link Unit} with {@linkplain Comparable} and {@linkplain Serializable }

- * 

- * @see {@link Unit}

- * @author werner

- * @param <Q>

- * @since 0.8

- */

-public interface ComparableUnit<Q extends Quantity<Q>> extends Unit<Q>, Comparable<Unit<Q>>, Serializable {

-

-  /**

-   * Compares two instances of {@link Unit <Q>}, doing the conversion of unit if necessary.

-   *

-   * @param that

-   *          the {@code Unit<Q>} to be compared with this instance.

-   * @return {@code true} if {@code that < this}.

-   * @throws NullPointerException

-   *           if the unit is null

-   */

-  boolean isEquivalentOf(Unit<Q> that);

-

-  /**

-   * Indicates if this unit belongs to the set of coherent SI units (unscaled SI units).

-   * 

-   * The base and coherent derived units of the SI form a coherent set, designated the set of coherent SI units. The word coherent is used here in the

-   * following sense: when coherent units are used, equations between the numerical values of quantities take exactly the same form as the equations

-   * between the quantities themselves. Thus if only units from a coherent set are used, conversion factors between units are never required.

-   * 

-   * @return <code>equals(toSystemUnit())</code>

-   */

-  boolean isSystemUnit();

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/IState.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/IState.java
deleted file mode 100644
index 2ead1e9..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/IState.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright (c) 2005, 2011, Werner Keil, JScience and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil - initial API and implementation
- */
-package org.eclipse.uomo.units;
-
-import org.eclipse.uomo.core.IName;
-import javax.measure.Quantity;
-import javax.measure.quantity.Time;
-
-/**
- * Groups a state name, value and timestamp.
- * The state itself is represented as a <type>Number</type> and the time is measured in IMeasure<Time>
- * A State object is immutable so that it may be easily shared.
- * 
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.1, $Date: 2011-04-07 02:02:02 +0430 $
- */
-public interface IState<Q extends Quantity<Q>> extends IName {
-	IMeasure<Time> time();
-	IMeasure<Q> value(); // TODO get* vs. getter-less, also avoid value().value()
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/IndianPrefix.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/IndianPrefix.java
deleted file mode 100644
index 70bab1a..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/IndianPrefix.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units;

-

-import java.math.BigInteger;

-

-import org.eclipse.uomo.units.impl.converter.RationalConverter;

-import javax.measure.Quantity;

-import javax.measure.Unit;

-

-/**

- * Utility class holding prefixes used today in India, Pakistan, Bangladesh, Nepal

- * and Myanmar (Burma); based on grouping by two decimal places, rather than the

- * three decimal places common in most parts of the world. [code] import static

- * org.eclipse.uomo.units.IndianPrefix.*; // Static import. ... Unit<Pressure>

- * LAKH_PASCAL = LAKH(PASCAL);

- * Unit<Length>CRORE_METER = CRORE(METER); [/code]

- * 

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.4 ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $

- * @see <a

- *      href="http://en.wikipedia.org/wiki/Indian_numbering_system">Wikipedia: Indian numbering system</a>

- * @deprecated use org.eclipse.uomo.units.impl.system.IndianPrefix

- */

-public abstract class IndianPrefix {

-

-	/**

-	 * <p>

-	 * एक (Ek)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor <code>1</code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> EK(Unit<Q> unit) {

-		return unit;

-	}

-

-	/**

-	 * <p>

-	 * दस (Das)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>1</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(10)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> DAS(Unit<Q> unit) {

-		return unit.transform(E1);

-	}

-

-	/**

-	 * <p>

-	 * सौ (Sau)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>2</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(100)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> SAU(Unit<Q> unit) {

-		return unit.transform(E2);

-	}

-

-	/**

-	 * <p>

-	 * सहस्र (Sahasr)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>3</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e3)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> SAHASR(Unit<Q> unit) {

-		return unit.transform(E3);

-	}

-

-	/**

-	 * <p>

-	 * हजार (Hazaar)

-	 * </p>

-	 * Equivalent to {@link #SAHASR}.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> HAZAAR(Unit<Q> unit) {

-		return SAHASR(unit);

-	}

-

-	/**

-	 * <p>

-	 * लाख (Lakh)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>5</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e5)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> LAKH(Unit<Q> unit) {

-		return unit.transform(E5);

-	}

-

-	static final RationalConverter E5 = new RationalConverter(

-			BigInteger.TEN.pow(5), BigInteger.ONE);

-

-	/**

-	 * <p>

-	 * करोड़ (Crore)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>7</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e7)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> CRORE(Unit<Q> unit) {

-		return unit.transform(E7);

-	}

-

-	static final RationalConverter E7 = new RationalConverter(

-			BigInteger.TEN.pow(7), BigInteger.ONE);

-

-	/**

-	 * <p>

-	 * अरब (Arawb)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>9</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e9)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> ARAWB(Unit<Q> unit) {

-		return unit.transform(E9);

-	}

-

-	/**

-	 * <p>

-	 * खरब (Kharawb)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>11</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e11)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> KHARAWB(Unit<Q> unit) {

-		return unit.transform(E11);

-	}

-

-	/**

-	 * <p>

-	 * नील (Neel)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>13</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e13)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> NEEL(Unit<Q> unit) {

-		return unit.transform(E13);

-	}

-

-	/**

-	 * <p>

-	 * पद्म (Padma)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>15</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e15)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> PADMA(Unit<Q> unit) {

-		return unit.transform(E15);

-	}

-

-	/**

-	 * <p>

-	 * शंख (Shankh)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>17</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e17)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> SHANKH(Unit<Q> unit) {

-		return unit.transform(E17);

-	}

-

-	/**

-	 * <p>

-	 * महाशंख (Mahashankh)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>19</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e19)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> MAHASHANKH(Unit<Q> unit) {

-		return unit.transform(E19);

-	}

-

-	// Holds prefix converters (optimization).

-	private static RationalConverter E19 = new RationalConverter(

-			BigInteger.TEN.pow(19), BigInteger.ONE);

-	private static RationalConverter E17 = new RationalConverter(

-			BigInteger.TEN.pow(17), BigInteger.ONE);

-	private static RationalConverter E15 = new RationalConverter(

-			BigInteger.TEN.pow(15), BigInteger.ONE);

-	private static RationalConverter E13 = new RationalConverter(

-			BigInteger.TEN.pow(13), BigInteger.ONE);

-	private static RationalConverter E11 = new RationalConverter(

-			BigInteger.TEN.pow(11), BigInteger.ONE);

-	private static RationalConverter E9 = new RationalConverter(

-			BigInteger.TEN.pow(9), BigInteger.ONE);

-	private static RationalConverter E3 = new RationalConverter(

-			BigInteger.TEN.pow(3), BigInteger.ONE);

-	private static RationalConverter E2 = new RationalConverter(

-			BigInteger.TEN.pow(2), BigInteger.ONE);

-	private static RationalConverter E1 = new RationalConverter(

-			BigInteger.TEN.pow(1), BigInteger.ONE);

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/Messages.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/Messages.java
deleted file mode 100644
index 6b723d0..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/Messages.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/**

- * Copyright (c) 2005, 2011, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units;

-

-import org.eclipse.osgi.util.NLS;

-

-/**

- * Message class for unit messages. These messages are used throughout the

- * package.

- * 

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- */

-public class Messages extends NLS {

-	private static final String BUNDLE_NAME = Messages.class.getPackage()

-			.getName() + ".messages";//$NON-NLS-1$

-

-	private Messages() {

-	}

-

-	static {

-		// load message values from bundle file

-		NLS.initializeMessages(BUNDLE_NAME, Messages.class);

-	}

-	public static String LocalFormat_Pattern;

-	public static String SI_A;

-	public static String SI_At;

-	public static String SI_bit;

-	public static String SI_Bq;

-	public static String SI_C;

-	public static String SI_cd;

-	public static String SI_F;

-	public static String SI_Gy;

-	public static String SI_H;

-	public static String SI_Hz;

-	public static String SI_J;

-	public static String SI_K;

-	public static String SI_kat;

-	public static String SI_kg;

-	public static String SI_kg_name;

-	public static String SI_lm;

-	public static String SI_lx;

-	public static String SI_m;

-	public static String SI_m_name;

-	public static String SI_mol;

-	public static String SI_N;

-	public static String SI_OhmS;

-	public static String SI_Pa;

-	public static String SI_rad;

-	public static String SI_s;

-	public static String SI_S;

-	public static String SI_Sv;

-	public static String SI_sr;

-	public static String SI_T;

-	public static String SI_V;

-	public static String SI_W;

-	public static String SI_Wb;

-	public static String US_lb_name;

-	public static String NonSI_R;

-	public static String NonSI_R_name;

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/QuantityAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/QuantityAmount.java
deleted file mode 100644
index 80b2951..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/QuantityAmount.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/**

- * Copyright (c) 2005, 2014, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units;

-

-import java.math.BigDecimal;

-

-import org.eclipse.uomo.units.impl.QuantityFactoryImpl;

-import org.eclipse.uomo.units.internal.MeasureAmount;

-import javax.measure.quantity.Dimensionless;

-import javax.measure.Quantity;

-import javax.measure.Unit;

-import com.ibm.icu.util.Measure;

-import com.ibm.icu.util.MeasureUnit;

-

-/**

- * An amount of quantity, consisting of a Number and a Unit. QuantityAmount

- * objects are immutable.

- * 

- * @see java.lang.Number

- * @see MeasureUnit

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @param <Q>

- *            The type of the quantity.

- * @version 1.3.4 ($Revision: 212 $), $Date: 2011-09-12 01:20:44 +0200 (Mo, 12

- *          Sep 2011) $ XXX rename to Amount, AbstractAmount or MeasureAmount?

- *          FIXME Bug 338334 overwrite equals()

- * @deprecated use AbstractQuantity

- */

-public abstract class QuantityAmount<Q extends Quantity<Q>>

-		implements IMeasure<Q> {

-	

-	private final Measure measure;

-	private final Unit<Q> unit;

-	

-	/**

-	 * Holds a dimensionless measure of one (exact).

-	 */

-	public static final Quantity<Dimensionless> ONE =

-			QuantityFactoryImpl.getInstance(Dimensionless.class).create(

-					BigDecimal.ONE, AbstractUnit.ONE);

-	

-	@Override

-	public int hashCode() {

-		final int prime = 31;

-		int result = 1;

-		result = prime * result + ((measure == null) ? 0 : measure.hashCode());

-		return result;

-	}

-

-	@Override

-	public boolean equals(Object obj) {

-		if (this == obj)

-			return true;

-		if (obj == null)

-			return false;

-		if (getClass() != obj.getClass())

-			return false;

-		@SuppressWarnings("unchecked")

-		QuantityAmount<Q> other = (QuantityAmount<Q>) obj;

-		if (measure == null) {

-			if (other.measure != null)

-				return false;

-		} else if (!measure.equals(other.measure))

-			return false;

-		return true;

-	}

-

-	@Override

-	public String toString() {

-		return String.valueOf(measure);

-	}

-

-	/**

-	 * Indicates if this measure is exact.

-	 */

-	private boolean isExact;

-

-	/**

-	 * Holds the exact value (when exact) stated in this measure unit.

-	 */

-	// private long _exactValue;

-

-	/**

-	 * Holds the minimum value stated in this measure unit. For inexact

-	 * measures: _minimum < _maximum

-	 */

-	// private double _minimum;

-

-	/**

-	 * Holds the maximum value stated in this measure unit. For inexact

-	 * measures: _maximum > _minimum

-	 */

-	// private double _maximum;

-

-	protected QuantityAmount(Number number, Unit unit, MeasureUnit mUnit) {

-		this.unit = unit;

-		measure = MeasureAmount.of(number, mUnit);

-	}

-	

-	protected QuantityAmount(Number number, Unit unit) {

-		this(number, unit, null);

-	}

-

-	/**

-	 * Returns the <b>ICU4J</b> <type>Measure</type> object.

-	 * @return the backing measure.

-	 */

-	public Measure getMeasure() {

-		return measure;

-	}

-	

-	/*

-	 * (non-Javadoc)

-	 * 

-	 * @see

-	 * org.eclipse.uomo.units.IMeasure#doubleValue(javax.measure.unit

-	 * .Unit)

-	 */

-	@Override

-    public double doubleValue(Unit<Q> unit) {

-        return (internalUnit().equals(unit)) ? value().doubleValue() : unit().getConverterTo(unit).convert(value().doubleValue());

-    }

-

-	/*

-	 * (non-Javadoc)

-	 * 

-	 * @see

-	 * org.eclipse.uomo.units.IMeasure#longValue(javax.measure.unit

-	 * .Unit)

-	 */

-	@Override

-	public long longValue(Unit<Q> unit) {

-        double result = doubleValue(unit);

-        if ((result < Long.MIN_VALUE) || (result > Long.MAX_VALUE)) {

-            throw new ArithmeticException("Overflow (" + result + ")");

-        }

-        return (long) result;

-	}

-

-	/*

-	 * (non-Javadoc)

-	 * 

-	 * @see javax.measure.Quantity#unit()

-	 */

-	@Override

-	public Unit<Q> unit() {

-		return unit;

-	}

-	

-	/*

-	 * (non-Javadoc)

-	 * 

-	 * @see javax.measure.Quantity#value()

-	 */

-	@Override

-	public Number value() {

-		return getNumber();

-	}

-

-	/**

-	 * Indicates if this measure amount is exact. An exact amount is guarantee

-	 * exact only when stated in this measure unit (e.g.

-	 * <code>this.longValue()</code>); stating the amount in any other unit may

-	 * introduce conversion errors.

-	 * 

-	 * @return <code>true</code> if this measure is exact; <code>false</code>

-	 *         otherwise.

-	 */

-	public boolean isExact() {

-		return isExact;

-	}

-	

-	public Number getValue() {

-		return getNumber();

-	}

-	

-	public Unit<Q> getUnit() {

-		return unit();

-	}

-

-	/**

-	 * Get the unit (convenience to avoid cast).

-	 * 

-	 * @provisional This API might change or be removed in a future release.

-	 */

-	private final MeasureUnit internalUnit() {

-		return measure.getUnit();

-	}

-	

-	protected final Number getNumber() {

-		return measure.getNumber();

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/SI.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/SI.java
deleted file mode 100644
index 4b2bc05..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/SI.java
+++ /dev/null
@@ -1,744 +0,0 @@
-/**

- * Copyright (c) 2005, 2011, Werner Keil, JScience and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation

- */

-package org.eclipse.uomo.units;

-

-import static org.eclipse.uomo.units.AbstractUnit.ONE;

-

-import java.math.BigInteger;

-import org.eclipse.uomo.units.Messages;

-import org.eclipse.uomo.units.impl.AlternateUnit;

-import org.eclipse.uomo.units.impl.BaseUnit;

-import org.eclipse.uomo.units.impl.ProductUnit;

-import org.eclipse.uomo.units.impl.TransformedUnit;

-import org.eclipse.uomo.units.impl.converter.RationalConverter;

-import javax.measure.spi.SystemOfUnits;

-import javax.measure.Unit;

-import javax.measure.quantity.*;

-

-/**

- * <p>

- * This class contains SI (Système International d'Unités) base units, and

- * derived units.

- * </p>

- * 

- * <p>

- * It also defines an inner class for the 20 SI prefixes used to form decimal

- * multiples and submultiples of SI units. For example:[code] import static

- * org.eclipse.uomo.units.SI.*; // Static import. ... Unit<Pressure> HECTOPASCAL

- * = HECTO(PASCAL); Unit<Length> KILOMETRE = KILO(METRE); [/code]

- * </p>

- * 

- * @noextend This class is not intended to be extended by clients.

- * 

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @version 1.32 ($Revision: 232 $), $Date: 2011-09-11 14:50:08 +0200 $

- * @see <a

- *      href="http://en.wikipedia.org/wiki/International_System_of_Units">Wikipedia:

- *      International System of Units</a>

- */

-public final class SI extends AbstractSystemOfUnits {

-

-	/**

-	 * The singleton instance of {@code SI}.

-	 */

-	private static final SI INSTANCE = new SI();

-

-	/**

-	 * Returns the singleton instance of this class.

-	 * 

-	 * @return the SI (metric) system instance.

-	 */

-	public static final SystemOfUnits getInstance() {

-		return INSTANCE;

-	}

-

-	// //////////////

-	// BASE UNITS //

-	// //////////////

-	/**

-	 * The base unit for electric current quantities (<code>A</code>). The

-	 * Ampere is that constant current which, if maintained in two straight

-	 * parallel conductors of infinite length, of negligible circular

-	 * cross-section, and placed 1 meter apart in vacuum, would produce between

-	 * these conductors a force equal to 2 * 10-7 newton per meter of length. It

-	 * is named after the French physicist Andre Ampere (1775-1836).

-	 */

-	public static final Unit<ElectricCurrent> AMPERE = addUnit(new BaseUnit<ElectricCurrent>(

-			Messages.SI_A));

-

-	/**

-	 * The base unit for luminous intensity quantities (<code>cd</code>). The

-	 * candela is the luminous intensity, in a given direction, of a source that

-	 * emits monochromatic radiation of frequency 540 * 1012 hertz and that has

-	 * a radiant intensity in that direction of 1/683 watt per steradian

-	 * 

-	 * @see <a href="http://en.wikipedia.org/wiki/Candela"> Wikipedia:

-	 *      Candela</a>

-	 */

-	public static final Unit<LuminousIntensity> CANDELA = addUnit(new BaseUnit<LuminousIntensity>(

-			Messages.SI_cd));

-

-	/**

-	 * The base unit for thermodynamic temperature quantities (<code>K</code>).

-	 * The kelvin is the 1/273.16th of the thermodynamic temperature of the

-	 * triple point of water. It is named after the Scottish mathematician and

-	 * physicist William Thomson 1st Lord Kelvin (1824-1907)

-	 */

-	public static final Unit<Temperature> KELVIN = addUnit(new BaseUnit<Temperature>(

-			Messages.SI_K));

-

-	/**

-	 * The base unit for mass quantities (<code>kg</code>). It is the only SI

-	 * unit with a prefix as part of its name and symbol. The kilogram is equal

-	 * to the mass of an international prototype in the form of a

-	 * platinum-iridium cylinder kept at Sevres in France.

-	 * 

-	 * @see #GRAM

-	 */

-	public static final Unit<Mass> KILOGRAM = addUnit(new BaseUnit<Mass>(

-			Messages.SI_kg, Messages.SI_kg_name));

-

-	/**

-	 * The base unit for length quantities (<code>m</code>). One metre was

-	 * redefined in 1983 as the distance traveled by light in a vacuum in

-	 * 1/299,792,458 of a second.

-	 */

-	public static final Unit<Length> METRE = addUnit(new BaseUnit<Length>(

-			Messages.SI_m, Messages.SI_m_name));

-

-	/**

-	 * The base unit for amount of substance quantities (<code>mol</code>). The

-	 * mole is the amount of substance of a system which contains as many

-	 * elementary entities as there are atoms in 0.012 kilogram of carbon 12.

-	 */

-	public static final Unit<AmountOfSubstance> MOLE = addUnit(new BaseUnit<AmountOfSubstance>(

-			Messages.SI_mol));

-

-	/**

-	 * The base unit for time quantities (<code>s</code>). It is defined as the

-	 * duration of 9,192,631,770 cycles of radiation corresponding to the

-	 * transition between two hyperfine levels of the ground state of cesium

-	 * (1967 Standard).

-	 * 

-	 * FIXME this is not aligned with TimeUnit from ICU4J due to TimeUnit so far cannot be extended 

-	 */

-	public static final Unit<Time> SECOND = addUnit(new BaseUnit<Time>(

-			Messages.SI_s));

-	// //////////////////////////////

-	// SI DERIVED ALTERNATE UNITS //

-	// //////////////////////////////

-

-	/**

-	 * The unit for magnetomotive force (<code>At</code>).

-	 */

-	public static final Unit<MagnetomotiveForce> AMPERE_TURN = addUnit(new AlternateUnit<MagnetomotiveForce>(

-			Messages.SI_At, (AbstractUnit<?>) SI.AMPERE));

-

-	/**

-	 * The derived unit for mass quantities (<code>g</code>). The base unit for

-	 * mass quantity is {@link #KILOGRAM}.

-	 */

-	public static final Unit<Mass> GRAM = KILOGRAM.divide(1000);

-

-	/**

-	 * The unit for plane angle quantities (<code>rad</code>). One radian is the

-	 * angle between two radii of a circle such that the length of the arc

-	 * between them is equal to the radius.

-	 */

-	public static final Unit<Angle> RADIAN = addUnit(new AlternateUnit<Angle>(

-			Messages.SI_rad, AbstractUnit.ONE));

-

-	/**

-	 * The unit for solid angle quantities (<code>sr</code>). One steradian is

-	 * the solid angle subtended at the center of a sphere by an area on the

-	 * surface of the sphere that is equal to the radius squared. The total

-	 * solid angle of a sphere is 4*Pi steradians.

-	 */

-	public static final Unit<SolidAngle> STERADIAN = addUnit(new AlternateUnit<SolidAngle>(

-			Messages.SI_sr, AbstractUnit.ONE));

-

-	/**

-	 * The derived unit for frequency (<code>Hz</code>). A unit of frequency

-	 * equal to one cycle per second. After Heinrich Rudolf Hertz (1857-1894),

-	 * German physicist who was the first to produce radio waves artificially.

-	 */

-	public static final Unit<Frequency> HERTZ = addUnit(new AlternateUnit<Frequency>(

-			Messages.SI_Hz,

-			(AbstractUnit<?>) AbstractUnit.ONE.divide(SECOND)));

-

-	/**

-	 * The derived unit for force (<code>N</code>). One newton is the force

-	 * required to give a mass of 1 kilogram an Force of 1 metre per second per

-	 * second. It is named after the English mathematician and physicist Sir

-	 * Isaac Newton (1642-1727).

-	 */

-	public static final Unit<Force> NEWTON = addUnit(new AlternateUnit<Force>(

-			Messages.SI_N, (AbstractUnit<?>) METRE.multiply(KILOGRAM)

-					.divide(SECOND.pow(2))));

-

-	/**

-	 * The derived unit for pressure, stress (<code>Pa</code>). One pascal is

-	 * equal to one newton per square meter. It is named after the French

-	 * philosopher and mathematician Blaise Pascal (1623-1662).

-	 */

-	public static final Unit<Pressure> PASCAL = addUnit(new AlternateUnit<Pressure>(

-			Messages.SI_Pa, (AbstractUnit<?>) NEWTON.divide(METRE.pow(2))));

-

-	/**

-	 * The derived unit for energy, work, quantity of heat (<code>J</code>). One

-	 * joule is the amount of work done when an applied force of 1 newton moves

-	 * through a distance of 1 metre in the direction of the force. It is named

-	 * after the English physicist James Prescott Joule (1818-1889).

-	 */

-	public static final Unit<Energy> JOULE = addUnit(new AlternateUnit<Energy>(

-			Messages.SI_J, (AbstractUnit<?>) NEWTON.multiply(METRE)));

-

-	/**

-	 * The derived unit for power, radiant, flux (<code>W</code>). One watt is

-	 * equal to one joule per second. It is named after the British scientist

-	 * James Watt (1736-1819).

-	 */

-	public static final Unit<Power> WATT = addUnit(new AlternateUnit<Power>(

-			Messages.SI_W, (AbstractUnit<?>) JOULE.divide(SECOND)));

-

-	/**

-	 * The derived unit for electric charge, quantity of electricity (

-	 * <code>C</code>). One Coulomb is equal to the quantity of charge

-	 * transferred in one second by a steady current of one ampere. It is named

-	 * after the French physicist Charles Augustin de Coulomb (1736-1806).

-	 */

-	public static final Unit<ElectricCharge> COULOMB = addUnit(new AlternateUnit<ElectricCharge>(

-			Messages.SI_C, (AbstractUnit<?>) SECOND.multiply(AMPERE)));

-

-	/**

-	 * The derived unit for electric potential difference, electromotive force (

-	 * <code>V</code>). One Volt is equal to the difference of electric

-	 * potential between two points on a conducting wire carrying a constant

-	 * current of one ampere when the power dissipated between the points is one

-	 * watt. It is named after the Italian physicist Count Alessandro Volta

-	 * (1745-1827).

-	 */

-	public static final Unit<ElectricPotential> VOLT = addUnit(new AlternateUnit<ElectricPotential>(

-			Messages.SI_V, (AbstractUnit<?>) WATT.divide(AMPERE)));

-

-	/**

-	 * The derived unit for capacitance (<code>F</code>). One Farad is equal to

-	 * the capacitance of a capacitor having an equal and opposite charge of 1

-	 * coulomb on each plate and a potential difference of 1 volt between the

-	 * plates. It is named after the British physicist and chemist Michael

-	 * Faraday (1791-1867).

-	 */

-	public static final Unit<ElectricCapacitance> FARAD = addUnit(new AlternateUnit<ElectricCapacitance>(

-			Messages.SI_F, (AbstractUnit<?>) COULOMB.divide(VOLT)));

-

-	/**

-	 * The derived unit for electric resistance (<code>Ohm</code>). One Ohm is

-	 * equal to the resistance of a conductor in which a current of one ampere

-	 * is produced by a potential of one volt across its terminals. It is named

-	 * after the German physicist Georg Simon Ohm (1789-1854).

-	 */

-	public static final Unit<ElectricResistance> OHM = addUnit(new AlternateUnit<ElectricResistance>(

-			Messages.SI_OhmS, (AbstractUnit<?>) VOLT.divide(AMPERE)));

-

-	/**

-	 * The derived unit for electric conductance (<code>S</code>). One Siemens

-	 * is equal to one ampere per volt. It is named after the German engineer

-	 * Ernst Werner von Siemens (1816-1892).

-	 */

-	public static final Unit<ElectricConductance> SIEMENS = addUnit(new AlternateUnit<ElectricConductance>(

-			Messages.SI_S, (AbstractUnit<?>) AMPERE.divide(VOLT)));

-

-	/**

-	 * The derived unit for magnetic flux (<code>Wb</code>). One Weber is equal

-	 * to the magnetic flux that in linking a circuit of one turn produces in it

-	 * an electromotive force of one volt as it is uniformly reduced to zero

-	 * within one second. It is named after the German physicist Wilhelm Eduard

-	 * Weber (1804-1891).

-	 */

-	public static final Unit<MagneticFlux> WEBER = addUnit(new AlternateUnit<MagneticFlux>(

-			Messages.SI_Wb, (AbstractUnit<?>) VOLT.multiply(SECOND)));

-

-	/**

-	 * The derived unit for magnetic flux density (<code>T</code>). One Tesla is

-	 * equal equal to one weber per square metre. It is named after the

-	 * Serbian-born American electrical engineer and physicist Nikola Tesla

-	 * (1856-1943).

-	 */

-	public static final Unit<MagneticFluxDensity> TESLA = addUnit(new AlternateUnit<MagneticFluxDensity>(

-			Messages.SI_T, (AbstractUnit<?>) WEBER.divide(METRE.pow(2))));

-

-	/**

-	 * The derived unit for inductance (<code>H</code>). One Henry is equal to

-	 * the inductance for which an induced electromotive force of one volt is

-	 * produced when the current is varied at the rate of one ampere per second.

-	 * It is named after the American physicist Joseph Henry (1791-1878).

-	 */

-	public static final Unit<ElectricInductance> HENRY = addUnit(new AlternateUnit<ElectricInductance>(

-			Messages.SI_H, (AbstractUnit<?>) WEBER.divide(AMPERE)));

-

-	/**

-	 * The derived unit for Celsius temperature (<code>Cel</code>). This is a

-	 * unit of temperature such as the freezing point of water (at one

-	 * atmosphere of pressure) is 0 Cel, while the boiling point is 100 Cel.

-	 */

-	public static final Unit<Temperature> CELSIUS = addUnit(KELVIN.add(273.15));

-

-	/**

-	 * The derived unit for luminous flux (<code>lm</code>). One Lumen is equal

-	 * to the amount of light given out through a solid angle by a source of one

-	 * candela intensity radiating equally in all directions.

-	 */

-	public static final Unit<LuminousFlux> LUMEN = addUnit(new AlternateUnit<LuminousFlux>(

-			Messages.SI_lm, (AbstractUnit<?>) CANDELA.multiply(STERADIAN)));

-

-	/**

-	 * The derived unit for illuminance (<code>lx</code>). One Lux is equal to

-	 * one lumen per square metre.

-	 */

-	public static final Unit<Illuminance> LUX = addUnit(new AlternateUnit<Illuminance>(

-			Messages.SI_lx, (AbstractUnit<?>) LUMEN.divide(METRE.pow(2))));

-

-	/**

-	 * The derived unit for activity of a radionuclide (<code>Bq</code>). One

-	 * becquerel is the radiation caused by one disintegration per second. It is

-	 * named after the French physicist, Antoine-Henri Becquerel (1852-1908).

-	 */

-	public static final Unit<Radioactivity> BECQUEREL = addUnit(new AlternateUnit<Radioactivity>(

-			Messages.SI_Bq,

-			(AbstractUnit<?>) AbstractUnit.ONE.divide(SECOND)));

-

-	/**

-	 * The derived unit for absorbed dose, specific energy (imparted), kerma (

-	 * <code>Gy</code>). One gray is equal to the dose of one joule of energy

-	 * absorbed per one kilogram of matter. It is named after the British

-	 * physician L. H. Gray (1905-1965).

-	 */

-	public static final Unit<RadiationDoseAbsorbed> GRAY = addUnit(new AlternateUnit<RadiationDoseAbsorbed>(

-			Messages.SI_Gy, (AbstractUnit<?>) JOULE.divide(KILOGRAM)));

-

-	/**

-	 * The derived unit for dose equivalent (<code>Sv</code>). One Sievert is

-	 * equal is equal to the actual dose, in grays, multiplied by a

-	 * "quality factor" which is larger for more dangerous forms of radiation.

-	 * It is named after the Swedish physicist Rolf Sievert (1898-1966).

-	 */

-	public static final Unit<RadiationDoseEffective> SIEVERT = addUnit(new AlternateUnit<RadiationDoseEffective>(

-			Messages.SI_Sv, (AbstractUnit<?>) JOULE.divide(KILOGRAM)));

-

-	/**

-	 * The derived unit for catalytic activity (<code>kat</code>).

-	 */

-	public static final Unit<CatalyticActivity> KATAL = addUnit(new AlternateUnit<CatalyticActivity>(

-			Messages.SI_kat, (AbstractUnit<?>) MOLE.divide(SECOND)));

-	// ////////////////////////////

-	// SI DERIVED PRODUCT UNITS //

-	// ////////////////////////////

-

-	/**

-	 * The metric unit for Speed quantities (<code>m/s</code>).

-	 * 

-	 */

-	public static final Unit<Speed> METRES_PER_SECOND = addUnit(new ProductUnit<Speed>(

-			(AbstractUnit<?>) METRE.divide(SECOND)));

-

-	/**

-	 * The metric unit for acceleration quantities (<code>m/s2</code>).

-	 */

-	public static final Unit<Acceleration> METRES_PER_SQUARE_SECOND = addUnit(new ProductUnit<Acceleration>(

-			(AbstractUnit<?>) METRES_PER_SECOND.divide(SECOND)));

-

-	/**

-	 * The metric unit for area quantities (<code>m2</code>).

-	 */

-	public static final Unit<Area> SQUARE_METRE = addUnit(new ProductUnit<Area>(

-			(AbstractUnit<?>) METRE.multiply(METRE)));

-

-	/**

-	 * The metric unit for volume quantities (<code>m3</code>).

-	 */

-	public static final Unit<Volume> CUBIC_METRE = addUnit(new ProductUnit<Volume>(

-			(AbstractUnit<?>) SQUARE_METRE.multiply(METRE)));

-

-    /////////////////////////////////////////////////////////////////

-	// Units outside the SI that are accepted for use with the SI. //

-	/////////////////////////////////////////////////////////////////

-

-	/**

-	* A dimensionless unit accepted for use with SI units (standard name <code>%</code>).

-	*/

-	public static final TransformedUnit<Dimensionless> PERCENT

-	= new TransformedUnit<Dimensionless>(ONE, new RationalConverter(1, 100));

-	

-	// //////////

-	// Others //

-	// //////////

-	/**

-	 * A unit used to measure the ionizing ability of radiation (standard name

-	 * <code>Roentgen</code>).

-	 */

-	@SuppressWarnings("unchecked")

-	public static final Unit<IonizingRadiation> ROENTGEN = (Unit<IonizingRadiation>) addUnit(COULOMB.divide(KILOGRAM)

-			.multiply(2.58e-4), Messages.NonSI_R_name);

-	

-	public static class Prefix {

-

-		private Prefix() {

-			// Utility class no visible constructor.

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>24</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e24)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> YOTTA(Unit<Q> unit) {

-			return unit.transform(E24);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>21</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e21)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> ZETTA(Unit<Q> unit) {

-			return unit.transform(E21);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>18</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e18)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> EXA(Unit<Q> unit) {

-			return unit.transform(E18);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>15</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e15)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> PETA(Unit<Q> unit) {

-			return (AbstractUnit<Q>) unit.transform(E15);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>12</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e12)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> TERA(Unit<Q> unit) {

-			return unit.transform(E12);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>9</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e9)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> GIGA(Unit<Q> unit) {

-			return unit.transform(E9);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>6</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e6)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> MEGA(Unit<Q> unit) {

-			return unit.transform(E6);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>3</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e3)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> KILO(Unit<Q> unit) {

-			return unit.transform(E3);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>2</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e2)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> HECTO(AbstractUnit<Q> unit) {

-			return unit.transform(E2);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>1</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e1)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> DEKA(AbstractUnit<Q> unit) {

-			return unit.transform(E1);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>-1</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e-1)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> DECI(Unit<Q> unit) {

-			return unit.transform(Em1);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>-2</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e-2)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> CENTI(Unit<Q> unit) {

-			return unit.transform(Em2);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>-3</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e-3)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> MILLI(Unit<Q> unit) {

-			return unit.transform(Em3);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>-6</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e-6)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> MICRO(Unit<Q> unit) {

-			return unit.transform(Em6);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>-9</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e-9)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> NANO(Unit<Q> unit) {

-			return unit.transform(Em9);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>-12</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e-12)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> PICO(Unit<Q> unit) {

-			return unit.transform(Em12);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>-15</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e-15)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> FEMTO(Unit<Q> unit) {

-			return unit.transform(Em15);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>-18</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e-18)</code>.

-		 */

-		public static final <Q extends Quantity<Q>> Unit<Q> ATTO(Unit<Q> unit) {

-			return unit.transform(Em18);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>-21</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e-21)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> ZEPTO(AbstractUnit<Q> unit) {

-			return unit.transform(Em21);

-		}

-

-		/**

-		 * Returns the specified unit multiplied by the factor

-		 * <code>10<sup>-24</sup></code>

-		 * 

-		 * @param <Q>

-		 *            The type of the quantity measured by the unit.

-		 * @param unit

-		 *            any unit.

-		 * @return <code>unit.times(1e-24)</code>.

-		 */

-		public static <Q extends Quantity<Q>> Unit<Q> YOCTO(AbstractUnit<Q> unit) {

-			return unit.transform(Em24);

-		}

-

-		// Holds prefix converters (optimization).

-		private static final RationalConverter E24 = new RationalConverter(

-				BigInteger.TEN.pow(24), BigInteger.ONE);

-

-		private static final RationalConverter E21 = new RationalConverter(

-				BigInteger.TEN.pow(21), BigInteger.ONE);

-

-		private static final RationalConverter E18 = new RationalConverter(

-				BigInteger.TEN.pow(18), BigInteger.ONE);

-

-		private static final RationalConverter E15 = new RationalConverter(

-				BigInteger.TEN.pow(15), BigInteger.ONE);

-

-		private static final RationalConverter E12 = new RationalConverter(

-				BigInteger.TEN.pow(12), BigInteger.ONE);

-

-		private static final RationalConverter E9 = new RationalConverter(

-				BigInteger.TEN.pow(9), BigInteger.ONE);

-

-		private static final RationalConverter E6 = new RationalConverter(

-				BigInteger.TEN.pow(6), BigInteger.ONE);

-

-		private static final RationalConverter E3 = new RationalConverter(

-				BigInteger.TEN.pow(3), BigInteger.ONE);

-

-		private static final RationalConverter E2 = new RationalConverter(

-				BigInteger.TEN.pow(2), BigInteger.ONE);

-

-		private static final RationalConverter E1 = new RationalConverter(

-				BigInteger.TEN.pow(1), BigInteger.ONE);

-

-		private static final RationalConverter Em1 = new RationalConverter(

-				BigInteger.ONE, BigInteger.TEN.pow(1));

-

-		private static final RationalConverter Em2 = new RationalConverter(

-				BigInteger.ONE, BigInteger.TEN.pow(2));

-

-		private static final RationalConverter Em3 = new RationalConverter(

-				BigInteger.ONE, BigInteger.TEN.pow(3));

-

-		private static final RationalConverter Em6 = new RationalConverter(

-				BigInteger.ONE, BigInteger.TEN.pow(6));

-

-		private static final RationalConverter Em9 = new RationalConverter(

-				BigInteger.ONE, BigInteger.TEN.pow(9));

-

-		private static final RationalConverter Em12 = new RationalConverter(

-				BigInteger.ONE, BigInteger.TEN.pow(12));

-

-		private static final RationalConverter Em15 = new RationalConverter(

-				BigInteger.ONE, BigInteger.TEN.pow(15));

-

-		private static final RationalConverter Em18 = new RationalConverter(

-				BigInteger.ONE, BigInteger.TEN.pow(18));

-

-		private static final RationalConverter Em21 = new RationalConverter(

-				BigInteger.ONE, BigInteger.TEN.pow(21));

-

-		private static final RationalConverter Em24 = new RationalConverter(

-				BigInteger.ONE, BigInteger.TEN.pow(24));

-	}

-

-	@Override

-	public String getName() {

-		return getClass().getSimpleName();

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/SymbolMap.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/SymbolMap.java
deleted file mode 100644
index e95cc5e..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/SymbolMap.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Eric Russell - initial API and implementation

- */

-package org.eclipse.uomo.units;

-

-import org.eclipse.uomo.units.impl.system.USCustomary;

-import javax.measure.Unit;

-import javax.measure.UnitConverter;

-

-/**

- * <p> This interface provides a set of mappings between

- *     {@link Unit Units} and symbols (both ways),

- *     and from {@link javax.measure.UnitConverter

- *     UnitConverter}s to prefixes symbols (also both ways).</p>

- *     

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author Eric Russell

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.2 , $Date: 2017-12-25 $

- */

-public interface SymbolMap {

-

-    /**

-     * Attaches a label to the specified unit. For example:[code]

-     *    symbolMap.label(DAY.multiply(365), "year");

-     *    symbolMap.label({@link USCustomary USCustomary}.FOOT, "ft");

-     * [/code]

-     *

-     * @param unit the unit to label.

-     * @param symbol the new symbol for the unit.

-     * @throws UnsupportedOperationException if setting a unit label

-     *         is not allowed.

-     */

-    void label(Unit<?> unit, String symbol);

-

-    /**

-     * Attaches an alias to the specified unit. Multiple aliases may be

-     * attached to the same unit. Aliases are used during parsing to

-     * recognize different variants of the same unit.[code]

-     *     symbolMap.alias({@link USCustomary USCustomary}.FOOT, "foot");

-     *     symbolMap.alias({@link USCustomary USCustomary}.FOOT, "feet");

-     *     symbolMap.alias({@link SI SI}.METRE, "meter");

-     *     symbolMap.alias({@link SI SI}.METRE, "metre");

-     * [/code]

-     *

-     * @param unit the unit to label.

-     * @param symbol the new symbol for the unit.

-     * @throws UnsupportedOperationException if setting a unit alias

-     *         is not allowed.

-     */

-    void alias(Unit<?> unit, String symbol);

-

-    /**

-     * Attaches a label to the specified prefix. For example:[code]

-     *    symbolMap.prefix(new RationalConverter(1000000000, 1), "G"); // GIGA

-     *    symbolMap.prefix(new RationalConverter(1, 1000000), "µ"); // MICRO

-     * [/code]

-     *

-     * @param cvtr the unit converter.

-     * @param prefix the prefix for the converter.

-     * @throws UnsupportedOperationException if setting a prefix

-     *         is not allowed.

-     */

-    void prefix(UnitConverter cvtr, String prefix);

-

-    /**

-     * Returns the unit for the specified symbol.

-     *

-     * @param symbol the symbol.

-     * @return the corresponding unit or <code>null</code> if none.

-     */

-    Unit<?> getUnit(String symbol);

-

-    /**

-     * Returns the symbol (label) for the specified unit.

-     *

-     * @param unit the corresponding symbol.

-     * @return the corresponding symbol or <code>null</code> if none.

-     */

-    String getSymbol(Unit<?> unit);

-

-    /**

-     * Returns the unit converter for the specified prefix.

-     *

-     * @param prefix the prefix symbol.

-     * @return the corresponding converter or <code>null</code> if none.

-     */

-    UnitConverter getConverter(String prefix);

-

-    /**

-     * Returns the prefix for the specified converter.

-     *

-     * @param converter the unit converter.

-     * @return the corresponding prefix or <code>null</code> if none.

-     */

-    String getPrefix(UnitConverter converter);

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/TamilPrefix.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/TamilPrefix.java
deleted file mode 100644
index 42ca79b..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/TamilPrefix.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units;

-

-import java.math.BigInteger;

-

-import org.eclipse.uomo.units.impl.converter.RationalConverter;

-import javax.measure.Quantity;

-import javax.measure.Unit;

-

-

-/**

- * Utility class holding prefixes used today in parts of India and Sri Lanka;

- * based on grouping by two decimal places, rather than the

- * three decimal places common in most parts of the world.</br><code> import static

- * org.eclipse.uomo.units.TamilPrefix.*; // Static import. ... Unit<Pressure>

- * ONDRU_PASCAL = ONDRU(PASCAL); 

- * Unit<Length> PATHU_METER = PATHU(METER); </code>

- * 

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.2 ($Revision$), $Date: 2012-04-02 $

- * @see <a

- *      href="http://en.wikipedia.org/wiki/Tamil_units_of_measurement#Whole_numbers">Wikipedia:

- *      Tamil units of measurement - Whole numbers</a>

- * @deprecated use org.eclipse.uomo.units.impl.system.TamilPrefix

- */

-public abstract class TamilPrefix  {

-

-	/**

-	 * <p>

-	 * onRu

-	 * </p>

-	 * Returns the specified unit multiplied by the factor <code>1</code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> onRu(Unit<Q> unit) {

-		return unit;

-	}

-	

-	/**

-	 * <p>

-	 * patthu

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>1</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(10)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> patthu(Unit<Q> unit) {

-		return unit.transform(E1);

-	}

-

-	/**

-	 * <p>

-	 * nooRu

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>2</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(100)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> nooRu(Unit<Q> unit) {

-		return unit.transform(E2);

-	}

-

-	/**

-	 * <p>

-	 * aayiram

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>3</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e3)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> aayiram(Unit<Q> unit) {

-		return unit.transform(E3);

-	}

-

-	/**

-	 * <p>

-	 * nooRaayiram

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>5</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e5)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> nooRaayiram(Unit<Q> unit) {

-		return unit.transform(E5);

-	}

-

-	static final RationalConverter E5 = new RationalConverter(

-			BigInteger.TEN.pow(5), BigInteger.ONE);

-

-	/**

-	 * <p>

-	 * thoLLunn

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>9</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e9)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> thoLLunn(Unit<Q> unit) {

-		return unit.transform(E9);

-	}

-

-	/**

-	 * <p>

-	 * eegiyam

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>12</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e12)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> eegiyam(Unit<Q> unit) {

-		return unit.transform(E12);

-	}

-

-	/**

-	 * <p>

-	 * neLai

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>15</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e15)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> neLai(Unit<Q> unit) {

-		return unit.transform(E15);

-	}

-

-	/**

-	 * <p>

-	 * iLanji

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>18</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e18)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> iLanji(Unit<Q> unit) {

-		return unit.transform(E18);

-	}

-

-	/**

-	 * <p>

-	 * veLLam

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>20</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e20)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> veLLam(Unit<Q> unit) {

-		return unit.transform(E20);

-	}

-	

-	/**

-	 * <p>

-	 * aambal

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>21</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e21)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> aambal(Unit<Q> unit) {

-		return unit.transform(E21);

-	}

-	

-	public static final class Sanskrit {

-		/**

-		 * <p>

-		 * ONDRU -one

-		 * </p>

-		 * Sanskrit translation for {@link #onRu}.

-		 */

-		public static final <Q extends Quantity<Q>> Unit<Q> ONDRU (Unit<Q> unit) {

-			return onRu(unit);

-		}

-		

-		/**

-		 * <p>

-		 * PATHU -ten

-		 * </p>

-		 * Sanskrit translation for {@link #patthu}.

-		 */

-		public static final <Q extends Quantity<Q>> Unit<Q> PATHU(Unit<Q> unit) {

-			return patthu(unit);

-		}

-	}

-

-	// Holds prefix converters (optimization).

-	private static RationalConverter E21 = new RationalConverter(

-			BigInteger.TEN.pow(21), BigInteger.ONE);

-	private static RationalConverter E20 = new RationalConverter(

-			BigInteger.TEN.pow(20), BigInteger.ONE);

-	private static RationalConverter E18 = new RationalConverter(

-			BigInteger.TEN.pow(18), BigInteger.ONE);

-	private static RationalConverter E15 = new RationalConverter(

-			BigInteger.TEN.pow(15), BigInteger.ONE);

-	private static RationalConverter E12 = new RationalConverter(

-			BigInteger.TEN.pow(12), BigInteger.ONE);

-	private static RationalConverter E9 = new RationalConverter(

-			BigInteger.TEN.pow(9), BigInteger.ONE);

-	private static RationalConverter E3 = new RationalConverter(

-			BigInteger.TEN.pow(3), BigInteger.ONE);

-	private static RationalConverter E2 = new RationalConverter(

-			BigInteger.TEN.pow(2), BigInteger.ONE);

-	private static RationalConverter E1 = new RationalConverter(

-			BigInteger.TEN.pow(1), BigInteger.ONE);

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/AbstractQuantityFactory.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/AbstractQuantityFactory.java
deleted file mode 100644
index d31454a..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/AbstractQuantityFactory.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl;

-

-import java.util.HashMap;

-import java.util.Map;

-import java.util.logging.Level;

-import java.util.logging.Logger;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-import javax.measure.spi.QuantityFactory;

-

-/**

- * An abstract factory producing simple quantities instances (tuples {@link Number}/ {@link Unit}).

- *

- * For example:<br>

- * <code>

- *      Mass m = QuantityFactoryImpl.of(Mass.class).create(23.0, KILOGRAM); // 23.0 kg<br>

- *      Time m = QuantityFactoryImpl.of(Time.class).create(124, MILLI(SECOND)); // 124 ms

- * </code>

- * 

- * @param <Q>

- *          The type of the quantity.

- *

- * @author <a href="mailto:martin.desruisseaux@geomatys.com">Martin Desruisseaux</a>

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @version 1.0.0, $Date: 2017-06-16 $

- * @since 0.7

- */

-abstract class AbstractQuantityFactory<Q extends Quantity<Q>> implements QuantityFactory<Q> {

-

-  /**

-   * Holds the current instances.

-   */

-  @SuppressWarnings("rawtypes")

-  static final Map<Class, QuantityFactory> INSTANCES = new HashMap<Class, QuantityFactory>();

-

-  static final Logger logger = Logger.getLogger(AbstractQuantityFactory.class.getName());

-

-  static final Level LOG_LEVEL = Level.FINE;

-

-  /**

-   * Overrides the default implementation of the factory for the specified quantity type.

-   *

-   * @param <Q>

-   *          The type of the quantity

-   * @param type

-   *          the quantity type

-   * @param factory

-   *          the quantity factory

-   */

-  protected static <Q extends Quantity<Q>> void setInstance(final Class<Q> type, QuantityFactory<Q> factory) {

-    if (!Quantity.class.isAssignableFrom(type))

-      // This exception is not documented because it should never happen

-      // if the

-      // user don't try to trick the Java generic types system with unsafe

-      // cast.

-      throw new ClassCastException();

-    INSTANCES.put(type, factory);

-  }

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/AlternateUnit.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/AlternateUnit.java
deleted file mode 100644
index 76524fd..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/AlternateUnit.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl;

-

-import org.eclipse.uomo.units.AbstractConverter;

-import org.eclipse.uomo.units.AbstractUnit;

-import javax.measure.Quantity;

-

-import java.util.Map;

-

-import javax.measure.Dimension;

-import javax.measure.Unit;

-import javax.measure.UnitConverter;

-

-

-/**

- * <p> This class represents metric units used in expressions to distinguish

- *     between quantities of a different nature but of the same dimensions.

- *     Alternate units are always unscaled metric units.</p>

- *

- * <p> Instances of this class are created through the

- *     {@link AbstractUnit#alternate(String)} method.</p>

- *

- * @param <Q> The type of the quantity measured by this unit.

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @version 1.2, $Date: 2017-12-21 $

- */

-public final class AlternateUnit<Q extends Quantity<Q>> extends AbstractUnit<Q> {

-

-    /** The serialVersionUID */

-    private static final long serialVersionUID = -1234567854321234567L;

-

-	/**

-     * Holds the parent unit (a system unit).

-     */

-    private final Unit<?> parent;

-

-    /**

-     * Holds the parent unit (a system unit).

-     */

-    private final String symbol;

-

-    /**

-     * Creates an alternate unit for the specified unit identified by the

-     * specified name and symbol.

-     *

-     * @param symbol the symbol for this alternate unit.

-     * @param parent the system unit from which this alternate unit is

-     *        derived.

-     * @throws UnsupportedOperationException if the parent is not

-     *         an unscaled metric unit.

-     * @throws IllegalArgumentException if the specified symbol is

-     *         associated to a different unit.

-     */

-    @SuppressWarnings("rawtypes")

-	public AlternateUnit(Unit<?> parent, String symbol) {

-	this((AbstractUnit)parent, symbol);

-    }

-    

-    

-    /**

-     * Creates an alternate unit for the specified unit identified by the

-     * specified name and symbol.

-     *

-     * @param symbol the symbol for this alternate unit.

-     * @param parent the system unit from which this alternate unit is

-     *        derived.

-     * @throws UnsupportedOperationException if the parent is not

-     *         an unscaled metric unit.

-     * @throws IllegalArgumentException if the specified symbol is

-     *         associated to a different unit.

-     */

-    public AlternateUnit(AbstractUnit<?> parent, String symbol) {

-        if (parent == null || !parent.isUnscaledMetric())

-            throw new UnsupportedOperationException(parent + " is not an unscaled metric unit");

-        this.parent = parent;

-        this.symbol = symbol;

-        // Checks if the symbol is associated to a different unit.

-        synchronized (AbstractUnit.SYMBOL_TO_UNIT) {

-            AbstractUnit<?> unit = (AbstractUnit<?>) AbstractUnit.SYMBOL_TO_UNIT.get(symbol);

-            if (unit == null) {

-                AbstractUnit.SYMBOL_TO_UNIT.put(symbol, this);

-                return;

-            }

-            if (unit instanceof AlternateUnit<?>) {

-                AlternateUnit<?> existingUnit = (AlternateUnit<?>) unit;

-                if (symbol.equals(existingUnit.getSymbol()) && this.parent.equals(existingUnit.parent))

-                    return; // OK, same unit.

-            }

-            throw new IllegalArgumentException("Symbol " + symbol + " is associated to a different unit");

-        }

-    }

-

-    @Override

-    public String getSymbol() {

-        return symbol;

-    }

-    

-	@Override

-	public Unit<Q> getSystemUnit() {

-		return toMetric();

-	}

-	

-    @Override

-    protected final AbstractUnit<Q> toMetric() {

-        return this;

-    }

-

-    @Override

-    public final UnitConverter getConverterToMetric() {

-        return AbstractConverter.IDENTITY;

-    }

-

-    @Override

-    public boolean equals(Object that) {

-        if (this == that)

-            return true;

-        if (!(that instanceof AlternateUnit<?>))

-            return false;

-        AlternateUnit<?> thatUnit = (AlternateUnit<?>) that;

-        return this.symbol.equals(thatUnit.symbol); // Symbols are unique.

-    }

-

-    @Override

-    public Dimension getDimension() {

-        return parent.getDimension();

-    }

-

-    @SuppressWarnings("rawtypes")

-	@Override

-    public UnitConverter getDimensionalTransform() {

-        return ((AbstractUnit)parent).getDimensionalTransform();

-    }

-

-    @Override

-    public Map<? extends Unit<?>, Integer> getBaseUnits() {

-      return parent.getBaseUnits();

-    }

-    

-    @Override

-    public int hashCode() {

-        return symbol.hashCode();

-    }

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/AnnotatedUnit.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/AnnotatedUnit.java
deleted file mode 100644
index c67de6b..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/AnnotatedUnit.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (c) 2005, 2017, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil and others - initial API and implementation
- */
-package org.eclipse.uomo.units.impl;
-
-import java.util.Map;
-
-import org.eclipse.uomo.units.AbstractUnit;
-import javax.measure.Quantity;
-import javax.measure.Unit;
-import javax.measure.UnitConverter;
-
-/**
- * <p> This class represents an annotated unit. It  allows for unit specialization
- *     and annotation without changing the unit semantic. For example:[code]
- *        public class Size implements Length {
- *             private double meters;
- *             ...
- *             public static class Unit extends AnnotatedUnit<Length> {
- *                  private Unit(org.unitsofmeasure.Unit<Length> realUnit, String annotation) {
- *                      super(actualUnit, annotation);
- *                  }
- *                  public static Size.Unit METER = new Size.Unit(SI.METRE, "size"); // Equivalent to SI.METRE
- *                  public static Size.Unit INCH = new Size.Unit(NonSI.INCH, "size"); // Equivalent to NonSI.INCH
- *             }
- *        }[/code]</p>
- * <p> Annotation are often written between curly braces behind units
- *     but they do not change, for example "%{vol}", "kg{total}", or
- *     "{RBC}" (for "red blood cells") are equivalent to "%", "kg", and "1"
- *      respectively.</p>
- *
- * <p><b>Note:</b> This class supports the {@code UnitFormat} implementation {@code LocalFormat}, 
- * hence it is currently part of the internal format API. If required and made public, it's possible
- * to locate in the "unit" package.</p>    
- *
- * @param <Q> The type of the quantity measured by this unit.
- *
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:units@catmedia.us">Werner Keil</a>
- * @version 1.2, $Date: 2017-12-25 $
- */
-public class AnnotatedUnit<Q extends Quantity<Q>> extends AbstractUnit<Q> {
-
-    /**
-     *
-     */
-    private static final long serialVersionUID = 1L;
-
-    /**
-     * Holds the annotation.
-     */
-    private final String annotation;
-
-    /**
-     * Holds the actual unit, never an annotated unit.
-     */
-    private final AbstractUnit<Q> actualUnit;
-
-    public AbstractUnit<Q> getActualUnit() {
-		return actualUnit;
-	}
-
-	/**
-     * Creates an annotated unit for the specified unit.
-     *
-     * @param actualUnit the real unit.
-     * @param annotation the annotation.
-     */
-    public AnnotatedUnit(AbstractUnit<Q> actualUnit, String annotation) {
-        this.actualUnit = (actualUnit instanceof AnnotatedUnit<?>)
-                ? ((AnnotatedUnit<Q>) actualUnit).actualUnit : actualUnit;
-        this.annotation = annotation;
-    }
-
-    /**
-     * Returns an annotated unit equivalent to this unit. The annotation
-     * does not change the unit semantic.
-     * Annotation are often written between curly braces behind units.
-     * For example, annotated units "%{vol}", "kg{total}", or "{RBC}"
-     * (for "red blood cells") are equivalent to "%", "kg", and "1" respectively.
-     *
-     * @param annotation the new symbol for the alternate unit.
-     * @return the alternate unit.
-     * @throws UnsupportedOperationException if this unit is not a metric unit.
-     * @throws IllegalArgumentException if the specified symbol is already
-     *         associated to a different unit.
-     */
-    public final AbstractUnit<Q> annotate(String annotation) {
-        return new AnnotatedUnit<Q>(this, annotation);
-    }
-    
-    /**
-     * Returns the annotation (if any) of this unit.
-     * The default implementation returns <code>null</code> (no annotation).
-     *
-     * @return this unit annotation or <code>null</code> if this unit has not
-     *         specific symbol associated with (e.g. product of units).
-     */
-    public String getAnnotation() {
-        return annotation;
-    }
-
-   @Override
-    public String getSymbol() {
-        return actualUnit.getSymbol();
-    }
-   
-	@Override
-	public Unit<Q> getSystemUnit() {
-		return toMetric();
-	}
-	
-    @Override
-    public Map<Unit<?>, Integer> getBaseUnits() {
-        return actualUnit.getProductUnits();
-    }
-  
-   @Override
-    protected Unit<Q> toMetric() {
-        return actualUnit.getSystemUnit();
-    }
-
-    @Override
-    public UnitConverter getConverterToMetric() {
-        return actualUnit.getConverterToMetric();
-    }
-
-    @Override
-    public boolean equals(Object that) {
-        if (this == that)
-            return true;
-        if (!(that instanceof AnnotatedUnit<?>))
-            return false;
-        AnnotatedUnit<?> thatUnit = (AnnotatedUnit<?>) that;
-        return this.actualUnit.equals(thatUnit.actualUnit) &&
-                this.annotation.equals(thatUnit.annotation);
-    }
-
-    @Override
-    public int hashCode() {
-        return actualUnit.hashCode() + annotation.hashCode();
-    }
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/BaseAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/BaseAmount.java
deleted file mode 100644
index eeb4aa5..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/BaseAmount.java
+++ /dev/null
@@ -1,324 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil - initial API and implementation
- */
-package org.eclipse.uomo.units.impl;
-
-import static org.eclipse.uomo.core.impl.OutputHelper.println;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.math.MathContext;
-
-import org.eclipse.uomo.units.AbstractConverter;
-import org.eclipse.uomo.units.AbstractQuantity;
-import org.eclipse.uomo.units.AbstractUnit;
-import org.eclipse.uomo.units.IMeasure;
-import org.eclipse.uomo.units.impl.converter.RationalConverter;
-import org.eclipse.uomo.units.internal.MeasureAmount;
-import javax.measure.quantity.Dimensionless;
-import javax.measure.Quantity;
-import javax.measure.Unit;
-import javax.measure.UnitConverter;
-
-import com.ibm.icu.util.Measure;
-import com.ibm.icu.util.MeasureUnit;
-
-/**
- * Represents a generic quantity amount.
- * 
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.3.3, $Date: 2013-05-21 $
- * @deprecated use BaseQuantity
- */
-public class BaseAmount<Q extends Quantity<Q>> extends AbstractQuantity<Q>
-		implements Comparable<BaseAmount<Q>> {
-	
-	private final Measure measure;
-	
-	/**
-	 * @param number
-	 * @param unit
-	 */
-	public BaseAmount(Number number, Unit<Q> unit) {
-		super(unit);
-		measure = MeasureAmount.of(number,  (MeasureUnit)unit);
-		//super(number, (MeasureUnit) unit);
-	}
-
-	/**
-	 * Returns the amount corresponding to the specified value and unit.
-	 * 
-	 * @param value
-	 *            the value stated in the specified unit.
-	 * @param unit
-	 *            the unit in which the value is stated.
-	 * @return the corresponding amount.
-	 */
-	public static <Q extends Quantity<Q>> BaseAmount<Q> valueOf(Number value,
-			Unit<Q> unit) {
-		BaseAmount<Q> amount = new BaseAmount<Q>(value, unit);
-		return amount;
-	}
-
-	/**
-	 * Holds a dimensionless measure of one (exact).
-	 */
-	protected static final BaseAmount<Dimensionless> ONE = new BaseAmount<Dimensionless>(
-			BigDecimal.ONE, AbstractUnit.ONE);
-
-	@SuppressWarnings({ "rawtypes", "unchecked" })
-	public BaseAmount<Q> add(IMeasure<Q> that) {
-		final IMeasure<Q> thatToUnit = that.to(unit());
-		return new BaseAmount(this.value().doubleValue()
-				+ thatToUnit.value().doubleValue(), unit());
-	}
-
-	@SuppressWarnings({ "rawtypes", "unchecked" })
-	@Override
-	public BaseAmount<Q> subtract(IMeasure<Q> that) {
-		final IMeasure<Q> thatToUnit = that.to(unit());
-		return new BaseAmount(this.value().doubleValue()
-				- thatToUnit.value().doubleValue(), unit());
-
-	}
-
-	@SuppressWarnings("unchecked")
-	@Override
-	public BaseAmount<Q> multiply(IMeasure<?> that) {
-		Unit<?> unit = unit().multiply(that.unit());
-		return (BaseAmount<Q>) valueOf((value().doubleValue() * that.value()
-				.doubleValue()), unit);
-	}
-	
-	@Override
-	public BaseAmount<?> multiply(Number that) {
-		return (BaseAmount<Q>) valueOf((value().doubleValue() * that
-				.doubleValue()), unit());	
-	}
-
-	@SuppressWarnings("unchecked")
-	@Override
-	public BaseAmount<Q> divide(IMeasure<?> that) {
-		Unit<?> unit = unit().divide(that.unit());
-		return (BaseAmount<Q>) valueOf((value().doubleValue() / that.value()
-				.doubleValue()), unit);
-	}
-
-	@Override
-	public BaseAmount<Q> to(Unit<Q> unit) {
-		return to(unit, MathContext.DECIMAL128);
-	}
-
-	public BaseAmount<Q> to(Unit<Q> unit, MathContext ctx) {
-		if (this.unit().equals(unit))
-			return this;
-		UnitConverter cvtr = this.unit().getConverterTo(unit);
-		if (cvtr == AbstractConverter.IDENTITY)
-			return (BaseAmount<Q>) valueOf(this.value(), unit);
-		return (BaseAmount<Q>) valueOf(convert(this.value(), cvtr, ctx), unit);
-	}
-
-	// Try to convert the specified value.
-	private static Number convert(Number value, UnitConverter cvtr,
-			MathContext ctx) {
-		if (cvtr instanceof RationalConverter) { // Try converting through Field
-													// methods.
-			RationalConverter rCvtr = (RationalConverter) cvtr;
-			BigInteger dividend = rCvtr.getDividend();
-			BigInteger divisor = rCvtr.getDivisor();
-			if (dividend.abs().compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0)
-				throw new ArithmeticException("Multiplier overflow"); //$NON-NLS-1$
-			if (divisor.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0)
-				throw new ArithmeticException("Divisor overflow"); //$NON-NLS-1$
-			if (value instanceof BigInteger || value instanceof Long || value instanceof Integer) {
-				return (value.longValue() * dividend.longValue())
-					/ (divisor.longValue());
-			} else {
-				return (value.doubleValue() * dividend.doubleValue())
-					/ (divisor.doubleValue());
-				// TODO use actual BigDecimal methods for BigDecimal
-			}
-		} else if (cvtr instanceof AbstractConverter.Compound
-				&& cvtr.isLinear()) { // Do it in two parts.
-			AbstractConverter.Compound compound = (AbstractConverter.Compound) cvtr;
-			Number firstConversion = convert(value, compound.getRight(), ctx);
-			Number secondConversion = convert(firstConversion,
-					compound.getLeft(), ctx);
-			return secondConversion;
-		} else { // Try using BigDecimal as intermediate.
-			BigDecimal decimalValue = BigDecimal.valueOf(value.doubleValue());
-			BigDecimal newValue = cvtr.convert(decimalValue, ctx);
-			return newValue;
-			// if (((FieldNumber)value) instanceof Decimal)
-			// return (N)((FieldNumber)Decimal.valueOf(newValue));
-			// if (((FieldNumber)value) instanceof Float64)
-			// return (N)((FieldNumber)Float64.valueOf(newValue.doubleValue()));
-			// throw new ArithmeticException(
-			// "Generic amount conversion not implemented for amount of type " +
-			// value.getClass());
-		}
-	}
-
-	/**
-	 * Returns this measure raised at the specified exponent.
-	 * 
-	 * @param exp
-	 *            the exponent.
-	 * @return <code>this<sup>exp</sup></code>
-	 */
-	@SuppressWarnings("unchecked")
-	public IMeasure<? extends IMeasure<Q>> pow(int exp) {
-		if (exp < 0)
-			return (IMeasure<? extends IMeasure<Q>>) this.pow(-exp).inverse();
-		if (exp == 0)
-
-			return (IMeasure<? extends IMeasure<Q>>) ONE;
-
-		IMeasure<? extends IMeasure<Q>> pow2 = (IMeasure<? extends IMeasure<Q>>) this;
-		IMeasure<? extends IMeasure<Q>> result = null;
-		while (exp >= 1) { // Iteration.
-
-			if ((exp & 1) == 1) {
-				result = (IMeasure<? extends IMeasure<Q>>) ((result == null) ? pow2
-						: result.multiply(pow2));
-
-			}
-
-			pow2 = (IMeasure<? extends IMeasure<Q>>) pow2.multiply(pow2);
-
-			exp >>>= 1;
-
-		}
-
-		return result;
-
-	}
-
-	public IMeasure<? extends IMeasure<Q>> inverse() {
-		@SuppressWarnings({ "rawtypes", "unchecked" })
-		final IMeasure<? extends IMeasure<Q>> m = new BaseAmount(value(),
-				unit().inverse());
-		return m;
-	}
-
-	@Override
-	public int compareTo(BaseAmount<Q> o) {
-		// TODO Auto-generated method stub
-		return 0;
-	}
-
-	@Override
-	public boolean equals(Object obj) {
-		if (obj == null)
-			return false;
-		if (obj == this)
-			return true;
-		if (obj instanceof BaseAmount<?>) {
-			BaseAmount<?> ba = (BaseAmount<?>) obj;
-			if (this.unit().getClass() == ba.unit().getClass()) {
-				return super.equals(obj);
-			}
-			if (ba.unit() instanceof AlternateUnit<?>) {
-				AlternateUnit<?> baa = (AlternateUnit<?>) ba.unit();
-				if (this.unit() instanceof AlternateUnit<?>) {
-					return super.equals(obj);
-				} else if (this.unit() instanceof AnnotatedUnit<?>) {
-					AnnotatedUnit<?> au = (AnnotatedUnit<?>) this.unit();
-					println("Ann: " + au); //$NON-NLS-1$
-				} else if (this.unit() instanceof BaseUnit<?>) {
-					BaseUnit<?> bu = (BaseUnit<?>) this.unit();
-					println("Bas: " + bu); //$NON-NLS-1$
-				} else if (this.unit() instanceof ProductUnit<?>) {
-					ProductUnit<?> pu = (ProductUnit<?>) this.unit();
-					println("Pro: " + pu); //$NON-NLS-1$
-				} else if (this.unit() instanceof TransformedUnit<?>) {
-					TransformedUnit<?> tu = (TransformedUnit<?>) this.unit();
-					println("Tran: " + tu); //$NON-NLS-1$
-					if (tu.getParentUnit().equals(baa)) {
-						return true; // FIXME use number here, too
-					}
-				} else {
-					return super.equals(obj);
-				}
-			}
-			if (ba.unit() instanceof BaseUnit<?>) {
-				if (this.unit() instanceof AlternateUnit<?>) {
-					AlternateUnit<?> au = (AlternateUnit<?>) this.unit();
-					println("Alt: " + au); //$NON-NLS-1$
-				} else if (this.unit() instanceof AnnotatedUnit<?>) {
-					AnnotatedUnit<?> au = (AnnotatedUnit<?>) this.unit();
-					println("Ann: " + au); //$NON-NLS-1$
-				} else if (this.unit() instanceof BaseUnit<?>) {
-					return super.equals(obj);
-				} else if (this.unit() instanceof ProductUnit<?>) {
-					ProductUnit<?> pu = (ProductUnit<?>) this.unit();
-					println("Pro: " + pu); //$NON-NLS-1$
-				} else if (this.unit() instanceof TransformedUnit<?>) {
-					TransformedUnit<?> tu = (TransformedUnit<?>) this.unit();
-					println("Tran: " + tu); //$NON-NLS-1$
-				} else {
-					return super.equals(obj);
-				}
-			}
-			if (ba.unit() instanceof TransformedUnit<?>) {
-				TransformedUnit<?> bat = (TransformedUnit<?>) ba.unit();
-				if (this.unit() instanceof AlternateUnit<?>) {
-					AlternateUnit<?> au = (AlternateUnit<?>) this.unit();
-					println("Alt: " + au); //$NON-NLS-1$
-					if (bat.getParentUnit().equals(au)) {
-						return true;
-					}
-				} else if (this.unit() instanceof AnnotatedUnit<?>) {
-					AnnotatedUnit<?> au = (AnnotatedUnit<?>) this.unit();
-					System.out.println("Ann: " + au); //$NON-NLS-1$
-				} else if (this.unit() instanceof BaseUnit<?>) {
-					BaseUnit<?> bu = (BaseUnit<?>) this.unit();
-					println("Bas: " + bu); //$NON-NLS-1$
-				} else if (this.unit() instanceof ProductUnit<?>) {
-					ProductUnit<?> pu = (ProductUnit<?>) this.unit();
-					println("Pro: " + pu); //$NON-NLS-1$
-				} else if (this.unit() instanceof TransformedUnit<?>) {
-					return super.equals(obj);
-				} else {
-					return super.equals(obj);
-				}
-			}
-		}
-		return super.equals(obj);
-	}
-
-	@Override
-	public Number value() {
-		return measure.getNumber();
-	}
-
-	@Override
-	public Number getValue() {
-		return value();
-	}
-
-	@Override
-	public boolean isBig() {
-		return value() instanceof BigDecimal;
-	}
-
-	@Override
-	public BigDecimal decimalValue(Unit<Q> unit, MathContext ctx)
-			throws ArithmeticException {
-		   BigDecimal decimal = (value() instanceof BigDecimal) ? (BigDecimal)value() : BigDecimal.valueOf(value().doubleValue()); // TODO check value if it is a BD, otherwise use different converter
-           return (unit().equals(unit)) ? decimal : ((AbstractConverter)unit().getConverterTo(unit)).convert(decimal, ctx);
-
-	}
-
-	@Override
-	public double doubleValue(Unit<Q> unit) throws ArithmeticException {
-		return (unit().equals(unit)) ? value().doubleValue() : unit().getConverterTo(unit).convert(value().doubleValue());
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/BaseQuantity.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/BaseQuantity.java
deleted file mode 100644
index 2f36c56..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/BaseQuantity.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/**
- *  Unit-API - Units of Measurement API for Java
- *  Copyright 2013-2014, Jean-Marie Dautelle, Werner Keil, V2COM and individual
- *  contributors by the @author tag.
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *  http://www.apache.org/licenses/LICENSE-2.0
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.eclipse.uomo.units.impl;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.math.MathContext;
-
-import org.eclipse.uomo.units.AbstractConverter;
-import org.eclipse.uomo.units.AbstractQuantity;
-import javax.measure.Quantity;
-import javax.measure.IncommensurableException;
-import javax.measure.UnconvertibleException;
-import javax.measure.Unit;
-import javax.measure.UnitConverter;
-
-/**
- * An amount of quantity, consisting of a Number and a Unit. BaseMeasurement
- * objects are immutable.
- * 
- * @see java.lang.Number
- * @see MeasureUnit
- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>
- * @param <Q>
- *            The type of the quantity.
- * @version 1.6, $Date: 2014-04-08 $
- */
-public class BaseQuantity<Q extends Quantity<Q>> extends AbstractQuantity<Q>
-		implements Quantity<Q>, Comparable<BaseQuantity<Q>> {
-//FIXME Bug 338334 overwrite equals()
-    
-
-	/**
-	 * 
-	 */
-//	private static final long serialVersionUID = 7312161895652321241L;
-
-	private final Number value;
-	
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see AbstractMeasurement#equals(java.lang.Object)
-	 */
-	@Override
-	public boolean equals(Object obj) {
-		if (obj == null)
-			return false;
-		if (obj == this)
-			return true;
-		if (this.getClass() == obj.getClass()) {
-			return super.equals(obj);
-		} else {
-			if (obj instanceof Quantity) {
-				@SuppressWarnings("rawtypes")
-				Quantity m = (Quantity) obj;
-				if (m.getValue().getClass() == this.getValue().getClass()
-						&& m.getUnit().getClass() == this.getUnit().getClass()) {
-					return super.equals(obj);
-				} else {
-					// if (this.getQuantityUnit() instanceof AbstractUnit<?>) {
-					// if
-					// }
-					return super.equals(obj);
-				}
-			}
-			return false;
-		}
-	}
-
-	/**
-	 * Indicates if this measure is exact.
-	 */
-	private final boolean isExact;
-
-	/**
-	 * Indicates if this measure is big.
-	 */
-	private final boolean isBig;
-	
-	/**
-	 * Holds the exact value (when exact) stated in this measure unit.
-	 */
-	// private long exactValue;
-
-	/**
-	 * Holds the minimum value stated in this measure unit. For inexact
-	 * measures: minimum < maximum
-	 */
-	// private double minimum;
-
-	/**
-	 * Holds the maximum value stated in this measure unit. For inexact
-	 * measures: maximum > minimum
-	 */
-	// private double maximum;
-
-	protected BaseQuantity(Number number, Unit<Q> unit) {
-		super(unit);
-		value = number;
-		isExact = false;
-		isBig = false;;
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * Measurement#doubleValue(javax.measure.Unit)
-	 */
-	public double doubleValue(Unit<Q> unit) {
-		Unit<Q> myUnit = getUnit();
-		try {
-			UnitConverter converter = unit.getConverterTo(myUnit);
-			return converter.convert(getValue().doubleValue());
-		} catch (UnconvertibleException e) {
-			throw e;
-		} // catch (IncommensurableException e) {
-		// throw new IllegalArgumentException(e.getMessage());
-		// }
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * org.eclipse.uomo.units.AbstractMeasurement#longValue(javax.measure
-	 * .Unit)
-	 */
-	public long longValue(Unit<Q> unit) {
-		Unit<Q> myUnit = getUnit();
-		try {
-			UnitConverter converter = unit.getConverterToAny(myUnit);
-			if ((getValue() instanceof BigDecimal || getValue() instanceof BigInteger) 
-					&& converter instanceof AbstractConverter) {
-				return (((AbstractConverter)converter).convert(
-						BigDecimal.valueOf(getValue().longValue()),
-						MathContext.DECIMAL128)).longValue();
-			} else {
-		        double result = doubleValue(unit);
-		        if ((result < Long.MIN_VALUE) || (result > Long.MAX_VALUE)) {
-		            throw new ArithmeticException("Overflow (" + result + ")");
-		        }
-		        return (long) result;
-			}
-		} catch (UnconvertibleException e) {
-			throw e;
-		} catch (IncommensurableException e) {
-			throw new IllegalArgumentException(e.getMessage());
-		}
-	}
-
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see javax.measure.Quantity#getValue()
-	 */
-	public Number getValue() {
-		return value;
-	}
-
-	/**
-	 * Indicates if this measured amount is exact. An exact amount is guarantee
-	 * exact only when stated in this measure unit (e.g.
-	 * <code>this.longValue()</code>); stating the amount in any other unit may
-	 * introduce conversion errors.
-	 * 
-	 * @return <code>true</code> if this measure is exact; <code>false</code>
-	 *         otherwise.
-	 */
-	public boolean isExact() {
-		return isExact;
-	}
-	
-	/**
-	 * Indicates if this measured amount is a big number, i.E. BigDecimal or BigInteger.
-	 * In all other cases this would be false.
-	 * 
-	 * @return <code>true</code> if this measure is big; <code>false</code>
-	 *         otherwise.
-	 */
-	public boolean isBig() {
-		return isBig;
-	}
-	
-	@SuppressWarnings({ "rawtypes", "unchecked" })
-	public BaseQuantity<Q> add(AbstractQuantity<Q> that) {
-		final AbstractQuantity<Q> thatToUnit = that.to(getUnit());
-		return new BaseQuantity(this.getValue().doubleValue()
-				+ thatToUnit.getValue().doubleValue(), 
-                                  getUnit());
-	}
-	
-	public String toString() {
-		return  String.valueOf(getValue()) + " " 
-                        + String.valueOf(getUnit());
-	}
-
-	@Override
-	public IMeasure<?> multiply(IMeasure<?> that) {
-		final Unit<?> unit = getUnit().multiply(that.unit());
-		return of((getValue().doubleValue() * that.value()
-				.doubleValue()), unit);	
-	}
-        
-        @Override
-	public BaseQuantity<?> multiply(Number that) {
-		return (BaseQuantity<Q>) of((getValue().doubleValue() * that
-				.doubleValue()), getUnit());	
-	}
-        
-	@Override
-	public IMeasure<?> divide(IMeasure<?> that) {
-		final Unit<?> unit = getUnit().divide(that.unit());
-		return of((getValue().doubleValue() / that.value()
-				.doubleValue()), unit);	
-	}
-
-	public IMeasure<?> divide(Number that) {
-		// TODO may use isBig() here, too
-		if (value instanceof BigDecimal && that instanceof BigDecimal) {
-			return of(((BigDecimal)value).divide((BigDecimal)that), 
-                                getUnit());
-		}
-		return of(getValue().doubleValue() / that.doubleValue(), 
-                        getUnit());	
-	}
-	
-//	@Override
-//	public IMeasure<Q> inverse() {
-//		@SuppressWarnings({ "rawtypes", "unchecked" })
-//		final IMeasure<Q> m = new BaseQuantity(getValue(),
-//				getUnit().inverse()); // TODO keep value same?
-//		return m;
-//	}
-
-	@Override
-	public BigDecimal decimalValue(Unit<Q> unit, MathContext ctx)
-			throws ArithmeticException {
-		if (value instanceof BigDecimal) {
-                    return (BigDecimal)value;
-                }
-                if (value instanceof BigInteger) {
-                    return new BigDecimal((BigInteger)value);
-                }
-		return BigDecimal.valueOf(value.doubleValue());
-	}
-
-	@Override
-	public int compareTo(BaseQuantity<Q> o) {
-		// TODO Auto-generated method stub
-		return 0;
-	}
-
-	@Override
-	public Number value() {
-		return getValue();
-	}
-
-	@Override
-	public IMeasure<? extends IMeasure<Q>> inverse() {
-		final IMeasure<? extends IMeasure<Q>> m = new BaseQuantity(getValue(),
-		getUnit().inverse()); // TODO keep value same?
-		return m;
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/BaseUnit.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/BaseUnit.java
deleted file mode 100644
index 2247a70..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/BaseUnit.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/**

- * Copyright (c) 2005, 2011, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl;

-

-import java.io.Serializable;

-

-import org.eclipse.uomo.units.AbstractConverter;

-import org.eclipse.uomo.units.AbstractUnit;

-import javax.measure.Quantity;

-import javax.measure.Dimension;

-import javax.measure.Unit;

-import javax.measure.UnitConverter;

-

-/**

- * <p> This class represents the building blocks on top of which all others

- *     units are created. Base units are always unscaled metric units.</p>

- * 

- * <p> When using the {@linkplain Dimensional.Model#STANDARD standard} model

- *     (default), all seven base units are dimensionally independent.</p>

- *

- * @param <Q> The type of the quantity measured by this unit.

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @version 1.10 ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $

- * @see <a href="http://en.wikipedia.org/wiki/SI_base_unit">

- *       Wikipedia: SI base unit</a>

- */

-public class BaseUnit<Q extends Quantity<Q>> extends AbstractUnit<Q> implements Serializable {

-    

-    /**

-     * Holds the symbol.

-     */

-    private final String symbol;

-

-    /** The serialVersionUID */

-    private static final long serialVersionUID = 1234567654321265167L;

-

-    /**

-     * Creates a base unit having the specified symbol.

-     *

-     * @param symbol the symbol of this base unit.

-     * @throws IllegalArgumentException if the specified symbol is

-     *         associated to a different unit.

-     */

-    public BaseUnit(String symbol, String name) {

-        super(name);

-    	this.symbol = symbol;

-        // Checks if the symbol is associated to a different unit.

-        synchronized (AbstractUnit.SYMBOL_TO_UNIT) {

-            Unit<?> unit = AbstractUnit.SYMBOL_TO_UNIT.get(symbol);

-            if (unit == null) {

-                AbstractUnit.SYMBOL_TO_UNIT.put(symbol, this);

-                return;

-            }

-            if (!(unit instanceof BaseUnit<?>))

-                throw new IllegalArgumentException("Symbol " + symbol + " is associated to a different unit");

-        }

-    }

-    

-    /**

-     * Creates a base unit having the specified symbol.

-     *

-     * @param symbol the symbol of this base unit.

-     * @throws IllegalArgumentException if the specified symbol is

-     *         associated to a different unit.

-     */

-    public BaseUnit(String symbol) {

-    	this(symbol, null);

-    }

-	

-    @Override

-    public String getSymbol() {

-        return symbol;

-    }

-    

-	@Override

-	public Unit<Q> getSystemUnit() {

-		return toMetric();

-	}

-	

-    @Override

-    public boolean equals(Object that) {

-        if (this == that)

-            return true;

-        if (!(that instanceof BaseUnit<?>)) {

-        	if (!(that instanceof Unit<?>)) {

-        		return false;

-        	} else {

-        		if (that instanceof TransformedUnit<?>) {

-        			if (((TransformedUnit<?>) that).getParentUnit() instanceof BaseUnit<?>) {        				

-        				if(this.getSymbol().equals(((TransformedUnit<?>)that).getParentUnit().getSymbol())) {

-        					for (@SuppressWarnings("unused") UnitConverter comp : ((TransformedUnit<?>) that).toParentUnit().getCompoundConverters()) {

-        						// FIXME Bug 338334 evaluate factor 1 for TU

-//								System.out.println(comp.toString());

-							}

-        				}

-        			}

-        		}

-        		if (that instanceof ProductUnit<?>) {

-        			ProductUnit<?> pu = (ProductUnit<?>) that;

-//        			System.out.println("Product Unit: " + pu.getProductUnits());

-        			return this.symbol.equals(pu.getSymbol());

-        		}

-        		return false;

-        	}

-        }  else {        	

-	        BaseUnit<?> thatUnit = (BaseUnit<?>) that;

-	        return this.symbol.equals(thatUnit.symbol);

-        }

-    }

-

-    @Override

-    public int hashCode() {

-        return symbol.hashCode();

-    }

-

-    @Override

-    protected Unit<Q> toMetric() {

-        return this;

-    }

-

-    @Override

-    public UnitConverter getConverterToMetric() {

-        return AbstractConverter.IDENTITY;

-    }

-

-    @Override

-    public Dimension getDimension() {

-        return DimensionImpl.getModel().getDimension(this);

-    }

-

-    @Override

-    public UnitConverter getDimensionalTransform() {

-        return DimensionImpl.getModel().getTransform(this);

-    }

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/ByteQuantity.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/ByteQuantity.java
deleted file mode 100644
index 1e2b834..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/ByteQuantity.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/**

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package tec.units.indriya.quantity;

-

-import java.math.BigDecimal;

-import java.math.MathContext;

-import java.util.Objects;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-

-import tec.units.indriya.AbstractQuantity;

-import tec.units.indriya.ComparableQuantity;

-

-/**

- * An amount of quantity, consisting of a short and a Unit. ByteQuantity objects are immutable.

- * 

- * @see AbstractQuantity

- * @see Quantity

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @param <Q>

- *          The type of the quantity.

- * @version 0.1, $Date: 2017-05-28 $

- * @since 1.0.7

- */

-final class ByteQuantity<Q extends Quantity<Q>> extends AbstractQuantity<Q> {

-

-  /**
-     * 
-     */

-  private static final long serialVersionUID = 6325849816534488248L;

-

-  final byte value;

-

-  ByteQuantity(byte value, Unit<Q> unit) {

-    super(unit);

-    this.value = value;

-  }

-

-  @Override

-  public Byte getValue() {

-    return value;

-  }

-

-  public double doubleValue(Unit<Q> unit) {

-    return (super.getUnit().equals(unit)) ? value : super.getUnit().getConverterTo(unit).convert(value);

-  }

-

-  @Override

-  public long longValue(Unit<Q> unit) {

-    double result = doubleValue(unit);

-    if ((result < Long.MIN_VALUE) || (result > Long.MAX_VALUE)) {

-      throw new ArithmeticException("Overflow (" + result + ")");

-    }

-    return (long) result;

-  }

-

-  @Override

-  public boolean isBig() {

-    return false;

-  }

-

-  @Override

-  public BigDecimal decimalValue(Unit<Q> unit, MathContext ctx) {

-    return BigDecimal.valueOf(doubleValue(unit));

-  }

-

-  @Override

-  public ComparableQuantity<Q> add(Quantity<Q> that) {

-    final Quantity<Q> converted = that.to(getUnit());

-    return NumberQuantity.of(value + converted.getValue().byteValue(), getUnit());

-  }

-

-  @Override

-  public ComparableQuantity<Q> subtract(Quantity<Q> that) {

-    final Quantity<Q> converted = that.to(getUnit());

-    return NumberQuantity.of(value - converted.getValue().byteValue(), getUnit());

-  }

-

-  @Override

-  public ComparableQuantity<?> divide(Quantity<?> that) {

-    return NumberQuantity.of((short) value / that.getValue().byteValue(), getUnit().divide(that.getUnit()));

-  }

-

-  @Override

-  public ComparableQuantity<Q> divide(Number that) {

-    return NumberQuantity.of(value / that.byteValue(), getUnit());

-  }

-

-  @Override

-  public ComparableQuantity<?> multiply(Quantity<?> multiplier) {

-    return NumberQuantity.of(value * multiplier.getValue().byteValue(), getUnit().multiply(multiplier.getUnit()));

-  }

-

-  @Override

-  public ComparableQuantity<Q> multiply(Number multiplier) {

-    return NumberQuantity.of(value * multiplier.byteValue(), getUnit());

-  }

-

-  @Override

-  public ComparableQuantity<?> inverse() {

-    return NumberQuantity.of(1 / value, getUnit().inverse());

-  }

-

-  @Override

-  public boolean equals(Object obj) {

-    if (this == obj) {

-      return true;

-    }

-    if (obj instanceof Quantity<?>) {

-      Quantity<?> that = (Quantity<?>) obj;

-      return Objects.equals(getUnit(), that.getUnit()) && Equalizer.hasEquality(value, that.getValue());

-    }

-    return false;

-  }

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/DecimalQuantity.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/DecimalQuantity.java
deleted file mode 100644
index 74eac21..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/DecimalQuantity.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*

- * Next Generation Units of Measurement Implementation

- * Copyright (c) 2005-2017, Jean-Marie Dautelle, Werner Keil, V2COM.

- *

- * All rights reserved.

- *

- * Redistribution and use in source and binary forms, with or without modification,

- * are permitted provided that the following conditions are met:

- *

- * 1. Redistributions of source code must retain the above copyright notice,

- *    this list of conditions and the following disclaimer.

- *

- * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions

- *    and the following disclaimer in the documentation and/or other materials provided with the distribution.

- *

- * 3. Neither the name of JSR-363, Indriya nor the names of their contributors may be used to endorse or promote products

- *    derived from this software without specific prior written permission.

- *

- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,

- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE

- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;

- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED

- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,

- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

- */

-package tec.units.indriya.quantity;

-

-import java.io.Serializable;

-import java.math.BigDecimal;

-import java.math.MathContext;

-import java.util.Objects;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-

-import tec.units.indriya.AbstractConverter;

-import tec.units.indriya.AbstractQuantity;

-import tec.units.indriya.ComparableQuantity;

-

-/**

- * An amount of quantity, implementation of {@link ComparableQuantity} that uses {@link BigDecimal} as implementation of {@link Number}, this object

- * is immutable. Note: all operations which involves {@link Number}, this implementation will convert to {@link BigDecimal}, and all operation of

- * BigDecimal will use {@link MathContext#DECIMAL128}.

- *

- * @param <Q>

- *          The type of the quantity.

- * @author otaviojava

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @see AbstractQuantity

- * @see Quantity

- * @see ComparableQuantity

- * @version 1.0.1

- * @since 1.0

- */

-@SuppressWarnings({ "rawtypes", "unchecked" })

-final class DecimalQuantity<Q extends Quantity<Q>> extends AbstractQuantity<Q> implements Serializable {

-

-  private static final long serialVersionUID = 6504081836032983882L;

-

-  private final BigDecimal value;

-

-  public DecimalQuantity(BigDecimal value, Unit<Q> unit) {

-    super(unit);

-    this.value = value;

-  }

-

-  @Override

-  public BigDecimal getValue() {

-    return value;

-  }

-

-  @Override

-  public double doubleValue(Unit<Q> unit) {

-    return (unit.equals(unit)) ? value.doubleValue() : unit.getConverterTo(unit).convert(value.doubleValue());

-  }

-

-  @Override

-  public BigDecimal decimalValue(Unit<Q> unit, MathContext ctx) throws ArithmeticException {

-    return (super.getUnit().equals(unit)) ? value : ((AbstractConverter) unit.getConverterTo(unit)).convert(value, ctx);

-  }

-

-  @Override

-  public ComparableQuantity<Q> add(Quantity<Q> that) {

-    if (getUnit().equals(that.getUnit())) {

-      return Quantities.getQuantity(value.add(Equalizer.toBigDecimal(that.getValue()), MathContext.DECIMAL128), getUnit());

-    }

-    Quantity<Q> converted = that.to(getUnit());

-    return Quantities.getQuantity(value.add(Equalizer.toBigDecimal(converted.getValue())), getUnit());

-  }

-

-  @Override

-  public ComparableQuantity<Q> subtract(Quantity<Q> that) {

-    if (getUnit().equals(that.getUnit())) {

-      return Quantities.getQuantity(value.subtract(Equalizer.toBigDecimal(that.getValue()), MathContext.DECIMAL128), getUnit());

-    }

-    Quantity<Q> converted = that.to(getUnit());

-    return Quantities.getQuantity(value.subtract(Equalizer.toBigDecimal(converted.getValue()), MathContext.DECIMAL128), getUnit());

-  }

-

-  @Override

-  public ComparableQuantity<?> multiply(Quantity<?> that) {

-    return new DecimalQuantity(value.multiply(Equalizer.toBigDecimal(that.getValue()), MathContext.DECIMAL128), getUnit().multiply(that.getUnit()));

-  }

-

-  @Override

-  public ComparableQuantity<Q> multiply(Number that) {

-    return Quantities.getQuantity(value.multiply(Equalizer.toBigDecimal(that), MathContext.DECIMAL128), getUnit());

-  }

-

-  @Override

-  public ComparableQuantity<Q> divide(Number that) {

-    return Quantities.getQuantity(value.divide(Equalizer.toBigDecimal(that), MathContext.DECIMAL128), getUnit());

-  }

-

-  @Override

-  public ComparableQuantity<Q> inverse() {

-    return (ComparableQuantity<Q>) Quantities.getQuantity(BigDecimal.ONE.divide(value), getUnit().inverse());

-  }

-

-  @Override

-  protected long longValue(Unit<Q> unit) {

-    double result = doubleValue(unit);

-    if ((result < Long.MIN_VALUE) || (result > Long.MAX_VALUE)) {

-      throw new ArithmeticException("Overflow (" + result + ")");

-    }

-    return (long) result;

-  }

-

-  @Override

-  public boolean isBig() {

-    return true;

-  }

-

-  @Override

-  public ComparableQuantity<?> divide(Quantity<?> that) {

-    return new DecimalQuantity(value.divide(Equalizer.toBigDecimal(that.getValue()), MathContext.DECIMAL128), getUnit().divide(that.getUnit()));

-  }

-

-  /*

-   * (non-Javadoc)

-   * 

-   * @see AbstractQuantity#equals(java.lang.Object)

-   */

-  @Override

-  public boolean equals(Object obj) {

-    if (obj == null)

-      return false;

-    if (obj == this)

-      return true;

-    if (obj instanceof Quantity<?>) {

-      Quantity<?> that = (Quantity<?>) obj;

-      return Objects.equals(getUnit(), that.getUnit()) && Equalizer.hasEquality(value, that.getValue());

-    }

-    return false;

-  }

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/DimensionImpl.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/DimensionImpl.java
deleted file mode 100644
index 17156f0..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/DimensionImpl.java
+++ /dev/null
@@ -1,342 +0,0 @@
-/**

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl;

-

-import java.io.Serializable;

-import java.util.HashMap;

-import java.util.Map;

-import java.util.Map.Entry;

-

-import org.eclipse.uomo.units.AbstractConverter;

-import org.eclipse.uomo.units.AbstractUnit;

-import org.eclipse.uomo.units.SI;

-import javax.measure.quantity.Dimensionless;

-import javax.measure.Dimension;

-import javax.measure.Unit;

-import javax.measure.UnitConverter;

-

-/**

- * <p>

- * This class represents the dimension of an unit. Two units <code>u1</code> and

- * <code>u2</code> are {@linkplain Unit#isCompatible compatible} if and only if

- * <code>(u1.getDimension().equals(u2.getDimension())))</code>

- * </p>

- * 

- * <p>

- * Instances of this class are immutable.

- * </p>

- * 

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * 

- * @version 1.0.6, $Date: 2017-12-20 $

- * @see <a href="http://www.bipm.org/en/si/si_brochure/chapter1/1-3.html"> BIPM:

- *      SI Brochure Chapter 1.3</a>

- */

-public final class DimensionImpl implements Dimension, Serializable {

-

-	/**

-	 * For cross-version compatibility.

-	 */

-	private static final long serialVersionUID = 2377803885472362640L;

-

-	/**

-	 * Holds the current physical model.

-	 */

-	private static Model model = Model.STANDARD;

-

-	/**

-	 * Holds dimensionless.

-	 */

-	public static final Dimension NONE = new DimensionImpl(AbstractUnit.ONE);

-

-	/**

-	 * Holds length dimension (L).

-	 */

-	public static final Dimension LENGTH = new DimensionImpl('L');

-

-	/**

-	 * Holds mass dimension (M).

-	 */

-	public static final Dimension MASS = new DimensionImpl('M');

-

-	/**

-	 * Holds time dimension (T).

-	 */

-	public static final Dimension TIME = new DimensionImpl('T');

-

-	/**

-	 * Holds electric current dimension (I).

-	 */

-	public static final Dimension ELECTRIC_CURRENT = new DimensionImpl('I');

-

-	/**

-	 * Holds temperature dimension (Θ). TODO use Theta again, currently not

-	 * working (Bug 351656)

-	 */

-	public static final Dimension TEMPERATURE = new DimensionImpl('Q');

-

-	/**

-	 * Holds amount of substance dimension (N).

-	 */

-	public static final Dimension AMOUNT_OF_SUBSTANCE = new DimensionImpl('N');

-

-	/**

-	 * Holds luminous intensity dimension (J).

-	 */

-	public static final Dimension LUMINOUS_INTENSITY = new DimensionImpl('J');

-

-	/**

-	 * Holds the pseudo unit associated to this dimension.

-	 */

-	private final Unit<?> pseudoUnit;

-

-	/**

-	 * Creates a new dimension associated to the specified symbol.

-	 * 

-	 * @param symbol

-	 *            the associated symbol.

-	 */

-	private DimensionImpl(char symbol) {

-		pseudoUnit = new BaseUnit<Dimensionless>("[" + symbol + "]"); //$NON-NLS-1$ //$NON-NLS-2$

-	}

-

-	/**

-	 * Creates a dimension having the specified pseudo-unit (base unit or

-	 * product of base unit).

-	 * 

-	 * @param pseudoUnit

-	 *            the pseudo-unit identifying this dimension.

-	 */

-	private DimensionImpl(Unit<?> pseudoUnit) {

-		this.pseudoUnit = pseudoUnit;

-	}

-

-	/**

-	 * Returns the product of this dimension with the one specified.

-	 * 

-	 * @param that

-	 *            the dimension multiplicand.

-	 * @return <code>this * that</code>

-	 */

-	@Override

-	public final Dimension multiply(Dimension that) {

-		return new DimensionImpl(

-				this.pseudoUnit.multiply(((DimensionImpl) that).pseudoUnit));

-	}

-

-	/**

-	 * Returns the quotient of this dimension with the one specified.

-	 * 

-	 * @param that

-	 *            the dimension divisor.

-	 * @return <code>this / that</code>

-	 */

-	public final Dimension divide(Dimension that) {

-		return new DimensionImpl(

-				this.pseudoUnit.divide(((DimensionImpl) that).pseudoUnit));

-	}

-

-	/**

-	 * Returns this dimension raised to an exponent.

-	 * 

-	 * @param n

-	 *            the exponent.

-	 * @return the result of raising this dimension to the exponent.

-	 */

-	public final Dimension pow(int n) {

-		return new DimensionImpl(this.pseudoUnit.pow(n));

-	}

-

-	/**

-	 * Returns the given root of this dimension.

-	 * 

-	 * @param n

-	 *            the root's order.

-	 * @return the result of taking the given root of this dimension.

-	 * @throws ArithmeticException

-	 *             if <code>n == 0</code>.

-	 */

-	public final Dimension root(int n) {

-		return new DimensionImpl(this.pseudoUnit.root(n));

-	}

-

-	/**

-	 * Returns the fundamental dimensions and their exponent whose product is

-	 * this dimension or <code>null</code> if this dimension is a fundamental

-	 * dimension.

-	 * 

-	 * @return the mapping between the fundamental dimensions and their

-	 *         exponent.

-	 */

-	public Map<Dimension, Integer> getProductDimensions() {

-		if (pseudoUnit == null)

-			return null;

-		@SuppressWarnings("unchecked")

-		Map<? extends Unit<?>, Integer> pseudoUnits = (Map<? extends Unit<?>, Integer>) pseudoUnit

-				.getBaseUnits();

-		Map<Dimension, Integer> fundamentalDimensions = new HashMap<Dimension, Integer>();

-		for (Entry<? extends Unit<?>, Integer> entry : pseudoUnits.entrySet()) {

-			fundamentalDimensions.put(new DimensionImpl(entry.getKey()),

-					entry.getValue());

-		}

-		return fundamentalDimensions;

-	}

-

-	/**

-	 * Returns the representation of this dimension.

-	 * 

-	 * @return the representation of this dimension.

-	 */

-	@Override

-	public String toString() {

-		return String.valueOf(pseudoUnit);

-	}

-

-	/**

-	 * Indicates if the specified dimension is equals to the one specified.

-	 * 

-	 * @param that

-	 *            the object to compare to.

-	 * @return <code>true</code> if this dimension is equals to that dimension;

-	 *         <code>false</code> otherwise.

-	 */

-	@Override

-	public boolean equals(Object that) {

-		if (this == that)

-			return true;

-		return (that instanceof DimensionImpl)

-				&& pseudoUnit.equals(((DimensionImpl) that).pseudoUnit);

-	}

-

-	/**

-	 * Returns the hash code for this dimension.

-	 * 

-	 * @return this dimension hashcode value.

-	 */

-	@Override

-	public int hashCode() {

-		return pseudoUnit.hashCode();

-	}

-

-	/**

-	 * Sets the model used to determinate the units dimensions.

-	 * 

-	 * @param model

-	 *            the new model to be used when calculating unit dimensions.

-	 */

-	public static void setModel(Model model) {

-		DimensionImpl.model = model;

-	}

-

-	/**

-	 * Returns the model used to determinate the units dimensions (default

-	 * {@link Model#STANDARD STANDARD}).

-	 * 

-	 * @return the model used when calculating unit dimensions.

-	 */

-	public static Model getModel() {

-		return DimensionImpl.model;

-	}

-	

-	/**

-	 * Creates a new dimension associated to the specified symbol.

-	 * 

-	 * @param symbol

-	 *            the associated symbol.

-	 */

-	public static Dimension valueOf(char symbol) {

-		return new DimensionImpl(symbol);

-	}

-

-	/**

-	 * This interface represents the mapping between {@linkplain BaseUnit base

-	 * units} and {@linkplain DimensionImpl dimensions}. Custom models may allow

-	 * conversions not possible using the {@linkplain #STANDARD standard} model.

-	 * For example:[code] public static void main(String[] args) {

-	 * Dimension.Model relativistic = new Dimension.Model() { RationalConverter

-	 * metreToSecond = new RationalConverter(BigInteger.ONE,

-	 * BigInteger.valueOf(299792458)); // 1/c

-	 * 

-	 * public Dimension getDimension(BaseUnit unit) { if (unit.equals(METRE))

-	 * return Dimension.TIME; return

-	 * Dimension.Model.STANDARD.getDimension(unit); }

-	 * 

-	 * public UnitConverter getTransform(BaseUnit unit) { if

-	 * (unit.equals(METRE)) return metreToSecond; return

-	 * Dimension.Model.STANDARD.getTransform(unit); }};

-	 * Dimension.setModel(relativistic);

-	 * 

-	 * // Converts 1.0 GeV (energy) to kg (mass).

-	 * System.out.println(Unit.valueOf

-	 * ("GeV").getConverterTo(KILOGRAM).convert(1.0)); }

-	 * 

-	 * > 1.7826617302520883E-27[/code]

-	 */

-	public interface Model {

-

-		/**

-		 * Holds the standard model (default).

-		 */

-		public Model STANDARD = new Model() {

-

-			public Dimension getDimension(Unit<?> unit) {

-				if (unit.equals(SI.METRE))

-					return DimensionImpl.LENGTH;

-				if (unit.equals(SI.KILOGRAM))

-					return DimensionImpl.MASS;

-				if (unit.equals(SI.KELVIN))

-					return DimensionImpl.TEMPERATURE;

-				if (unit.equals(SI.SECOND))

-					return DimensionImpl.TIME;

-				if (unit.equals(SI.AMPERE))

-					return DimensionImpl.ELECTRIC_CURRENT;

-				if (unit.equals(SI.MOLE))

-					return DimensionImpl.AMOUNT_OF_SUBSTANCE;

-				if (unit.equals(SI.CANDELA))

-					return DimensionImpl.LUMINOUS_INTENSITY;

-				return new DimensionImpl(new BaseUnit<Dimensionless>(

-						"[" + unit.getSymbol() + "]")); //$NON-NLS-1$ //$NON-NLS-2$

-			}

-

-			public UnitConverter getTransform(Unit<?> unit) {

-				return AbstractConverter.IDENTITY;

-			}

-		};

-

-		/**

-		 * Returns the dimension of the specified base unit (a dimension

-		 * particular to the base unit if the base unit is not recognized).

-		 * 

-		 * @param unit

-		 *            the base unit for which the dimension is returned.

-		 * @return the dimension of the specified unit.

-		 */

-		Dimension getDimension(Unit<?> unit);

-

-		/**

-		 * Returns the normalization transform of the specified base unit (

-		 * {@link UnitConverter#IDENTITY IDENTITY} if the base unit is not

-		 * recognized).

-		 * 

-		 * @param unit

-		 *            the base unit for which the transform is returned.

-		 * @return the normalization transform.

-		 */

-		UnitConverter getTransform(Unit<?> unit);

-	}

-

-	@Override

-	public Map<? extends Dimension, Integer> getBaseDimensions() {

-		// TODO Auto-generated method stub

-		return null;

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/DimensionalModel.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/DimensionalModel.java
deleted file mode 100644
index 8a8939d..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/DimensionalModel.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl;

-

-import javax.measure.Dimension;

-import javax.measure.UnitConverter;

-

-import org.eclipse.uomo.units.AbstractConverter;

-

-import java.util.Map;

-

-/**

- * <p>

- * This class represents the physical model used for dimensional analysis.

- * </p>

- *

- * <p>

- * In principle, dimensions of physical quantities could be defined as "fundamental" (such as momentum or energy or electric current) making such

- * quantities uncommensurate (not comparable). Modern physics has cast doubt on the very existence of incompatible fundamental dimensions of physical

- * quantities. For example, most physicists do not recognize temperature, {@link QuantityDimension#TEMPERATURE Θ}, as a fundamental dimension since it

- * essentially expresses the energy per particle per degree of freedom, which can be expressed in terms of energy (or mass, length, and time). To

- * support, such model the method {@link #getConverter} may returns a non-null value for distinct dimensions.

- * </p>

- * 

- * <p>

- * The default model is {@link StandardModel Standard}. Applications may use one of the predefined model or create their own. <code>

- *     DimensionalModel relativistic = new DimensionalModel() {

- *         public Dimension getFundamentalDimension(Dimension dimension) {

- *             if (dimension.equals(QuantityDimension.LENGTH)) return QuantityDimension.TIME; // Consider length derived from time.

- *                 return super.getDimension(dimension); // Returns product of fundamental dimension.

- *             }

- *             public UnitConverter getDimensionalTransform(Dimension dimension) {

- *                 if (dimension.equals(QuantityDimension.LENGTH)) return new RationalConverter(1, 299792458); // Converter (1/C) from LENGTH SI unit (m) to TIME SI unit (s).

- *                 return super.getDimensionalTransform(dimension);

- *             }

- *     };

- *     try {

- *         DimensionalModel.setCurrent(relativistic); // Current thread use the relativistic model.

- *         Units.KILOGRAM.getConverterToAny(Units.JOULE); // Allowed.

- *         ...

- *     } finally {

- *        cleanup();

- *     }

- *     </code>

- * </p>

- * 

- * @see <a href="http://en.wikipedia.org/wiki/Dimensional_analysis">Wikipedia: Dimensional Analysis</a>

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @version 0.5.5, $Date: 2015-07-25 $

- */

-public abstract class DimensionalModel {

-

-  /**

-   * Holds the current model.

-   */

-  private static DimensionalModel currentModel = new StandardModel();

-

-  /**

-   * Returns the current model (by default an instance of {@link StandardModel}).

-   *

-   * @return the current dimensional model.

-   */

-  public static DimensionalModel current() {

-    return currentModel;

-  }

-

-  /**

-   * Sets the current dimensional model

-   *

-   * @param model

-   *          the new current model.

-   * @see #current

-   */

-  protected static void setCurrent(DimensionalModel model) {

-    currentModel = model;

-  }

-

-  /**

-   * DefaultQuantityFactory constructor (allows for derivation).

-   */

-  protected DimensionalModel() {

-  }

-

-  /**

-   * Returns the fundamental dimension for the one specified. If the specified dimension is a dimensional product, the dimensional product of its

-   * fundamental dimensions is returned. Physical quantities are considered commensurate only if their fundamental dimensions are equals using the

-   * current physics model.

-   *

-   * @param dimension

-   *          the dimension for which the fundamental dimension is returned.

-   * @return <code>this</code> or a rational product of fundamental dimension.

-   */

-  public Dimension getFundamentalDimension(Dimension dimension) {

-    Map<? extends Dimension, Integer> dimensions = dimension.getBaseDimensions();

-    if (dimensions == null)

-      return dimension; // Fundamental dimension.

-    // Dimensional Product.

-    Dimension fundamentalProduct = DimensionImpl.NONE;

-    for (Map.Entry<? extends Dimension, Integer> e : dimensions.entrySet()) {

-      fundamentalProduct = fundamentalProduct.multiply(this.getFundamentalDimension(e.getKey())).pow(e.getValue());

-    }

-    return fundamentalProduct;

-  }

-

-  /**

-   * Returns the dimensional transform of the specified dimension. If the specified dimension is a fundamental dimension or a product of fundamental

-   * dimensions the identity converter is returned; otherwise the converter from the system unit (SI) of the specified dimension to the system unit

-   * (SI) of its fundamental dimension is returned.

-   *

-   * @param dimension

-   *          the dimension for which the dimensional transform is returned.

-   * @return the dimensional transform (identity for fundamental dimensions).

-   */

-  public UnitConverter getDimensionalTransform(Dimension dimension) {

-    Map<? extends Dimension, Integer> dimensions = dimension.getBaseDimensions();

-    if (dimensions == null)

-      return AbstractConverter.IDENTITY; // Fundamental dimension.

-    // Dimensional Product.

-    UnitConverter toFundamental = AbstractConverter.IDENTITY;

-    for (Map.Entry<? extends Dimension, Integer> e : dimensions.entrySet()) {

-    	UnitConverter cvtr = this.getDimensionalTransform(e.getKey());

-      if (!(cvtr.isLinear()))

-        throw new UnsupportedOperationException("Non-linear dimensional transform");

-      int pow = e.getValue();

-      if (pow < 0) { // Negative power.

-        pow = -pow;

-        cvtr = cvtr.inverse();

-      }

-      for (int j = 0; j < pow; j++) {

-        toFundamental = toFundamental.concatenate(cvtr);

-      }

-    }

-    return toFundamental;

-  }

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/DoubleQuantity.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/DoubleQuantity.java
deleted file mode 100644
index d3a5a6f..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/DoubleQuantity.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl;

-

-import java.io.Serializable;

-import java.math.BigDecimal;

-import java.math.MathContext;

-import java.util.Objects;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-

-import org.eclipse.uomo.units.AbstractConverter;

-import org.eclipse.uomo.units.AbstractQuantity;

-import org.eclipse.uomo.units.ComparableQuantity;

-

-/**

- * An amount of quantity, implementation of {@link ComparableQuantity} that uses {@link Double} as implementation of {@link Number}, this object is

- * immutable. Note: all operations which involves {@link Number}, this implementation will convert to {@link Double}.

- *

- * @param <Q>

- *          The type of the quantity.

- * @param <Q>

- *          The type of the quantity.

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @author Otavio de Santana

- * @version 0.4, $Date: 2017-05-28 $

- * @see AbstractQuantity

- * @see Quantity

- * @see ComparableQuantity

- * @since 1.0

- */

-@SuppressWarnings({ "rawtypes", "unchecked" })

-final class DoubleQuantity<Q extends Quantity<Q>> extends AbstractQuantity<Q> implements Serializable {

-

-  private static final long serialVersionUID = 8660843078156312278L;

-

-  final double value;

-

-  public DoubleQuantity(double value, Unit<Q> unit) {

-    super(unit);

-    this.value = value;

-  }

-

-  @Override

-  public Double getValue() {

-    return value;

-  }

-

-  @Override

-  public double doubleValue(Unit<Q> unit) {

-    return (super.getUnit().equals(unit)) ? value : super.getUnit().getConverterTo(unit).convert(value);

-  }

-

-  @Override

-  public BigDecimal decimalValue(Unit<Q> unit, MathContext ctx) throws ArithmeticException {

-    BigDecimal decimal = BigDecimal.valueOf(value); // TODO check value if

-    // it is a BD, otherwise

-    // use different

-    // converter

-    return (super.getUnit().equals(unit)) ? decimal : ((AbstractConverter) super.getUnit().getConverterTo(unit)).convert(decimal, ctx);

-  }

-

-  @Override

-  public long longValue(Unit<Q> unit) {

-    double result = doubleValue(unit);

-    if ((result < Long.MIN_VALUE) || (result > Long.MAX_VALUE)) {

-      throw new ArithmeticException("Overflow (" + result + ")");

-    }

-    return (long) result;

-  }

-

-  @Override

-  public ComparableQuantity<Q> add(Quantity<Q> that) {

-    if (getUnit().equals(that.getUnit())) {

-      return Quantities.getQuantity(value + that.getValue().doubleValue(), getUnit());

-    }

-    Quantity<Q> converted = that.to(getUnit());

-    return Quantities.getQuantity(value + converted.getValue().doubleValue(), getUnit());

-  }

-

-  @Override

-  public ComparableQuantity<Q> subtract(Quantity<Q> that) {

-    if (getUnit().equals(that.getUnit())) {

-      return Quantities.getQuantity(value - that.getValue().doubleValue(), getUnit());

-    }

-    Quantity<Q> converted = that.to(getUnit());

-    return Quantities.getQuantity(value - converted.getValue().doubleValue(), getUnit());

-  }

-

-  @Override

-  public ComparableQuantity<?> multiply(Quantity<?> that) {

-    return new DoubleQuantity(value * that.getValue().doubleValue(), getUnit().multiply(that.getUnit()));

-  }

-

-  @Override

-  public ComparableQuantity<Q> multiply(Number that) {

-    return Quantities.getQuantity(value * that.doubleValue(), getUnit());

-  }

-

-  @Override

-  public ComparableQuantity<?> divide(Quantity<?> that) {

-    return new DoubleQuantity(value / that.getValue().doubleValue(), getUnit().divide(that.getUnit()));

-  }

-

-  @Override

-  public ComparableQuantity<Q> divide(Number that) {

-    return Quantities.getQuantity(value / that.doubleValue(), getUnit());

-  }

-

-  @Override

-  public AbstractQuantity<Q> inverse() {

-    return (AbstractQuantity<Q>) Quantities.getQuantity(1d / value, getUnit().inverse());

-  }

-

-  @Override

-  public boolean isBig() {

-    return false;

-  }

-

-  @Override

-  public boolean equals(Object obj) {

-    if (this == obj) {

-      return true;

-    }

-    if (obj instanceof Quantity<?>) {

-      Quantity<?> that = (Quantity<?>) obj;

-      return Objects.equals(getUnit(), that.getUnit()) && Equalizer.hasEquality(value, that.getValue());

-    }

-    return false;

-  }

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/FloatQuantity.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/FloatQuantity.java
deleted file mode 100644
index 572101d..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/FloatQuantity.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*

- * Next Generation Units of Measurement Implementation

- * Copyright (c) 2005-2017, Jean-Marie Dautelle, Werner Keil, V2COM.

- *

- * All rights reserved.

- *

- * Redistribution and use in source and binary forms, with or without modification,

- * are permitted provided that the following conditions are met:

- *

- * 1. Redistributions of source code must retain the above copyright notice,

- *    this list of conditions and the following disclaimer.

- *

- * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions

- *    and the following disclaimer in the documentation and/or other materials provided with the distribution.

- *

- * 3. Neither the name of JSR-363, Indriya nor the names of their contributors may be used to endorse or promote products

- *    derived from this software without specific prior written permission.

- *

- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,

- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE

- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;

- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED

- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,

- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

- */

-package tec.units.indriya.quantity;

-

-import java.math.BigDecimal;

-import java.math.MathContext;

-import java.util.Objects;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-

-import tec.units.indriya.AbstractQuantity;

-import tec.units.indriya.ComparableQuantity;

-

-/**

- * An amount of quantity, consisting of a float and a Unit. FloatQuantity objects are immutable.

- * 

- * @see AbstractQuantity

- * @see Quantity

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @author Otavio de Santana

- * @param <Q>

- *          The type of the quantity.

- * @version 0.4, $Date: 2017-05-28 $

- * @since 1.0.7

- */

-final class FloatQuantity<Q extends Quantity<Q>> extends AbstractQuantity<Q> {

-

-  /**

-     * 

-     */

-  private static final long serialVersionUID = 5992028803791009345L;

-

-  final float value;

-

-  public FloatQuantity(float value, Unit<Q> unit) {

-    super(unit);

-    this.value = value;

-  }

-

-  @Override

-  public Float getValue() {

-    return value;

-  }

-

-  // Implements AbstractQuantity

-  public double doubleValue(Unit<Q> unit) {

-    return (super.getUnit().equals(unit)) ? value : super.getUnit().getConverterTo(unit).convert(value);

-  }

-

-  public long longValue(Unit<Q> unit) {

-    double result = doubleValue(unit);

-    if ((result < Long.MIN_VALUE) || (result > Long.MAX_VALUE)) {

-      throw new ArithmeticException("Overflow (" + result + ")");

-    }

-    return (long) result;

-  }

-

-  public Quantity<Q> add(ComparableQuantity<Q> that) {

-    final Quantity<Q> converted = that.to(getUnit());

-    return NumberQuantity.of(value + converted.getValue().floatValue(), getUnit());

-  }

-

-  public ComparableQuantity<Q> subtract(ComparableQuantity<Q> that) {

-    final Quantity<Q> converted = that.to(getUnit());

-    return NumberQuantity.of(value - converted.getValue().floatValue(), getUnit());

-  }

-

-  @SuppressWarnings({ "rawtypes", "unchecked" })

-  public ComparableQuantity<?> multiply(ComparableQuantity<?> that) {

-    return new FloatQuantity(value * that.getValue().floatValue(), getUnit().multiply(that.getUnit()));

-  }

-

-  public ComparableQuantity<Q> multiply(Number that) {

-    return NumberQuantity.of(value * that.floatValue(), getUnit().multiply(that.doubleValue()));

-  }

-

-  @SuppressWarnings({ "rawtypes", "unchecked" })

-  public ComparableQuantity<?> divide(ComparableQuantity<?> that) {

-    return new FloatQuantity(value / that.getValue().floatValue(), getUnit().divide(that.getUnit()));

-  }

-

-  @SuppressWarnings("unchecked")

-  public ComparableQuantity<Q> inverse() {

-    return (AbstractQuantity<Q>) NumberQuantity.of(1f / value, getUnit().inverse());

-  }

-

-  public ComparableQuantity<Q> divide(Number that) {

-    return NumberQuantity.of(value / that.floatValue(), getUnit());

-  }

-

-  /*

-   * (non-Javadoc)

-   * 

-   * @see AbstractQuantity#equals(java.lang.Object)

-   */

-  @Override

-  public boolean equals(Object obj) {

-    if (obj == null)

-      return false;

-    if (obj == this)

-      return true;

-    if (obj instanceof Quantity<?>) {

-      Quantity<?> that = (Quantity<?>) obj;

-      return Objects.equals(getUnit(), that.getUnit()) && Equalizer.hasEquality(value, that.getValue());

-    }

-    return false;

-  }

-

-  @Override

-  public ComparableQuantity<Q> add(Quantity<Q> that) {

-    // TODO Auto-generated method stub

-    return null;

-  }

-

-  @Override

-  public ComparableQuantity<Q> subtract(Quantity<Q> that) {

-    // TODO Auto-generated method stub

-    return null;

-  }

-

-  @Override

-  public ComparableQuantity<?> divide(Quantity<?> that) {

-    // TODO Auto-generated method stub

-    return null;

-  }

-

-  @Override

-  public ComparableQuantity<?> multiply(Quantity<?> multiplier) {

-    // TODO Auto-generated method stub

-    return null;

-  }

-

-  @Override

-  public boolean isBig() {

-    return false;

-  }

-

-  @Override

-  public BigDecimal decimalValue(Unit<Q> unit, MathContext ctx) throws ArithmeticException {

-    return BigDecimal.valueOf(value);

-  }

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/IntegerQuantity.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/IntegerQuantity.java
deleted file mode 100644
index fddf457..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/IntegerQuantity.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*

- * Next Generation Units of Measurement Implementation

- * Copyright (c) 2005-2017, Jean-Marie Dautelle, Werner Keil, V2COM.

- *

- * All rights reserved.

- *

- * Redistribution and use in source and binary forms, with or without modification,

- * are permitted provided that the following conditions are met:

- *

- * 1. Redistributions of source code must retain the above copyright notice,

- *    this list of conditions and the following disclaimer.

- *

- * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions

- *    and the following disclaimer in the documentation and/or other materials provided with the distribution.

- *

- * 3. Neither the name of JSR-363, Indriya nor the names of their contributors may be used to endorse or promote products

- *    derived from this software without specific prior written permission.

- *

- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,

- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE

- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;

- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED

- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,

- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

- */

-package tec.units.indriya.quantity;

-

-import java.math.BigDecimal;

-import java.math.MathContext;

-import java.util.Objects;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-

-import tec.units.indriya.AbstractQuantity;

-import tec.units.indriya.ComparableQuantity;

-

-/**

- * An amount of quantity, consisting of an integer and a Unit. IntegerQuantity objects are immutable.

- * 

- * @see AbstractQuantity

- * @see Quantity

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @author Otavio de Santana

- * @param <Q>

- *          The type of the quantity.

- * @version 0.4, $Date: 2017-05-28 $

- * @since 1.0.7

- */

-final class IntegerQuantity<Q extends Quantity<Q>> extends AbstractQuantity<Q> {

-

-  /**

-     * 

-     */

-  private static final long serialVersionUID = 1405915111744728289L;

-

-  final int value;

-

-  public IntegerQuantity(int value, Unit<Q> unit) {

-    super(unit);

-    this.value = value;

-  }

-

-  @Override

-  public Integer getValue() {

-    return value;

-  }

-

-  public double doubleValue(Unit<Q> unit) {

-    return (super.getUnit().equals(unit)) ? value : super.getUnit().getConverterTo(unit).convert(value);

-  }

-

-  @Override

-  public long longValue(Unit<Q> unit) {

-    double result = doubleValue(unit);

-    if ((result < Long.MIN_VALUE) || (result > Long.MAX_VALUE)) {

-      throw new ArithmeticException("Overflow (" + result + ")");

-    }

-    return (long) result;

-  }

-

-  public ComparableQuantity<Q> add(Quantity<Q> that) {

-    final Quantity<Q> converted = that.to(getUnit());

-    return NumberQuantity.of(value + converted.getValue().intValue(), getUnit());

-  }

-

-  public ComparableQuantity<Q> subtract(Quantity<Q> that) {

-    final Quantity<Q> converted = that.to(getUnit());

-    return NumberQuantity.of(value - converted.getValue().intValue(), getUnit());

-  }

-

-  @SuppressWarnings({ "rawtypes", "unchecked" })

-  public ComparableQuantity<?> multiply(Quantity<?> that) {

-    return new IntegerQuantity(value * that.getValue().intValue(), getUnit().multiply(that.getUnit()));

-  }

-

-  public ComparableQuantity<Q> multiply(Number that) {

-    return NumberQuantity.of(value * that.intValue(), getUnit());

-  }

-

-  public ComparableQuantity<?> divide(Quantity<?> that) {

-    return NumberQuantity.of((double) value / that.getValue().doubleValue(), getUnit().divide(that.getUnit()));

-  }

-

-  @SuppressWarnings("unchecked")

-  public AbstractQuantity<Q> inverse() {

-    return (AbstractQuantity<Q>) NumberQuantity.of(1 / value, getUnit().inverse());

-  }

-

-  public ComparableQuantity<Q> divide(Number that) {

-    return NumberQuantity.of(value / that.doubleValue(), getUnit());

-  }

-

-  /*

-   * (non-Javadoc)

-   * 

-   * @see AbstractQuantity#equals(java.lang.Object)

-   */

-  @Override

-  public boolean equals(Object obj) {

-    if (obj == null)

-      return false;

-    if (obj == this)

-      return true;

-    if (obj instanceof Quantity<?>) {

-      Quantity<?> that = (Quantity<?>) obj;

-      return Objects.equals(getUnit(), that.getUnit()) && Equalizer.hasEquality(value, that.getValue());

-    }

-    return false;

-  }

-

-  @Override

-  public boolean isBig() {

-    return false;

-  }

-

-  @Override

-  public BigDecimal decimalValue(Unit<Q> unit, MathContext ctx) throws ArithmeticException {

-    // TODO Auto-generated method stub

-    return null;

-  }

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/LongQuantity.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/LongQuantity.java
deleted file mode 100644
index 6615ae7..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/LongQuantity.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*

- * Next Generation Units of Measurement Implementation

- * Copyright (c) 2005-2017, Jean-Marie Dautelle, Werner Keil, V2COM.

- *

- * All rights reserved.

- *

- * Redistribution and use in source and binary forms, with or without modification,

- * are permitted provided that the following conditions are met:

- *

- * 1. Redistributions of source code must retain the above copyright notice,

- *    this list of conditions and the following disclaimer.

- *

- * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions

- *    and the following disclaimer in the documentation and/or other materials provided with the distribution.

- *

- * 3. Neither the name of JSR-363, Indriya nor the names of their contributors may be used to endorse or promote products

- *    derived from this software without specific prior written permission.

- *

- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"

- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,

- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE

- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE

- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES

- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;

- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED

- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT

- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,

- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

- */

-package tec.units.indriya.quantity;

-

-import java.math.BigDecimal;

-import java.math.MathContext;

-import java.util.Objects;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-

-import tec.units.indriya.AbstractQuantity;

-import tec.units.indriya.ComparableQuantity;

-

-/**

- * An amount of quantity, consisting of a long and a Unit. LongQuantity objects are immutable.

- * 

- * @see AbstractQuantity

- * @see Quantity

- * @author <a href="mailto:werner@uom.technology">Werner Keil</a>

- * @param <Q>

- *          The type of the quantity.

- * @version 0.3, $Date: 2017-05-28 $

- * @since 1.0.7

- */

-final class LongQuantity<Q extends Quantity<Q>> extends AbstractQuantity<Q> {

-

-  /**

-     * 

-     */

-  private static final long serialVersionUID = 3092808554937634365L;

-

-  final long value;

-

-  public LongQuantity(long value, Unit<Q> unit) {

-    super(unit);

-    this.value = value;

-  }

-

-  @Override

-  public Long getValue() {

-    return value;

-  }

-

-  public double doubleValue(Unit<Q> unit) {

-    return (super.getUnit().equals(unit)) ? value : super.getUnit().getConverterTo(unit).convert(value);

-  }

-

-  @Override

-  public long longValue(Unit<Q> unit) {

-    double result = doubleValue(unit);

-    if ((result < Long.MIN_VALUE) || (result > Long.MAX_VALUE)) {

-      throw new ArithmeticException("Overflow (" + result + ")");

-    }

-    return (long) result;

-  }

-

-  public ComparableQuantity<Q> add(Quantity<Q> that) {

-    final Quantity<Q> converted = that.to(getUnit());

-    return NumberQuantity.of(value + converted.getValue().longValue(), getUnit());

-  }

-

-  public ComparableQuantity<Q> subtract(Quantity<Q> that) {

-    final Quantity<Q> converted = that.to(getUnit());

-    return NumberQuantity.of(value - converted.getValue().longValue(), getUnit());

-  }

-

-  @SuppressWarnings({ "rawtypes", "unchecked" })

-  public ComparableQuantity<?> multiply(Quantity<?> that) {

-    return new LongQuantity(value * that.getValue().longValue(), getUnit());

-  }

-

-  public ComparableQuantity<Q> multiply(Number that) {

-    return NumberQuantity.of(value * that.longValue(), getUnit());

-  }

-

-  public ComparableQuantity<?> divide(Quantity<?> that) {

-    return NumberQuantity.of((double) value / that.getValue().doubleValue(), getUnit().divide(that.getUnit()));

-  }

-

-  @SuppressWarnings("unchecked")

-  public AbstractQuantity<Q> inverse() {

-    return (AbstractQuantity<Q>) NumberQuantity.of(1 / value, getUnit().inverse());

-  }

-

-  public ComparableQuantity<Q> divide(Number that) {

-    return NumberQuantity.of(value / that.doubleValue(), getUnit());

-  }

-

-  /*

-   * (non-Javadoc)

-   * 

-   * @see AbstractQuantity#equals(java.lang.Object)

-   */

-  @Override

-  public boolean equals(Object obj) {

-    if (obj == null)

-      return false;

-    if (obj == this)

-      return true;

-    if (obj instanceof Quantity<?>) {

-      Quantity<?> that = (Quantity<?>) obj;

-      return Objects.equals(getUnit(), that.getUnit()) && Equalizer.hasEquality(value, that.getValue());

-    }

-    return false;

-  }

-

-  @Override

-  public boolean isBig() {

-    return false;

-  }

-

-  @Override

-  public BigDecimal decimalValue(Unit<Q> unit, MathContext ctx) {

-    return BigDecimal.valueOf(doubleValue(unit));

-  }

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/NaturalOrder.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/NaturalOrder.java
deleted file mode 100644
index ba31676..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/NaturalOrder.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl;

-

-import java.util.Comparator;

-

-import javax.measure.Quantity;

-

-/**

- * Comparator to sort by natural order, looking both the unit and the value.

- * 

- * @author <a href="mailto:werner@uom.technology">Werner Keil</a>

- * @author <a href="mailto:otaviopolianasantana@gmail.com">Otavio Santana</a>

- * @version 1.0.1

- * 

- * @return <b>Given:</b>

- *         <p>

- *         Quantity&lt;Time&gt; day = Quantities.getQuantity(1, Units.DAY);

- *         </p>

- *         <p>

- *         Quantity&lt;Time&gt; hours = Quantities.getQuantity(18, Units.HOUR);

- *         </p>

- *         <p>

- *         Quantity&lt;Time&gt; minutes = Quantities.getQuantity(15, Units.HOUR);

- *         </p>

- *         <p>

- *         Quantity&lt;Time&gt; seconds = Quantities.getQuantity(100, Units.HOUR);

- *         </p>

- *         will return: seconds, minutes, hours, day

- * @since 0.7

- */

-public class NaturalOrder<T extends Quantity<T>> implements Comparator<Quantity<T>> {

-

-  @Override

-  public int compare(Quantity<T> q1, Quantity<T> q2) {

-    if (q1.getUnit().equals(q2.getUnit())) {

-      return Double.compare(q1.getValue().doubleValue(), q2.getValue().doubleValue());

-    }

-    return Double.compare(q1.getValue().doubleValue(), q2.to(q1.getUnit()).getValue().doubleValue());

-  }

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/NumberQuantity.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/NumberQuantity.java
deleted file mode 100644
index 411a6c2..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/NumberQuantity.java
+++ /dev/null
@@ -1,273 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl;

-

-import java.util.Objects;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-import javax.measure.UnconvertibleException;

-import javax.measure.UnitConverter;

-

-import org.eclipse.uomo.units.AbstractQuantity;

-import org.eclipse.uomo.units.impl.format.QuantityFormat;

-

-/**

- * An amount of quantity, consisting of a Number and a Unit. NumberQuantity objects are immutable.

- * 

- * @see AbstractQuantity

- * @see Quantity

- * @author <a href="mailto:werner@uom.technology">Werner Keil</a>

- * @param <Q>

- *          The type of the quantity.

- * @version 1.0.2, $Date: 2017-05-28 $

- * @since 0.7

- */

-public class NumberQuantity<Q extends Quantity<Q>> extends AbstractQuantity<Q> {

-

-  /**

-     * 

-     */

-  // private static final long serialVersionUID = 7312161895652321241L;

-

-  private final Number value;

-

-  /**

-   * Indicates if this quantity is exact.

-   */

-  private final boolean isExact;

-

-  /**

-   * Holds the exact value (when exact) stated in this quantity's unit.

-   */

-  // private long exactValue;

-

-  /**

-   * Holds the minimum value stated in this quantity's unit. For inexact measures: minimum < maximum

-   */

-  // private double minimum;

-

-  /**

-   * Holds the maximum value stated in this quantity's unit. For inexact measures: maximum > minimum

-   */

-  // private double maximum;

-

-  protected NumberQuantity(Number number, Unit<Q> unit) {

-    super(unit);

-    value = number;

-    isExact = false;

-  }

-

-  /*

-   * (non-Javadoc)

-   * 

-   * @see AbstractQuantity#equals(java.lang.Object)

-   */

-  @Override

-  public boolean equals(Object obj) {

-    if (obj == null)

-      return false;

-    if (obj == this)

-      return true;

-    if (obj instanceof Quantity<?>) {

-      Quantity<?> that = (Quantity<?>) obj;

-      return Objects.equals(getUnit(), that.getUnit()) && Equalizer.hasEquality(value, that.getValue());

-    }

-    return false;

-  }

-

-  /*

-   * (non-Javadoc)

-   * 

-   * @see AbstractQuantity#doubleValue(javax.measure.Unit)

-   */

-  @Override

-  public double doubleValue(Unit<Q> unit) {

-    Unit<Q> myUnit = getUnit();

-    try {

-      UnitConverter converter = myUnit.getConverterTo(unit);

-      return converter.convert(getValue().doubleValue());

-    } catch (UnconvertibleException e) {

-      throw e;

-    }

-  }

-

-  protected final int intValue(Unit<Q> unit) throws ArithmeticException {

-    long longValue = longValue(unit);

-    if ((longValue < Integer.MIN_VALUE) || (longValue > Integer.MAX_VALUE)) {

-      throw new ArithmeticException("Cannot convert " + longValue + " to int (overflow)");

-    }

-    return (int) longValue;

-  }

-

-  /*

-   * (non-Javadoc)

-   * 

-   * @see javax.measure.Quantity#getValue()

-   */

-  public Number getValue() {

-    return value;

-  }

-

-  /**

-   * Indicates if this measured quantity is exact. An exact quantity is guaranteed exact only when stated in this quantity's unit (e.g.

-   * <code>this.longValue()</code>); stating the quantity in any other unit may introduce conversion errors.

-   * 

-   * @return <code>true</code> if this quantity is exact; <code>false</code> otherwise.

-   */

-  public boolean isExact() {

-    return isExact;

-  }

-

-  @SuppressWarnings({ "rawtypes", "unchecked" })

-  protected Quantity<Q> add(AbstractQuantity<Q> that) {

-    final Quantity<Q> thatToUnit = that.to(getUnit());

-    return new NumberQuantity(this.getValue().doubleValue() + thatToUnit.getValue().doubleValue(), getUnit());

-  }

-

-  public String toString() {

-    return String.valueOf(getValue()) + " " + String.valueOf(getUnit());

-  }

-

-  @SuppressWarnings({ "rawtypes", "unchecked" })

-  public Quantity<?> multiply(Quantity<?> that) {

-    final Unit<?> unit = getUnit().multiply(that.getUnit());

-    return new NumberQuantity((getValue().doubleValue() * that.getValue().doubleValue()), unit);

-  }

-

-  public Quantity<Q> multiply(Number that) {

-    return (AbstractQuantity<Q>) NumberQuantity.of((getValue().doubleValue() * that.doubleValue()), getUnit());

-  }

-

-  @SuppressWarnings({ "rawtypes", "unchecked" })

-  public Quantity<Q> divide(Quantity<?> that) {

-    final Unit<?> unit = getUnit().divide(that.getUnit());

-    return new NumberQuantity((getValue().doubleValue() / that.getValue().doubleValue()), unit);

-  }

-

-  public Quantity<Q> divide(Number that) {

-    return NumberQuantity.of(getValue().doubleValue() / that.doubleValue(), getUnit());

-  }

-

-  @SuppressWarnings("unchecked")

-  public Quantity<Q> inverse() {

-    return (AbstractQuantity<Q>) NumberQuantity.of(1d / value.doubleValue(), getUnit().inverse());

-  }

-

-  // public Quantity<Q> inverse() {

-  // @SuppressWarnings({ "rawtypes", "unchecked" })

-  // final Quantity<Q> m = new NumberQuantity(1d / getValue().doubleValue(),

-  // getUnit().inverse());

-  // return m;

-  // }

-

-  @SuppressWarnings({ "rawtypes", "unchecked" })

-  public Quantity<Q> subtract(Quantity<Q> that) {

-    final Quantity<Q> thatToUnit = (Quantity<Q>) that.to(getUnit());

-    return new NumberQuantity(this.getValue().doubleValue() - thatToUnit.getValue().doubleValue(), getUnit());

-  }

-

-  @SuppressWarnings({ "rawtypes", "unchecked" })

-  public Quantity<Q> add(Quantity<Q> that) {

-    final Quantity<Q> thatToUnit = (Quantity<Q>) that.to(getUnit());

-    return new NumberQuantity(this.getValue().doubleValue() + thatToUnit.getValue().doubleValue(), getUnit());

-  }

-

-  /**

-   * Returns the scalar quantity for the specified <code>long</code> stated in the specified unit.

-   *

-   * @param longValue

-   *          the quantity value.

-   * @param unit

-   *          the measurement unit.

-   * @return the corresponding <code>int</code> quantity.

-   */

-  public static <Q extends Quantity<Q>> AbstractQuantity<Q> of(long longValue, Unit<Q> unit) {

-    return new LongQuantity<Q>(longValue, unit);

-  }

-

-  /**

-   * Returns the scalar quantity for the specified <code>int</code> stated in the specified unit.

-   *

-   * @param intValue

-   *          the quantity value.

-   * @param unit

-   *          the measurement unit.

-   * @return the corresponding <code>int</code> quantity.

-   */

-  public static <Q extends Quantity<Q>> AbstractQuantity<Q> of(int intValue, Unit<Q> unit) {

-    return new IntegerQuantity<Q>(intValue, unit);

-  }

-

-  /**

-   * Returns the scalar quantity for the specified <code>short</code> stated in the specified unit.

-   *

-   * @param value

-   *          the quantity value.

-   * @param unit

-   *          the measurement unit.

-   * @return the corresponding <code>short</code> quantity.

-   */

-  public static <Q extends Quantity<Q>> AbstractQuantity<Q> of(short value, Unit<Q> unit) {

-    return new ShortQuantity<Q>(value, unit);

-  }

-

-  /**

-   * Returns the scalar quantity for the specified <code>float</code> stated in the specified unit.

-   *

-   * @param floatValue

-   *          the measurement value.

-   * @param unit

-   *          the measurement unit.

-   * @return the corresponding <code>float</code> quantity.

-   */

-  public static <Q extends Quantity<Q>> AbstractQuantity<Q> of(float floatValue, Unit<Q> unit) {

-    return new FloatQuantity<Q>(floatValue, unit);

-  }

-

-  /**

-   * Returns the scalar quantity for the specified <code>double</code> stated in the specified unit.

-   *

-   * @param doubleValue

-   *          the measurement value.

-   * @param unit

-   *          the measurement unit.

-   * @return the corresponding <code>double</code> quantity.

-   */

-  public static <Q extends Quantity<Q>> AbstractQuantity<Q> of(double doubleValue, Unit<Q> unit) {

-    return new DoubleQuantity<Q>(doubleValue, unit);

-  }

-

-  /**

-   * Returns the decimal quantity of unknown type corresponding to the specified representation. This method can be used to parse dimensionless

-   * quantities.<br>

-   * <code>

-   *     Quantity&lt;Dimensionless&gt; proportion = NumberQuantity.parse("0.234").asType(Dimensionless.class);

-   * </code>

-   *

-   * <p>

-   * Note: This method handles only {@link org.eclipse.uomo.units.SimpleUnitFormat.UnitFormat#getStandard standard} unit format.

-   * </p>

-   *

-   * @param csq

-   *          the decimal value and its unit (if any) separated by space(s).

-   * @return <code>QuantityFormat.getInstance().parse(csq)</code>

-   */

-  public static Quantity<?> parse(CharSequence csq) {

-    return QuantityFormat.getInstance().parse(csq);

-  }

-

-@Override

-protected boolean isBig() {

-	// TODO Auto-generated method stub

-	return false;

-}

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/ProductUnit.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/ProductUnit.java
deleted file mode 100644
index f19d812..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/ProductUnit.java
+++ /dev/null
@@ -1,546 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl;

-

-import java.io.Serializable;

-import java.util.HashMap;

-import java.util.Map;

-

-import org.eclipse.uomo.units.AbstractConverter;

-import org.eclipse.uomo.units.AbstractUnit;

-import javax.measure.Quantity;

-import javax.measure.Dimension;

-import javax.measure.IncommensurableException;

-import javax.measure.UnconvertibleException;

-import javax.measure.Unit;

-import javax.measure.UnitConverter;

-

-/**

- * <p>  This class represents units formed by the product of rational powers of

- *      existing units.</p>

- *

- * <p> This class maintains the canonical form of this product (simplest form

- *     after factorization). For example: <code>METRE.pow(2).divide(METRE)</code>

- *     returns <code>METRE</code>.</p>

- *

- * @param <Q> The type of the quantity measured by this unit.

- *

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @version 1.3 ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $

- * @see AbstractUnit#multiply(AbstractUnit)

- * @see AbstractUnit#divide(AbstractUnit)

- * @see AbstractUnit#pow(int)

- * @see AbstractUnit#root(int)

- */

-public final class ProductUnit<Q extends Quantity<Q>> extends AbstractUnit<Q> implements Unit<Q> {

-

-    /**

-	 * For cross-version compatibility.

-	 */

-	private static final long serialVersionUID = -736056598162783537L;

-

-	/**

-     * Holds the units composing this product unit.

-     */

-    private final Element[] elements;

-

-    /**

-     * Holds the hashcode (optimization).

-     */

-    private int hashCode;

-

-    /**

-     * Default constructor (used solely to create <code>ONE</code> instance).

-     */

-    public ProductUnit() {

-        elements = new Element[0];

-    }

-

-    /**

-     * Copy constructor (allows for parameterization of product units).

-     *

-     * @param productUnit the product unit source.

-     * @throws ClassCastException if the specified unit is not a product unit.

-     */

-    public ProductUnit(Unit<?> productUnit) {

-        this.elements = ((ProductUnit<?>) productUnit).elements;

-    }

-

-    /**

-     * Product unit constructor.

-     *

-     * @param elements the product elements.

-     */

-    private ProductUnit(Element[] elements) {

-        this.elements = elements;

-    }

-

-    /**

-     * Returns the unit defined from the product of the specified elements.

-     *

-     * @param leftElems left multiplicand elements.

-     * @param rightElems right multiplicand elements.

-     * @return the corresponding unit.

-     */

-    @SuppressWarnings({ "unchecked", "rawtypes" })

-    private static Unit<?> getInstance(Element[] leftElems,

-            Element[] rightElems) {

-

-        // Merges left elements with right elements.

-        Element[] result = new Element[leftElems.length + rightElems.length];

-        int resultIndex = 0;

-        for (int i = 0; i < leftElems.length; i++) {

-            Unit<?> unit = leftElems[i].unit;

-            int p1 = leftElems[i].pow;

-            int r1 = leftElems[i].root;

-            int p2 = 0;

-            int r2 = 1;

-            for (int j = 0; j < rightElems.length; j++) {

-                if (unit.equals(rightElems[j].unit)) {

-                    p2 = rightElems[j].pow;

-                    r2 = rightElems[j].root;

-                    break; // No duplicate.

-                }

-            }

-            int pow = (p1 * r2) + (p2 * r1);

-            int root = r1 * r2;

-            if (pow != 0) {

-                int gcd = gcd(Math.abs(pow), root);

-                result[resultIndex++] = new Element(unit, pow / gcd, root / gcd);

-            }

-        }

-

-        // Appends remaining right elements not merged.

-        for (int i = 0; i < rightElems.length; i++) {

-            AbstractUnit<?> unit = (AbstractUnit<?>) rightElems[i].unit;

-            boolean hasBeenMerged = false;

-            for (int j = 0; j < leftElems.length; j++) {

-                if (unit.equals(leftElems[j].unit)) {

-                    hasBeenMerged = true;

-                    break;

-                }

-            }

-            if (!hasBeenMerged)

-                result[resultIndex++] = rightElems[i];

-        }

-

-        // Returns or creates instance.

-        if (resultIndex == 0)

-            return (Unit<?>) AbstractUnit.ONE;

-        else if ((resultIndex == 1) && (result[0].pow == result[0].root))

-            return (Unit<? extends Measure>) result[0].unit;

-        else {

-            Element[] elems = new Element[resultIndex];

-            for (int i = 0; i < resultIndex; i++) {

-                elems[i] = result[i];

-            }

-            return new ProductUnit(elems);

-        }

-    }

-

-    /**

-     * Returns the product of the specified units.

-     *

-     * @param left the left unit operand.

-     * @param right the right unit operand.

-     * @return <code>left * right</code>

-     */

-    public static Unit<?> getProductInstance(Unit<?> left,

-            Unit<?> right) {

-        Element[] leftElems;

-        if (left instanceof ProductUnit<?>)

-            leftElems = ((ProductUnit<?>) left).elements;

-        else

-            leftElems = new Element[]{new Element(left, 1, 1)};

-        Element[] rightElems;

-        if (right instanceof ProductUnit<?>)

-            rightElems = ((ProductUnit<?>) right).elements;

-        else

-            rightElems = new Element[]{new Element(right, 1, 1)};

-        return getInstance(leftElems, rightElems);

-    }

-

-    /**

-     * Returns the quotient of the specified units.

-     *

-     * @param left the dividend unit operand.

-     * @param right the divisor unit operand.

-     * @return <code>dividend / divisor</code>

-     */

-    public static Unit<?> getQuotientInstance(Unit<?> left,

-            Unit<?> right) {

-        Element[] leftElems;

-        if (left instanceof ProductUnit<?>)

-            leftElems = ((ProductUnit<?>) left).elements;

-        else

-            leftElems = new Element[]{new Element(left, 1, 1)};

-        Element[] rightElems;

-        if (right instanceof ProductUnit<?>) {

-            Element[] elems = ((ProductUnit<?>) right).elements;

-            rightElems = new Element[elems.length];

-            for (int i = 0; i < elems.length; i++) {

-                rightElems[i] = new Element(elems[i].unit, -elems[i].pow,

-                        elems[i].root);

-            }

-        } else

-            rightElems = new Element[]{new Element(right, -1, 1)};

-        return (AbstractUnit<?>) getInstance(leftElems, rightElems);

-    }

-

-    /**

-     * Returns the product unit corresponding to the specified root of the

-     * specified unit.

-     *

-     * @param unit the unit.

-     * @param n the root's order (n &gt; 0).

-     * @return <code>unit^(1/nn)</code>

-     * @throws ArithmeticException if <code>n == 0</code>.

-     */

-    public static Unit<?> getRootInstance(Unit<?> unit, int n) {

-        Element[] unitElems;

-        if (unit instanceof ProductUnit<?>) {

-            Element[] elems = ((ProductUnit<?>) unit).elements;

-            unitElems = new Element[elems.length];

-            for (int i = 0; i < elems.length; i++) {

-                int gcd = gcd(Math.abs(elems[i].pow), elems[i].root * n);

-                unitElems[i] = new Element(elems[i].unit, elems[i].pow / gcd,

-                        elems[i].root * n / gcd);

-            }

-        } else

-            unitElems = new Element[]{new Element(unit, 1, n)};

-        return getInstance(unitElems, new Element[0]);

-    }

-

-    /**

-     * Returns the product unit corresponding to this unit raised to the

-     * specified exponent.

-     *

-     * @param unit the unit.

-     * @param nn the exponent (nn &gt; 0).

-     * @return <code>unit^n</code>

-     */

-    static Unit<?> getPowInstance(AbstractUnit<?> unit, int n) {

-        Element[] unitElems;

-        if (unit instanceof ProductUnit<?>) {

-            Element[] elems = ((ProductUnit<?>) unit).elements;

-            unitElems = new Element[elems.length];

-            for (int i = 0; i < elems.length; i++) {

-                int gcd = gcd(Math.abs(elems[i].pow * n), elems[i].root);

-                unitElems[i] = new Element(elems[i].unit, elems[i].pow * n / gcd, elems[i].root / gcd);

-            }

-        } else

-            unitElems = new Element[]{new Element(unit, n, 1)};

-        return getInstance(unitElems, new Element[0]);

-    }

-

-    /**

-     * Returns the number of unit elements in this product.

-     *

-     * @return the number of unit elements.

-     */

-    public int getUnitCount() {

-        return elements.length;

-    }

-

-    /**

-     * Returns the unit element at the specified position.

-     *

-     * @param index the index of the unit element to return.

-     * @return the unit element at the specified position.

-     * @throws IndexOutOfBoundsException if index is out of range

-     *         <code>(index &lt; 0 || index &gt;= getUnitCount())</code>.

-     */

-    @SuppressWarnings("unchecked")

-	public Unit<? extends Measure> getUnit(int index) {

-        return (Unit<? extends Measure>) elements[index].getUnit();

-    }

-

-    /**

-     * Returns the power exponent of the unit element at the specified position.

-     *

-     * @param index the index of the unit element.

-     * @return the unit power exponent at the specified position.

-     * @throws IndexOutOfBoundsException if index is out of range

-     *         <code>(index &lt; 0 || index &gt;= getUnitCount())</code>.

-     */

-    public int getUnitPow(int index) {

-        return elements[index].getPow();

-    }

-

-    /**

-     * Returns the root exponent of the unit element at the specified position.

-     *

-     * @param index the index of the unit element.

-     * @return the unit root exponent at the specified position.

-     * @throws IndexOutOfBoundsException if index is out of range

-     *         <code>(index &lt; 0 || index &gt;= getUnitCount())</code>.

-     */

-    public int getUnitRoot(int index) {

-        return elements[index].getRoot();

-    }

-

-    @Override

-    public Map<Unit<?>, Integer> getProductUnits() {

-        Map<Unit<?>, Integer> units = new HashMap<Unit<?>, Integer>();

-        for (int i = 0; i < getUnitCount(); i++) {

-            units.put(getUnit(i), getUnitPow(i));

-        }

-        return units;

-    }

-

-    @Override

-    public boolean equals(Object that) {

-        if (this == that)

-            return true;

-        if (!(that instanceof ProductUnit<?>))

-            return false;

-        // Two products are equals if they have the same elements

-        // regardless of the elements' order.

-        Element[] elems = ((ProductUnit<?>) that).elements;

-        if (elements.length != elems.length)

-            return false;

-        for (int i = 0; i < elements.length; i++) {

-            boolean unitFound = false;

-            Element e = elements[i];

-            for (int j = 0; j < elems.length; j++) {

-                if (e.unit.equals(elems[j].unit))

-                    if ((e.pow != elems[j].pow) || (e.root != elems[j].root))

-                        return false;

-                    else {

-                        unitFound = true;

-                        break;

-                    }

-            }

-            if (!unitFound)

-                return false;

-        }

-        return true;

-    }

-

-    @Override

-    public int hashCode() {

-        if (this.hashCode != 0)

-            return this.hashCode;

-        int code = 0;

-        for (int i = 0; i < elements.length; i++) {

-            code += elements[i].unit.hashCode() * (elements[i].pow * 3 - elements[i].root * 2);

-        }

-        this.hashCode = code;

-        return code;

-    }

-

-    @Override

-    public final UnitConverter getConverterToMetric() {

-        if (hasOnlyUnscaledMetricUnits()) // Product of standard units is a standard unit itself.

-            return AbstractConverter.IDENTITY;

-        UnitConverter converter = AbstractConverter.IDENTITY;

-        for (int i = 0; i < elements.length; i++) {

-            Element e = elements[i];

-            @SuppressWarnings("rawtypes")

-			UnitConverter cvtr = ((AbstractUnit) e.unit).getConverterToMetric();

-            if (!(cvtr.isLinear()))

-                throw new UnsupportedOperationException(e.unit + " is non-linear, cannot convert");

-            if (e.root != 1)

-                throw new UnsupportedOperationException(e.unit + " holds a base unit with fractional exponent");

-            int pow = e.pow;

-            if (pow < 0) { // Negative power.

-                pow = -pow;

-                cvtr = cvtr.inverse();

-            }

-            for (int j = 0; j < pow; j++) {

-                converter = converter.concatenate(cvtr);

-            }

-        }

-        return converter;

-    }

-

-    /**

-     * Indicates if this product unit is a standard unit.

-     *

-     * @return <code>true</code> if all elements are standard units;

-     *         <code>false</code> otherwise.

-     */

-    private boolean hasOnlyUnscaledMetricUnits() {

-        for (int i = 0; i < elements.length; i++) {

-            AbstractUnit<?> u = (AbstractUnit<?>) elements[i].unit;

-            if (!u.isUnscaledMetric())

-                return false;

-        }

-        return true;

-    }

-

-    @Override

-    public Dimension getDimension() {

-        Dimension dimension = DimensionImpl.NONE;

-        for (int i = 0; i < this.getUnitCount(); i++) {

-            Unit<?> unit = this.getUnit(i);

-            Dimension d = unit.getDimension().pow(this.getUnitPow(i)).root(this.getUnitRoot(i));

-            dimension = dimension.multiply(d);

-        }

-        return dimension;

-    }

-

-    @Override

-    public UnitConverter getDimensionalTransform() {

-        UnitConverter converter = AbstractConverter.IDENTITY;

-        for (int i = 0; i < this.getUnitCount(); i++) {

-            AbstractUnit<?> unit = (AbstractUnit<?>) this.getUnit(i);

-            UnitConverter cvtr = unit.getDimensionalTransform();

-            if (!(cvtr.isLinear()))

-                throw new UnsupportedOperationException(cvtr.getClass() + " is non-linear, cannot convert product unit");

-            if (this.getUnitRoot(i) != 1)

-                throw new UnsupportedOperationException(this + " holds a unit with fractional exponent");

-            int pow = this.getUnitPow(i);

-            if (pow < 0) { // Negative power.

-                pow = -pow;

-                cvtr = cvtr.inverse();

-            }

-            for (int j = 0; j < pow; j++) {

-                converter = converter.concatenate(cvtr);

-            }

-        }

-        return converter;

-    }

-

-    /**

-     * Returns the greatest common divisor (Euclid's algorithm).

-     *

-     * @param m the first number.

-     * @param nn the second number.

-     * @return the greatest common divisor.

-     */

-    private static int gcd(int m, int n) {

-        if (n == 0)

-            return m;

-        else

-            return gcd(n, m % n);

-    }

-

-    /**

-     * Inner product element represents a rational power of a single unit.

-     */

-    private final static class Element implements Serializable {

-

-        /**

-         *

-         */

-        private static final long serialVersionUID = 1649532173171667701L;

-

-        /**

-         * Holds the single unit.

-         */

-        private final Unit<?> unit;

-

-        /**

-         * Holds the power exponent.

-         */

-        private final int pow;

-

-        /**

-         * Holds the root exponent.

-         */

-        private final int root;

-

-        /**

-         * Structural constructor.

-         *

-         * @param unit the unit.

-         * @param pow the power exponent.

-         * @param root the root exponent.

-         */

-        private Element(Unit<?> unit, int pow, int root) {

-            this.unit = unit;

-            this.pow = pow;

-            this.root = root;

-        }

-

-        /**

-         * Returns this element's unit.

-         *

-         * @return the single unit.

-         */

-        public Unit<?> getUnit() {

-            return unit;

-        }

-

-        /**

-         * Returns the power exponent. The power exponent can be negative but is

-         * always different from zero.

-         *

-         * @return the power exponent of the single unit.

-         */

-        public int getPow() {

-            return pow;

-        }

-

-        /**

-         * Returns the root exponent. The root exponent is always greater than

-         * zero.

-         *

-         * @return the root exponent of the single unit.

-         */

-        public int getRoot() {

-            return root;

-        }

-    }

-

-	@Override

-	public UnitConverter getConverterToAny(Unit<?> arg0) {

-        if (hasOnlyUnscaledMetricUnits()) // Product of standard units is a standard unit itself.

-            return AbstractConverter.IDENTITY;

-        UnitConverter converter = AbstractConverter.IDENTITY;

-        for (int i = 0; i < elements.length; i++) {

-            Element e = elements[i];

-            UnitConverter cvtr;

-			try {

-				cvtr = e.unit.getConverterToAny(this);

-			} catch (UnconvertibleException e1) {

-				throw e1;

-			} catch (IncommensurableException e1) {

-				throw new UnsupportedOperationException(e1);

-			}

-            if (!(cvtr.isLinear()))

-                throw new UnsupportedOperationException(e.unit + " is non-linear, cannot convert");

-            if (e.root != 1)

-                throw new UnsupportedOperationException(e.unit + " holds a base unit with fractional exponent");

-            int pow = e.pow;

-            if (pow < 0) { // Negative power.

-                pow = -pow;

-                cvtr = cvtr.inverse();

-            }

-            for (int j = 0; j < pow; j++) {

-                converter = converter.concatenate(cvtr);

-            }

-        }

-        return converter;

-	}

-

-    @SuppressWarnings("unchecked")

-	@Override

-    protected Unit<Q> toMetric() {

-        if (hasOnlyUnscaledMetricUnits())

-            return this;

-        Unit<?> systemUnit = AbstractUnit.ONE;

-        for (int i = 0; i < elements.length; i++) {

-            Unit<?> unit = elements[i].unit.getSystemUnit();

-            unit = unit.pow(elements[i].pow);

-            unit = unit.root(elements[i].root);

-            systemUnit = systemUnit.multiply(unit);

-        }

-        return (Unit<Q>) systemUnit;

-    }

-

-	@Override

-	public Unit<Q> getSystemUnit() {

-		return toMetric();

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/Quantities.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/Quantities.java
deleted file mode 100644
index 9ef8dfd..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/Quantities.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl;

-

-import static org.eclipse.uomo.units.impl.format.FormatBehavior.LOCALE_NEUTRAL;

-

-import java.math.BigDecimal;

-import java.math.BigInteger;

-import java.text.ParsePosition;

-import java.util.Objects;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-import javax.measure.format.ParserException;

-

-import org.eclipse.uomo.units.ComparableQuantity;

-import org.eclipse.uomo.units.impl.format.QuantityFormat;

-

-/**

- * Singleton class for accessing {@link Quantity} instances.

- * 

- * @author werner

- * @author otaviojava

- * @version 1.2, December 24, 2017

- * @since 0.7

- */

-public final class Quantities {

-	  /**

-	   * Private singleton constructor.

-	   */

-	  private Quantities() {

-	  }

-

-	  /**

-	   * Returns the {@link #valueOf(java.math.BigDecimal, javax.measure.unit.Unit) decimal} quantity of unknown type corresponding to the specified

-	   * representation. This method can be used to parse dimensionless quantities.<br/>

-	   * <code>

-	   *     Quantity<Dimensionless> proportion = Quantities.getQuantity("0.234").asType(Dimensionless.class);

-	   * </code>

-	   *

-	   * <p>

-	   * Note: This method handles only Locale-neutral quantity formatting and parsing are handled by the {@link QuantityFormat} class and its subclasses.

-	   * </p>

-	   *

-	   * @param csq

-	   *          the decimal value and its unit (if any) separated by space(s).

-	   * @return <code>QuantityFormat.getInstance(LOCALE_NEUTRAL).parse(csq, new ParsePosition(0))</code>

-	   */

-	  public static ComparableQuantity<?> getQuantity(CharSequence csq) {

-	    try {

-	      return QuantityFormat.getInstance(LOCALE_NEUTRAL).parse(csq, new ParsePosition(0));

-	    } catch (ParserException e) {

-	      throw new IllegalArgumentException(e.getParsedString());

-	    }

-	  }

-

-	  /**

-	   * Returns the scalar measurement. When the {@link Number} was {@link BigDecimal} or {@link BigInteger} will uses {@link DecimalQuantity}, when the

-	   * {@link Number} was {@link Double} will {@link DoubleQuantity} otherwise will {@link NumberQuantity}. in the specified unit.

-	   * 

-	   * @param value

-	   *          the measurement value.

-	   * @param unit

-	   *          the measurement unit.

-	   * @return the corresponding <code>numeric</code> measurement.

-	   * @throws NullPointerException

-	   *           when value or unit were null

-	   */

-	  public static <Q extends Quantity<Q>> ComparableQuantity<Q> getQuantity(Number value, Unit<Q> unit) {

-	    Objects.requireNonNull(value);

-	    Objects.requireNonNull(unit);

-	    if (Double.class.isInstance(value)) {

-	      return new DoubleQuantity<>(Double.class.cast(value), unit);

-	    } else if (BigDecimal.class.isInstance(value)) {

-	      return new DecimalQuantity<>(BigDecimal.class.cast(value), unit);

-	    } else if (BigInteger.class.isInstance(value)) {

-	      return new DecimalQuantity<>(new BigDecimal(BigInteger.class.cast(value)), unit);

-	    }

-	    return new NumberQuantity<>(value, unit);

-	  }

-	}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/QuantityFactoryImpl.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/QuantityFactoryImpl.java
deleted file mode 100644
index 4a72ea6..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/QuantityFactoryImpl.java
+++ /dev/null
@@ -1,144 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl;

-

-import static org.eclipse.uomo.units.impl.system.Units.*;

-

-import java.util.HashMap;

-import java.util.Map;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-import javax.measure.quantity.*;

-import javax.measure.spi.QuantityFactory;

-

-import org.eclipse.uomo.units.AbstractUnit;

-

-/**

- * The default factory implementation. This factory provides a default implementation for every {@link AbstractQuantity} sub-type.

- *

- * For example:<br>

- * <code>

- *      Quantity&lt;Mass&gt; m = DefaultQuantityFactory.getInstance(Mass.class).create(23.0, KILOGRAM); // 23.0 kg<br>

- *      Quantity&lt;Time&gt; m = DefaultQuantityFactory.getInstance(Time.class).create(124, MILLI(SECOND)); // 124 ms

- * </code>

- * 

- * @param <Q>

- *          The type of the quantity.

- *

- * @author <a href="mailto:martin.desruisseaux@geomatys.com">Martin Desruisseaux</a>

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @version 1.0, $Date: 2016-10-04 $

- * @since 1.0

- */

-public final class QuantityFactoryImpl<Q extends Quantity<Q>> extends AbstractQuantityFactory<Q> {

-  /**

-   * The type of the quantities created by this factory.

-   */

-  @SuppressWarnings("unused")

-  private final Class<Q> type;

-

-  /**

-   * The metric unit for quantities created by this factory.

-   */

-  private final Unit<Q> metricUnit;

-

-  /**

-   * Creates a new factory for quantities of the given type.

-   *

-   * @param type

-   *          The type of the quantities created by this factory.

-   */

-  @SuppressWarnings("unchecked")

-  QuantityFactoryImpl(final Class<Q> type) {

-    this.type = type;

-    metricUnit = CLASS_TO_METRIC_UNIT.get(type);

-  }

-

-  @SuppressWarnings("rawtypes")

-  static final Map<Class, Unit> CLASS_TO_METRIC_UNIT = new HashMap<Class, Unit>();

-  static {

-    CLASS_TO_METRIC_UNIT.put(Dimensionless.class, AbstractUnit.ONE);

-    CLASS_TO_METRIC_UNIT.put(ElectricCurrent.class, AMPERE);

-    CLASS_TO_METRIC_UNIT.put(LuminousIntensity.class, CANDELA);

-    CLASS_TO_METRIC_UNIT.put(Temperature.class, KELVIN);

-    CLASS_TO_METRIC_UNIT.put(Mass.class, KILOGRAM);

-    CLASS_TO_METRIC_UNIT.put(Length.class, METRE);

-    CLASS_TO_METRIC_UNIT.put(AmountOfSubstance.class, MOLE);

-    CLASS_TO_METRIC_UNIT.put(Time.class, SECOND);

-    CLASS_TO_METRIC_UNIT.put(Angle.class, RADIAN);

-    CLASS_TO_METRIC_UNIT.put(SolidAngle.class, STERADIAN);

-    CLASS_TO_METRIC_UNIT.put(Frequency.class, HERTZ);

-    CLASS_TO_METRIC_UNIT.put(Force.class, NEWTON);

-    CLASS_TO_METRIC_UNIT.put(Pressure.class, PASCAL);

-    CLASS_TO_METRIC_UNIT.put(Energy.class, JOULE);

-    CLASS_TO_METRIC_UNIT.put(Power.class, WATT);

-    CLASS_TO_METRIC_UNIT.put(ElectricCharge.class, COULOMB);

-    CLASS_TO_METRIC_UNIT.put(ElectricPotential.class, VOLT);

-    CLASS_TO_METRIC_UNIT.put(ElectricCapacitance.class, FARAD);

-    CLASS_TO_METRIC_UNIT.put(ElectricResistance.class, OHM);

-    CLASS_TO_METRIC_UNIT.put(ElectricConductance.class, SIEMENS);

-    CLASS_TO_METRIC_UNIT.put(MagneticFlux.class, WEBER);

-    CLASS_TO_METRIC_UNIT.put(MagneticFluxDensity.class, TESLA);

-    CLASS_TO_METRIC_UNIT.put(ElectricInductance.class, HENRY);

-    CLASS_TO_METRIC_UNIT.put(LuminousFlux.class, LUMEN);

-    CLASS_TO_METRIC_UNIT.put(Illuminance.class, LUX);

-    CLASS_TO_METRIC_UNIT.put(Radioactivity.class, BECQUEREL);

-    CLASS_TO_METRIC_UNIT.put(RadiationDoseAbsorbed.class, GRAY);

-    CLASS_TO_METRIC_UNIT.put(RadiationDoseEffective.class, SIEVERT);

-    CLASS_TO_METRIC_UNIT.put(CatalyticActivity.class, KATAL);

-    CLASS_TO_METRIC_UNIT.put(Speed.class, METRE_PER_SECOND);

-    CLASS_TO_METRIC_UNIT.put(Acceleration.class, METRE_PER_SQUARE_SECOND);

-    CLASS_TO_METRIC_UNIT.put(Area.class, SQUARE_METRE);

-    CLASS_TO_METRIC_UNIT.put(Volume.class, CUBIC_METRE);

-  }

-

-  public Quantity<Q> create(Number value, Unit<Q> unit) {

-    return Quantities.getQuantity(value, unit);

-  }

-

-  public Unit<Q> getSystemUnit() {

-    return metricUnit;

-  }

-

-  /**

-   * Returns the default instance for the specified quantity type.

-   *

-   * @param <Q>

-   *          The type of the quantity

-   * @param type

-   *          the quantity type

-   * @return the quantity factory for the specified type

-   */

-  @SuppressWarnings("unchecked")

-  public static <Q extends Quantity<Q>> QuantityFactory<Q> getInstance(final Class<Q> type) {

-    logger.log(LOG_LEVEL, "Type: " + type + ": " + type.isInterface());

-    QuantityFactory<Q> factory;

-    if (!type.isInterface()) {

-      factory = new QuantityFactoryImpl<Q>(type);

-      // TODO use instances?

-    } else {

-      factory = INSTANCES.get(type);

-      if (factory != null)

-        return factory;

-      if (!Quantity.class.isAssignableFrom(type))

-        // This exception is not documented because it should never

-        // happen if the

-        // user don't try to trick the Java generic types system with

-        // unsafe cast.

-        throw new ClassCastException();

-      factory = new QuantityFactoryImpl<Q>(type);

-      setInstance(type, factory);

-    }

-    return factory;

-  }

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/StandardModel.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/StandardModel.java
deleted file mode 100644
index 1de229a..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/StandardModel.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl;

-

-/**

- * Provides support for <a href="http://en.wikipedia.org/wiki/Dimensional_analysis">Dimensional Analysis</a>.

- * 

- * <p>

- * The difference between dimensional models lies in the assumptions each makes and, in consequence,the operations each permits. For example, the

- * summation of a {@link javax.measure.quantity.Length length} and a {@link org.unitsofmeasurement.quantity.Duration duration} is not allowed

- * by the standard model, but is quite valid in a relativistic context.

- * </p>

- * 

- * <p>

- * Models are {@link javolution.context.LocalContext context-local}, allowing multiple models to be used concurrently. For example:[code]

- * LocalContext.enter(); try { RelativisticModel.select(); // Affects the current thread only. ... } finally { LocalContext.exit(); }[/code]

- * </p>

- * 

- * <p>

- * The names and characteristics of the models are presented in the following table:

- * </p>

- * 

- * <table border="1" cellspacing="1">

- * <tr align="center" valign="bottom">

- * <th>Model</th>

- * <th>Class</th>

- * <th>Defining Characteristics</th>

- * <th>DefaultQuantityFactory Output CommonUnits</th>

- * </tr>

- * 

- * <tr align="left" valign="middle">

- * <td align="left">Standard</td>

- * <td align="left"><samp>"StandardModel"</samp></td>

- * <td align="left">per Syst&egrave;me Internationale</td>

- * <td align="left"><samp>Length</samp>:&nbsp;<i>m</i>;&nbsp;

- * 

- * <samp>Mass</samp>:&nbsp;<i>kg</i>;&nbsp; <samp>Duration</samp>:&nbsp;<i>s</i>;&nbsp; <samp>ElectricCurrent</samp>:&nbsp;<i>A</i>;&nbsp;

- * 

- * <samp>Temperature</samp>:&nbsp;<i>K</i>;&nbsp; <samp>AmountOfSubstance</samp>:&nbsp;<i>mol</i>;&nbsp;

- * <samp>LuminousIntensity</samp>:&nbsp;<i>cd</i>

- * 

- * </td>

- * </tr>

- * 

- * <tr align="left" valign="middle">

- * <td align="left">Relativistic</td>

- * <td align="left"><samp>"RelativisticModel"</samp></td>

- * <td align="left">1 <i>= c</i></td>

- * <td align="left"><samp>Length</samp>, <samp>Duration</samp>:&nbsp;<i>s</i>;&nbsp; <samp>Mass</samp>:&nbsp;<i>eV</i>;&nbsp;

- * <samp>ElectricCurrent</samp>:&nbsp;<i>A</i>;&nbsp;

- * 

- * <samp>Temperature</samp>:&nbsp;<i>K</i>;&nbsp; <samp>AmountOfSubstance</samp>:&nbsp;<i>mol</i>;&nbsp;

- * <samp>LuminousIntensity</samp>:&nbsp;<i>cd</i>

- * 

- * </td>

- * </tr>

- * 

- * <tr align="left" valign="middle">

- * <td align="left">High-Energy</td>

- * <td align="left"><samp>"HighEnergyModel"</samp></td>

- * <td align="left">1<i> = c<br>

- * &nbsp;&nbsp; = k<br>

- * &nbsp;&nbsp; = ePlus</i></td>

- * <td align="left"><samp>Length</samp>, <samp>Duration</samp>:&nbsp;<i>ns</i>;&nbsp; <samp>Mass</samp>,

- * <samp>Temperature</samp>:&nbsp;<i>GeV</i>;&nbsp;

- * 

- * <samp>ElectricCurrent</samp>:&nbsp;<i>1/ns</i>;&nbsp; <samp>AmountOfSubstance</samp>:&nbsp;<i>mol</i>;&nbsp;

- * <samp>LuminousIntensity</samp>:&nbsp;<i>cd</i></td>

- * </tr>

- * 

- * <tr align="left" valign="middle">

- * <td align="left">Quantum</td>

- * <td align="left"><samp>"QuantumModel"</samp></td>

- * <td align="left">1<i> = c<br>

- * &nbsp;&nbsp; = k<br>

- * &nbsp;&nbsp; = µ0<br>

- * &nbsp;&nbsp; = hBar</i></td>

- * <td align="left"><samp>Length</samp>, <samp>Duration</samp>:&nbsp;<i>1/GeV</i>;&nbsp; <samp>Mass</samp>, <samp>Temperature</samp>,

- * <samp>ElectricCurrent</samp>:&nbsp;<i>GeV</i>;&nbsp;

- * 

- * <samp>AmountOfSubstance</samp>:&nbsp;<i>mol</i>;&nbsp; <samp>LuminousIntensity</samp>:&nbsp;<i>cd</i></td>

- * </tr>

- * 

- * <tr align="left" valign="middle">

- * <td align="left">Natural</td>

- * <td align="left"><samp>"NaturalModel"</samp></td>

- * <td align="left">1<i> = c<br>

- * &nbsp;&nbsp; = k<br>

- * &nbsp;&nbsp; = µ0<br>

- * &nbsp;&nbsp; = hBar<br>

- * &nbsp;&nbsp; = G</i></td>

- * <td align="left"><samp>Length</samp>, <samp>Mass</samp>, <samp>Duration</samp>, <samp>ElectricCurrent</samp>,

- * <samp>Temperature</samp>:&nbsp;1;&nbsp; <samp>AmountOfSubstance</samp>:&nbsp;<i>mol</i>;&nbsp; <samp>LuminousIntensity</samp>:&nbsp;<i>cd</i></td>

- * </tr>

- * </table>

- * This class represents the standard model.

- *

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @version 0.8, December 21, 2017

- */

-class StandardModel extends DimensionalModel {

-

-  /**

-   * StandardModel constructor.

-   */

-  public StandardModel() {

-  }

-

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/TransformedUnit.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/TransformedUnit.java
deleted file mode 100644
index c789f64..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/TransformedUnit.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/**

- * Copyright (c) 2005, 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl;

-

-import org.eclipse.uomo.units.AbstractConverter;

-import org.eclipse.uomo.units.AbstractUnit;

-import javax.measure.Quantity;

-import javax.measure.unit.IncommensurableException;

-import javax.measure.unit.UnconvertibleException;

-import javax.measure.Unit;

-import javax.measure.UnitConverter;

-

-/**

- * <p>

- * This class represents the units derived from other units using

- * {@linkplain AbstractConverter converters}.

- * </p>

- * 

- * <p>

- * Examples of transformed units:[code] CELSIUS = KELVIN.add(273.15); FOOT =

- * METRE.times(3048).divide(10000); MILLISECOND = MILLI(SECOND); [/code]

- * </p>

- * 

- * <p>

- * Transformed units have no label. But like any other units, they may have

- * labels attached to them (see

- * {@link org.eclipse.uomo.units.AbstractUnitFormat.SymbolMapImpl SymbolMap}

- * </p>

- * 

- * <p>

- * Instances of this class are created through the

- * {@link AbstractUnit#transform} method.

- * </p>

- * 

- * @param <Q>

- *            The type of the quantity measured by this unit.

- * 

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.2 ($Revision: 212 $), $Date: 2013-03-10 $

- */

-public final class TransformedUnit<Q extends Quantity<Q>> extends

-		AbstractUnit<Q> {

-

-	@Override

-	public UnitConverter getConverterToAny(Unit<?> that)

-			throws IncommensurableException, UnconvertibleException {

-		if (toParentUnit != null) {

-			return toParentUnit.inverse();

-		}

-		return super.getConverterToAny(that);

-	}

-

-	/**

-	 * For cross-version compatibility.

-	 */

-	private static final long serialVersionUID = -442449068482939939L;

-

-	/**

-	 * Holds the parent unit (not a transformed unit).

-	 */

-	private final Unit<Q> parentUnit;

-

-	/**

-	 * Holds the converter to the parent unit.

-	 */

-	private final AbstractConverter toParentUnit;

-

-	/**

-	 * Creates a transformed unit from the specified parent unit.

-	 * 

-	 * @param parentUnit

-	 *            the untransformed unit from which this unit is derived.

-	 * @param toParentUnit

-	 *            the converter to the parent units.

-	 * @throws IllegalArgumentException

-	 *             if <code>toParentUnit ==

-	 *         {@link AbstractConverter#IDENTITY UnitConverter.IDENTITY}</code>

-	 */

-	public TransformedUnit(Unit<Q> parentUnit, AbstractConverter toParentUnit) {

-		if (toParentUnit == AbstractConverter.IDENTITY)

-			throw new IllegalArgumentException("Identity not allowed");

-		this.parentUnit = parentUnit;

-		this.toParentUnit = toParentUnit;

-	}

-

-	/**

-	 * Returns the parent unit for this unit. The parent unit is the

-	 * untransformed unit from which this unit is derived.

-	 * 

-	 * @return the untransformed unit from which this unit is derived.

-	 */

-	public Unit<Q> getParentUnit() {

-		return parentUnit;

-	}

-

-	/**

-	 * Returns the converter to the parent unit.

-	 * 

-	 * @return the converter to the parent unit.

-	 */

-	public UnitConverter toParentUnit() {

-		return toParentUnit;

-	}

-

-	@Override

-	public boolean equals(Object that) {

-		if (this == that)

-			return true;

-		if (!(that instanceof TransformedUnit<?>))

-			return false;

-		TransformedUnit<?> thatUnit = (TransformedUnit<?>) that;

-		return this.parentUnit.equals(thatUnit.parentUnit)

-				&& (this.toParentUnit != null && this.toParentUnit

-						.equals(thatUnit.toParentUnit));

-	}

-

-	@Override

-	public int hashCode() {

-		return parentUnit.hashCode()

-				+ (toParentUnit != null ? toParentUnit.hashCode() : 0);

-	}

-

-	@Override

-	protected Unit<Q> toMetric() {

-		return parentUnit.getSystemUnit();

-	}

-

-	@Override

-	public UnitConverter getConverterToMetric() {

-		return ((AbstractUnit<Q>) parentUnit).getConverterToMetric()

-				.concatenate(toParentUnit);

-	}

-

-	@Override

-	public Unit<Q> getSystemUnit() {

-		return toMetric();

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/AddConverter.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/AddConverter.java
deleted file mode 100644
index 79b5006..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/AddConverter.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.converter;

-

-import java.math.BigDecimal;

-import java.math.MathContext;

-

-import org.eclipse.uomo.units.AbstractConverter;

-import javax.measure.UnitConverter;

-

-

-/**

- * <p> This class represents a converter adding a constant offset

- *     to numeric values (<code>double</code> based).</p>

- *

- * <p> Instances of this class are immutable.</p>

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- *

- * @version 1.2 ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $

- */

-public final class AddConverter extends AbstractConverter {

-

-    /**

-     * For cross-version compatibility.

-     */

-    private static final long serialVersionUID = 8088797685241019815L;

-

-    /**

-     * Holds the offset.

-     */

-    private final double offset;

-

-    /**

-     * Creates an add converter with the specified offset.

-     *

-     * @param  offset the offset value.

-     * @throws IllegalArgumentException if offset is <code>0.0</code>

-     *         (would result in identity converter).

-     */

-    public AddConverter(double offset) {

-        if (offset == 0.0) {

-            throw new IllegalArgumentException("Would result in identity converter");

-        }

-        this.offset = offset;

-    }

-

-    /**

-     * Returns the offset value for this add converter.

-     *

-     * @return the offset value.

-     */

-    public double getOffset() {

-        return offset;

-    }

-

-    @Override

-    public UnitConverter concatenate(UnitConverter converter) {

-        if (converter instanceof AddConverter) {

-            double newOffset = offset + ((AddConverter) converter).offset;

-            return newOffset == 0.0 ? IDENTITY : new AddConverter(newOffset);

-        } else {

-            return super.concatenate((AbstractConverter)converter);

-        }

-    }

-

-    @Override

-    public AddConverter inverse() {

-        return new AddConverter(-offset);

-    }

-

-    @Override

-    public double convert(double value) {

-        return value + offset;

-    }

-

-    @Override

-    public BigDecimal convert(BigDecimal value, MathContext ctx) throws ArithmeticException {

-         return value.add(BigDecimal.valueOf(offset), ctx);

-    }

-

-	@Override

-	public Number convert(Number value) {

-		return BigDecimal.valueOf(value.doubleValue()).add(BigDecimal.valueOf(offset));

-	}

-

-    @Override

-    public final String toString() {

-        return "AddConverter(" + offset + ")";

-    }

-

-    @Override

-    public boolean equals(Object obj) {

-        if (!(obj instanceof AddConverter)) {

-            return false;

-        }

-        AddConverter that = (AddConverter) obj;

-        return this.offset == that.offset;

-    }

-

-    @Override

-    public int hashCode() {

-        long bits = Double.doubleToLongBits(offset);

-        return (int) (bits ^ (bits >>> 32));

-    }

-

-    @Override

-    public boolean isLinear() {

-        return false;

-    }

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/ExpConverter.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/ExpConverter.java
deleted file mode 100644
index 2885c3b..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/ExpConverter.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.converter;

-

-import java.math.BigDecimal;

-import java.math.MathContext;

-

-import org.eclipse.uomo.units.AbstractConverter;

-

-/**

- * <p>

- * This class represents a exponential converter of limited precision. Such

- * converter is typically used to create inverse of logarithmic unit.

- * 

- * <p>

- * Instances of this class are immutable.

- * </p>

- * 

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.1 ($Revision: 132 $), $Date: 2010-08-10 07:04:41 +0100 (Di, 10 Aug 2010) $

- */

-public final class ExpConverter extends AbstractConverter {

-

-	/** The serialVersionUID */

-	private static final long serialVersionUID = -1862583888012861945L;

-

-	/**

-	 * Holds the logarithmic base.

-	 */

-	private final double base;

-

-	/**

-	 * Holds the natural logarithm of the base.

-	 */

-	private final double logOfBase;

-

-	/**

-	 * Creates a logarithmic converter having the specified base.

-	 * 

-	 * @param base

-	 *            the logarithmic base (e.g. <code>Math.E</code> for the Natural

-	 *            Logarithm).

-	 */

-	public ExpConverter(double base) {

-		this.base = base;

-		this.logOfBase = Math.log(base);

-	}

-

-	/**

-	 * Returns the exponential base of this converter.

-	 * 

-	 * @return the exponential base (e.g. <code>Math.E</code> for the Natural

-	 *         Exponential).

-	 */

-	public double getBase() {

-		return base;

-	}

-

-	@Override

-	public AbstractConverter inverse() {

-		return new LogConverter(base);

-	}

-

-	@Override

-	public final String toString() {

-		return "ExpConverter(" + base + ")";

-	}

-

-	@Override

-	public boolean equals(Object obj) {

-		if (!(obj instanceof ExpConverter))

-			return false;

-		ExpConverter that = (ExpConverter) obj;

-		return this.base == that.base;

-	}

-

-	@Override

-	public int hashCode() {

-		long bits = Double.doubleToLongBits(base);

-		return (int) (bits ^ (bits >>> 32));

-	}

-

-	@Override

-	public double convert(double value) {

-		return Math.exp(logOfBase * value);

-	}

-

-	@Override

-	public BigDecimal convert(BigDecimal value, MathContext ctx)

-			throws ArithmeticException {

-		return BigDecimal.valueOf(convert(value.doubleValue())); // Reverts to

-																	// double

-																	// conversion.

-	}

-

-	@Override

-	public Number convert(Number value) {

-		if (value instanceof BigDecimal) {

-			return convert((BigDecimal) value, MathContext.DECIMAL128);

-		} else {

-			return convert(value.doubleValue());

-		}

-	}

-

-	@Override

-	public boolean isLinear() {

-		return false;

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/LogConverter.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/LogConverter.java
deleted file mode 100644
index 8f98e62..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/LogConverter.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.converter;
-
-import java.math.BigDecimal;
-import java.math.MathContext;
-
-import org.eclipse.uomo.units.AbstractConverter;
-
-/**
- * <p> This class represents a logarithmic converter of limited precision.
- *     Such converter  is typically used to create logarithmic unit.
- *     For example:[code]
- *     Unit<Dimensionless> BEL = Unit.ONE.transform(new LogConverter(10).inverse());
- *     [/code]</p>
- *
- * <p> Instances of this class are immutable.</p>
- *
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.4 ($Revision: 132 $), $Date: 2010-08-10 07:04:41 +0100 (Di, 10 Aug 2010) $
- */
-public final class LogConverter extends AbstractConverter {
-
-    /** The serialVersionUID */
-    private static final long serialVersionUID = -5581266460675123322L;
-
-    /**
-     * Holds the logarithmic base.
-     */
-    private final double base;
-    /**
-     * Holds the natural logarithm of the base.
-     */
-    private final double logOfBase;
-
-    /**
-     * Creates a logarithmic converter having the specified base.
-     *
-     * @param  base the logarithmic base (e.g. <code>Math.E</code> for
-     *         the Natural Logarithm).
-     */
-    public LogConverter(double base) {
-        this.base = base;
-        logOfBase = Math.log(base);
-    }
-
-    /**
-     * Returns the logarithmic base of this converter.
-     *
-     * @return the logarithmic base (e.g. <code>Math.E</code> for
-     *         the Natural Logarithm).
-     */
-    public double getBase() {
-        return base;
-    }
-
-    @Override
-    public AbstractConverter inverse() {
-        return new ExpConverter(base);
-    }
-
-    @Override
-    public final String toString() {
-        return "LogConverter("+ base + ")";
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (!(obj instanceof LogConverter))
-            return false;
-        LogConverter that = (LogConverter) obj;
-        return this.base == that.base;
-    }
-
-    @Override
-    public int hashCode() {
-        long bits = Double.doubleToLongBits(base);
-        return (int) (bits ^ (bits >>> 32));
-    }
-
-    @Override
-    public double convert(double amount) {
-        return Math.log(amount) / logOfBase;
-    }
-
-    @Override
-    public BigDecimal convert(BigDecimal value, MathContext ctx) throws ArithmeticException {
-        return BigDecimal.valueOf(convert(value.doubleValue())); // Reverts to double conversion.
-    }
-    
-	@Override
-	public Number convert(Number value) {
-		if (value instanceof BigDecimal) {
-			return convert((BigDecimal) value, MathContext.DECIMAL128);
-		} else {
-			return convert(value.doubleValue());
-		}
-	}
-
-    @Override
-    public boolean isLinear() {
-        return false;
-    }
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/MultiplyConverter.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/MultiplyConverter.java
deleted file mode 100644
index 19f652e..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/MultiplyConverter.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.converter;

-

-import java.math.BigDecimal;

-import java.math.MathContext;

-

-import org.eclipse.uomo.units.AbstractConverter;

-import javax.measure.UnitConverter;

-

-/**

- * <p> This class represents a converter multiplying numeric values by a

- *     constant scaling factor (<code>double</code> based).</p>

- *

- * <p> Instances of this class are immutable.</p>

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.5.1 ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $

- */

-public final class MultiplyConverter extends AbstractConverter {

-    /** The serialVersionUID */

-    private static final long serialVersionUID = 6497743504427978825L;

-

-    /**

-     * Holds the scale factor.

-     */

-    private final double factor;

-

-    /**

-     * Creates a multiply converter with the specified scale factor.

-     *

-     * @param  factor the scaling factor.

-     * @throws IllegalArgumentException if coefficient is <code>1.0</code>

-     *        (would result in identity converter)

-     */

-    public MultiplyConverter(double factor) {

-        if (factor == 1.0)

-            throw new IllegalArgumentException("Would result in identity converter");

-        this.factor = factor;

-    }

-

-    /**

-     * Returns the scale factor of this converter.

-     *

-     * @return the scale factor.

-     */

-    public double getFactor() {

-        return factor;

-    }

-

-    @Override

-    public UnitConverter inverse() {

-        return new MultiplyConverter(1.0 / factor);

-    }

-

-    @Override

-    public double convert(double value) {

-        return value * factor;

-    }

-

-    @Override

-    public BigDecimal convert(BigDecimal value, MathContext ctx) throws ArithmeticException {

-          return value.multiply(BigDecimal.valueOf(factor), ctx);

-    }

-    

-	@Override

-	public Number convert(Number value) {

-		if (value instanceof BigDecimal) {

-			return convert((BigDecimal) value, MathContext.DECIMAL128);

-		} else {

-			return convert(value.doubleValue());

-		}

-	}

-

-    @Override

-    public final String toString() {

-        return "MultiplyConverter("+ factor + ")";

-    }

-

-    @Override

-    public boolean equals(Object obj) {

-        if (!(obj instanceof MultiplyConverter))

-            return false;

-        MultiplyConverter that = (MultiplyConverter) obj;

-        return this.factor == that.factor;

-    }

-

-    @Override

-    public int hashCode() {

-        long bits = Double.doubleToLongBits(factor);

-    return (int)(bits ^ (bits >>> 32));

-    }

-

-    @Override

-    public boolean isLinear() {

-        return true;

-    }

-

-	@Override

-	public UnitConverter concatenate(UnitConverter converter) {

-      if (converter instanceof MultiplyConverter) {

-	      double newfactor = factor * ((MultiplyConverter) converter).factor;

-	      return newfactor == 1.0 ? IDENTITY : new MultiplyConverter(newfactor);

-      } else

-    	  return super.concatenate(converter);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/RationalConverter.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/RationalConverter.java
deleted file mode 100644
index 6ef9bce..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/converter/RationalConverter.java
+++ /dev/null
@@ -1,164 +0,0 @@
-/**

- * Copyright (c) 2005, 2011, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.converter;

-

-import java.math.BigDecimal;

-import java.math.BigInteger;

-import java.math.MathContext;

-

-import org.eclipse.uomo.units.AbstractConverter;

-import javax.measure.UnitConverter;

-

-/**

- * <p> This class represents a converter multiplying numeric values by an

- *     exact scaling factor (represented as the quotient of two

- *     <code>BigInteger</code> numbers).</p>

- *

- * <p> Instances of this class are immutable.</p>

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.3 ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $

- */

-public final class RationalConverter extends AbstractConverter {

-

-    /** The serialVersionUID */

-    private static final long serialVersionUID = 5313011404391445406L;

-

-    /**

-     * Holds the converter dividend.

-     */

-    private final BigInteger dividend;

-    /**

-     * Holds the converter divisor (always positive).

-     */

-    private final BigInteger divisor;

-

-    /**

-     * Creates a rational converter with the specified dividend and

-     * divisor.

-     *

-     * @param dividend the dividend.

-     * @param divisor the positive divisor.

-     * @throws IllegalArgumentException if <code>divisor &lt;= 0</code>

-     * @throws IllegalArgumentException if <code>dividend == divisor</code>

-     */

-    public RationalConverter(BigInteger dividend, BigInteger divisor) {

-          if (divisor.compareTo(BigInteger.ZERO) <= 0)

-            throw new IllegalArgumentException("Negative or zero divisor");

-        if (dividend.equals(divisor))

-            throw new IllegalArgumentException("Would result in identity converter");

-        this.dividend = dividend; // Exact conversion.

-        this.divisor = divisor; // Exact conversion.

-    }

-    

-    /**

-     * Creates a rational converter with the specified dividend and

-     * divisor.

-     *

-     * @param dividend the dividend.

-     * @param divisor the positive divisor.

-     * @throws IllegalArgumentException if <code>divisor &lt;= 0</code>

-     * @throws IllegalArgumentException if <code>dividend == divisor</code>

-     */

-    public RationalConverter(long dividend, long divisor) {

-    	this(BigInteger.valueOf(dividend), BigInteger.valueOf(divisor));

-    }

-

-    /**

-     * Returns the integer dividend for this rational converter.

-     *

-     * @return this converter dividend.

-     */

-    public BigInteger getDividend() {

-        return dividend;

-    }

-

-    /**

-     * Returns the integer (positive) divisor for this rational converter.

-     *

-     * @return this converter divisor.

-     */

-    public BigInteger getDivisor() {

-        return divisor;

-    }

-

-    @Override

-    public double convert(double value) {

-        return value * toDouble(dividend) / toDouble(divisor);

-    }

-

-    // Optimization of BigInteger.doubleValue() (implementation too inneficient).

-    private static double toDouble(BigInteger integer) {

-        return (integer.bitLength() < 64) ? integer.longValue() : integer.doubleValue();

-    }

-

-    @Override

-    public BigDecimal convert(BigDecimal value, MathContext ctx) throws ArithmeticException {

-        BigDecimal decimalDividend = new BigDecimal(dividend, 0);

-        BigDecimal decimalDivisor = new BigDecimal(divisor, 0);

-        return value.multiply(decimalDividend, ctx).divide(decimalDivisor, ctx);

-    }

-

-	@Override

-	public Number convert(Number value) {

-		if (value instanceof BigDecimal) {

-			return convert((BigDecimal) value, MathContext.DECIMAL128);

-		} else {

-			return convert(value.doubleValue());

-		}

-	}

-	

-    @Override

-    public UnitConverter concatenate(UnitConverter converter) {

-        if (converter instanceof RationalConverter) {

-            RationalConverter that = (RationalConverter) converter;

-            BigInteger newDividend = this.getDividend().multiply(that.getDividend());

-            BigInteger newDivisor = this.getDivisor().multiply(that.getDivisor());

-            BigInteger gcd = newDividend.gcd(newDivisor);

-            newDividend = newDividend.divide(gcd);

-            newDivisor = newDivisor.divide(gcd);

-            return (newDividend.equals(BigInteger.ONE) && newDivisor.equals(BigInteger.ONE))

-                    ? IDENTITY : new RationalConverter(newDividend, newDivisor);

-        } else

-            return super.concatenate(converter);

-    }

-

-    @Override

-    public RationalConverter inverse() {

-        return dividend.signum() == -1 ? new RationalConverter(getDivisor().negate(), getDividend().negate())

-                : new RationalConverter(getDivisor(), getDividend());

-    }

-

-    @Override

-    public final String toString() {

-        return "RationalConverter("+ dividend +  "," + divisor + ")";

-    }

-

-    @Override

-    public boolean equals(Object obj) {

-        if (!(obj instanceof RationalConverter))

-            return false;

-        RationalConverter that = (RationalConverter) obj;

-        return this.dividend.equals(that.dividend) &&

-                this.divisor.equals(that.divisor);

-    }

-

-    @Override

-    public int hashCode() {

-        return dividend.hashCode() + divisor.hashCode();

-    }

-

-    @Override

-    public boolean isLinear() {

-        return true;

-    }

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/ext/ProxyQuantityFactory.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/ext/ProxyQuantityFactory.java
deleted file mode 100644
index 3df66c2..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/ext/ProxyQuantityFactory.java
+++ /dev/null
@@ -1,280 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.ext;

-

-import static org.eclipse.uomo.units.impl.system.Units.*;

-

-import java.lang.reflect.InvocationHandler;

-import java.lang.reflect.Method;

-import java.lang.reflect.Proxy;

-import java.util.HashMap;

-import java.util.Map;

-import java.util.concurrent.ConcurrentHashMap;

-import java.util.logging.Level;

-import java.util.logging.Logger;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-import javax.measure.quantity.*;

-import javax.measure.spi.QuantityFactory;

-

-import org.eclipse.uomo.units.AbstractQuantity;

-import org.eclipse.uomo.units.AbstractUnit;

-

-/**

- * A factory producing simple quantities instances (tuples {@link Number}/{@link Unit}).

- *

- * For example:<br/>

- * <code>
- *      Quantity<Mass> m = ProxyQuantityFactory.getInstance(Mass.class).create(23.0, KILOGRAM); // 23.0 kg<br/>
- *      Quantity<Time> t = ProxyQuantityFactory.getInstance(Time.class).create(124, MILLI(SECOND)); // 124 ms
- * </code>

- * 

- * @param <Q>

- *          The type of the quantity.

- *

- * @author <a href="mailto:martin.desruisseaux@geomatys.com">Martin Desruisseaux</a>

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @version 1.0.1, $Date: 2017-02-12 $

- */

-public abstract class ProxyQuantityFactory<Q extends Quantity<Q>> implements QuantityFactory<Q> {

-

-  /**

-   * Holds the current instances.

-   */

-  @SuppressWarnings("rawtypes")

-  private static final Map<Class, ProxyQuantityFactory> INSTANCES = new ConcurrentHashMap<>();

-

-  private static final Logger logger = Logger.getLogger(ProxyQuantityFactory.class.getName());

-

-  private static final Level LOG_LEVEL = Level.FINE;

-

-  /**

-   * Returns the default instance for the specified quantity type.

-   *

-   * @param <Q>

-   *          The type of the quantity

-   * @param type

-   *          the quantity type

-   * @return the quantity factory for the specified type

-   */

-  @SuppressWarnings("unchecked")

-  public static <Q extends Quantity<Q>> ProxyQuantityFactory<Q> getInstance(final Class<Q> type) {

-

-    logger.log(LOG_LEVEL, "Type: " + type + ": " + type.isInterface());

-    ProxyQuantityFactory<Q> factory;

-    if (!type.isInterface()) {

-      if (type != null && type.getInterfaces() != null & type.getInterfaces().length > 0) {

-        logger.log(LOG_LEVEL, "Type0: " + type.getInterfaces()[0]);

-        Class<?> type2 = type.getInterfaces()[0];

-

-        factory = INSTANCES.get(type2);

-        if (factory != null)

-          return factory;

-        if (!AbstractQuantity.class.isAssignableFrom(type2))

-          // This exception is not documented because it should never happen if the

-          // user don't try to trick the Java generic types system with unsafe cast.

-          throw new ClassCastException();

-        factory = new Default<>((Class<Q>) type2);

-        INSTANCES.put(type2, factory);

-      } else {

-        factory = INSTANCES.get(type);

-        if (factory != null)

-          return factory;

-        if (!AbstractQuantity.class.isAssignableFrom(type))

-          // This exception is not documented because it should never happen if the

-          // user don't try to trick the Java generic types system with unsafe cast.

-          throw new ClassCastException();

-        factory = new Default<>(type);

-        INSTANCES.put(type, factory);

-      }

-    } else {

-      factory = INSTANCES.get(type);

-      if (factory != null)

-        return factory;

-      if (!Quantity.class.isAssignableFrom(type))

-        // This exception is not documented because it should never happen if the

-        // user don't try to trick the Java generic types system with unsafe cast.

-        throw new ClassCastException();

-      factory = new Default<>(type);

-      INSTANCES.put(type, factory);

-    }

-    return factory;

-  }

-

-  /**

-   * Overrides the default implementation of the factory for the specified quantity type.

-   *

-   * @param <Q>

-   *          The type of the quantity

-   * @param type

-   *          the quantity type

-   * @param factory

-   *          the quantity factory

-   */

-  protected static <Q extends Quantity<Q>> void setInstance(final Class<Q> type, ProxyQuantityFactory<Q> factory) {

-    if (!AbstractQuantity.class.isAssignableFrom(type))

-      // This exception is not documented because it should never happen if the

-      // user don't try to trick the Java generic types system with unsafe cast.

-      throw new ClassCastException();

-    INSTANCES.put(type, factory);

-  }

-

-  /**

-   * Returns the metric unit for quantities produced by this factory or <code>null</code> if unknown.

-   *

-   * @return the metric units for this factory quantities.

-   */

-  public abstract Unit<Q> getSystemUnit();

-

-  /**

-   * The default factory implementation. This factory uses reflection for providing a default implementation for every {@link AbstractMeasurement}

-   * sub-types.

-   *

-   * @param <Q>

-   *          The type of the quantity

-   */

-  private static final class Default<Q extends Quantity<Q>> extends ProxyQuantityFactory<Q> {

-

-    /**

-     * The type of the quantities created by this factory.

-     */

-    private final Class<Q> type;

-

-    /**

-     * The metric unit for quantities created by this factory.

-     */

-    private final Unit<Q> metricUnit;

-

-    /**

-     * Creates a new factory for quantities of the given type.

-     *

-     * @param type

-     *          The type of the quantities created by this factory.

-     */

-    @SuppressWarnings("unchecked")

-    Default(final Class<Q> type) {

-      this.type = type;

-      metricUnit = CLASS_TO_METRIC_UNIT.get(type);

-    }

-

-    @SuppressWarnings("rawtypes")

-    static final HashMap<Class, Unit> CLASS_TO_METRIC_UNIT = new HashMap<>();

-    static {

-      CLASS_TO_METRIC_UNIT.put(Dimensionless.class, AbstractUnit.ONE);

-      CLASS_TO_METRIC_UNIT.put(ElectricCurrent.class, AMPERE);

-      CLASS_TO_METRIC_UNIT.put(LuminousIntensity.class, CANDELA);

-      CLASS_TO_METRIC_UNIT.put(Temperature.class, KELVIN);

-      CLASS_TO_METRIC_UNIT.put(Mass.class, KILOGRAM);

-      CLASS_TO_METRIC_UNIT.put(Length.class, METRE);

-      CLASS_TO_METRIC_UNIT.put(AmountOfSubstance.class, MOLE);

-      CLASS_TO_METRIC_UNIT.put(Time.class, SECOND);

-      // CLASS_TO_METRIC_UNIT.put(MagnetomotiveForce.class, AMPERE_TURN);

-      CLASS_TO_METRIC_UNIT.put(Angle.class, RADIAN);

-      CLASS_TO_METRIC_UNIT.put(SolidAngle.class, STERADIAN);

-      // CLASS_TO_METRIC_UNIT.put(Information.class, BIT);

-      CLASS_TO_METRIC_UNIT.put(Frequency.class, HERTZ);

-      CLASS_TO_METRIC_UNIT.put(Force.class, NEWTON);

-      CLASS_TO_METRIC_UNIT.put(Pressure.class, PASCAL);

-      CLASS_TO_METRIC_UNIT.put(Energy.class, JOULE);

-      CLASS_TO_METRIC_UNIT.put(Power.class, WATT);

-      CLASS_TO_METRIC_UNIT.put(ElectricCharge.class, COULOMB);

-      CLASS_TO_METRIC_UNIT.put(ElectricPotential.class, VOLT);

-      CLASS_TO_METRIC_UNIT.put(ElectricCapacitance.class, FARAD);

-      CLASS_TO_METRIC_UNIT.put(ElectricResistance.class, OHM);

-      CLASS_TO_METRIC_UNIT.put(ElectricConductance.class, SIEMENS);

-      CLASS_TO_METRIC_UNIT.put(MagneticFlux.class, WEBER);

-      CLASS_TO_METRIC_UNIT.put(MagneticFluxDensity.class, TESLA);

-      CLASS_TO_METRIC_UNIT.put(ElectricInductance.class, HENRY);

-      CLASS_TO_METRIC_UNIT.put(LuminousFlux.class, LUMEN);

-      CLASS_TO_METRIC_UNIT.put(Illuminance.class, LUX);

-      CLASS_TO_METRIC_UNIT.put(Radioactivity.class, BECQUEREL);

-      CLASS_TO_METRIC_UNIT.put(RadiationDoseAbsorbed.class, GRAY);

-      CLASS_TO_METRIC_UNIT.put(RadiationDoseEffective.class, SIEVERT);

-      CLASS_TO_METRIC_UNIT.put(CatalyticActivity.class, KATAL);

-      CLASS_TO_METRIC_UNIT.put(Speed.class, METRE_PER_SECOND);

-      CLASS_TO_METRIC_UNIT.put(Acceleration.class, METRE_PER_SQUARE_SECOND);

-      CLASS_TO_METRIC_UNIT.put(Area.class, SQUARE_METRE);

-      CLASS_TO_METRIC_UNIT.put(Volume.class, CUBIC_METRE);

-    }

-

-    @Override

-    public Unit<Q> getSystemUnit() {

-      return metricUnit;

-    }

-

-    @SuppressWarnings("unchecked")

-    @Override

-    public Quantity<Q> create(Number value, Unit<Q> unit) {

-      // System.out.println("Type: " + type);

-      return (Q) Proxy.newProxyInstance(type.getClassLoader(), new Class<?>[] { type }, new GenericHandler<>(value, unit));

-    }

-  }

-

-  /**

-   * The method invocation handler for implementation backed by any kind of {@link Number}. This is a fall back used when no specialized handler is

-   * available for the number type.

-   */

-  private static final class GenericHandler<Q extends Quantity<Q>> implements InvocationHandler {

-    final Unit<Q> unit;

-    final Number value;

-

-    GenericHandler(final Number value, final Unit<Q> unit) {

-      this.unit = unit;

-      this.value = value;

-    }

-

-    @SuppressWarnings("unchecked")

-    @Override

-    public Object invoke(final Object proxy, final Method method, final Object[] args) {

-      final String name = method.getName();

-      switch (name) {

-        case "doubleValue": { // Most frequent.

-          final Unit<Q> toUnit = (Unit<Q>) args[0];

-          if ((toUnit == unit) || (toUnit.equals(unit)))

-            return value.doubleValue(); // Returns value directly.

-          return unit.getConverterTo(toUnit).convert(value.doubleValue());

-        }

-        case "longValue": {

-          final Unit<Q> toUnit = (Unit<Q>) args[0];

-          if ((toUnit == unit) || (toUnit.equals(unit)))

-            return value.longValue(); // Returns value directly.

-          double doubleValue = unit.getConverterTo(toUnit).convert(value.doubleValue());

-          if ((doubleValue < Long.MIN_VALUE) || (doubleValue > Long.MAX_VALUE))

-            throw new ArithmeticException("Overflow: " + doubleValue + " cannot be represented as a long");

-          return (long) doubleValue;

-        }

-        case "getValue":

-          return value;

-        case "getUnit":

-          return unit;

-        case "toString":

-          return String.valueOf(value) + ' ' + unit;

-        case "hashCode":

-          return value.hashCode() * 31 + unit.hashCode();

-        case "equals": {

-          final Object obj = args[0];

-          if (!(obj instanceof AbstractQuantity))

-            return false;

-          final AbstractQuantity<Q> that = (AbstractQuantity<Q>) obj;

-          return unit.isCompatible((AbstractUnit<?>) that.getUnit()) && value.doubleValue() == (that).doubleValue(unit);

-        }

-        case "compareTo": {

-          final AbstractQuantity<Q> that = (AbstractQuantity<Q>) args[0];

-          return Double.compare(value.doubleValue(), that.doubleValue(unit));

-        }

-        default:

-          throw new UnsupportedOperationException(name);

-      }

-    }

-  }

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/DefaultCharStream.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/DefaultCharStream.java
deleted file mode 100644
index f8a10a3..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/DefaultCharStream.java
+++ /dev/null
@@ -1,420 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.format;

-

-/**

- * An implementation of interface CharStream, where the stream is assumed to contain only ASCII characters (without unicode processing).

- *

- * @version 5.1, December 25, 2013

- */

-

-final class DefaultCharStream {

-  /** Whether parser is static. */

-  public static final boolean staticFlag = false;

-  int bufsize;

-  int available;

-  int tokenBegin;

-  /** Position in buffer. */

-  public int bufpos = -1;

-  protected int bufline[];

-  protected int bufcolumn[];

-

-  protected int column = 0;

-  protected int line = 1;

-

-  protected boolean prevCharIsCR = false;

-  protected boolean prevCharIsLF = false;

-

-  protected java.io.Reader inputStream;

-

-  protected char[] buffer;

-  protected int maxNextCharInd = 0;

-  protected int inBuf = 0;

-  protected int tabSize = 8;

-

-  protected void setTabSize(int i) {

-    tabSize = i;

-  }

-

-  protected int getTabSize() {

-    return tabSize;

-  }

-

-  protected void ExpandBuff(boolean wrapAround) {

-    char[] newbuffer = new char[bufsize + 2048];

-    int newbufline[] = new int[bufsize + 2048];

-    int newbufcolumn[] = new int[bufsize + 2048];

-

-    try {

-      if (wrapAround) {

-        System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);

-        System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos);

-        buffer = newbuffer;

-

-        System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);

-        System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);

-        bufline = newbufline;

-

-        System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);

-        System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);

-        bufcolumn = newbufcolumn;

-

-        maxNextCharInd = (bufpos += (bufsize - tokenBegin));

-      } else {

-        System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);

-        buffer = newbuffer;

-

-        System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);

-        bufline = newbufline;

-

-        System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);

-        bufcolumn = newbufcolumn;

-

-        maxNextCharInd = (bufpos -= tokenBegin);

-      }

-    } catch (Throwable t) {

-      throw new Error(t.getMessage());

-    }

-

-    bufsize += 2048;

-    available = bufsize;

-    tokenBegin = 0;

-  }

-

-  protected void FillBuff() throws java.io.IOException {

-    if (maxNextCharInd == available) {

-      if (available == bufsize) {

-        if (tokenBegin > 2048) {

-          bufpos = maxNextCharInd = 0;

-          available = tokenBegin;

-        } else if (tokenBegin < 0)

-          bufpos = maxNextCharInd = 0;

-        else

-          ExpandBuff(false);

-      } else if (available > tokenBegin)

-        available = bufsize;

-      else if ((tokenBegin - available) < 2048)

-        ExpandBuff(true);

-      else

-        available = tokenBegin;

-    }

-

-    int i;

-    try {

-      if ((i = inputStream.read(buffer, maxNextCharInd, available - maxNextCharInd)) == -1) {

-        inputStream.close();

-        throw new java.io.IOException();

-      } else

-        maxNextCharInd += i;

-    } catch (java.io.IOException e) {

-      --bufpos;

-      backup(0);

-      if (tokenBegin == -1)

-        tokenBegin = bufpos;

-      throw e;

-    }

-  }

-

-  /** Start. */

-  public char BeginToken() throws java.io.IOException {

-    tokenBegin = -1;

-    char c = readChar();

-    tokenBegin = bufpos;

-

-    return c;

-  }

-

-  protected void UpdateLineColumn(char c) {

-    column++;

-

-    if (prevCharIsLF) {

-      prevCharIsLF = false;

-      line += (column = 1);

-    } else if (prevCharIsCR) {

-      prevCharIsCR = false;

-      if (c == '\n') {

-        prevCharIsLF = true;

-      } else

-        line += (column = 1);

-    }

-

-    switch (c) {

-      case '\r':

-        prevCharIsCR = true;

-        break;

-      case '\n':

-        prevCharIsLF = true;

-        break;

-      case '\t':

-        column--;

-        column += (tabSize - (column % tabSize));

-        break;

-      default:

-        break;

-    }

-

-    bufline[bufpos] = line;

-    bufcolumn[bufpos] = column;

-  }

-

-  /** Read a character. */

-  public char readChar() throws java.io.IOException {

-    if (inBuf > 0) {

-      --inBuf;

-

-      if (++bufpos == bufsize)

-        bufpos = 0;

-

-      return buffer[bufpos];

-    }

-

-    if (++bufpos >= maxNextCharInd)

-      FillBuff();

-

-    char c = buffer[bufpos];

-

-    UpdateLineColumn(c);

-    return c;

-  }

-

-  @Deprecated

-  /**

-   * @deprecated

-   * @see #getEndColumn

-   */

-  public int getColumn() {

-    return bufcolumn[bufpos];

-  }

-

-  @Deprecated

-  /**

-   * @deprecated

-   * @see #getEndLine

-   */

-  public int getLine() {

-    return bufline[bufpos];

-  }

-

-  /** Get token end column number. */

-  public int getEndColumn() {

-    return bufcolumn[bufpos];

-  }

-

-  /** Get token end line number. */

-  public int getEndLine() {

-    return bufline[bufpos];

-  }

-

-  /** Get token beginning column number. */

-  public int getBeginColumn() {

-    return bufcolumn[tokenBegin];

-  }

-

-  /** Get token beginning line number. */

-  public int getBeginLine() {

-    return bufline[tokenBegin];

-  }

-

-  /** Backup a number of characters. */

-  public void backup(int amount) {

-

-    inBuf += amount;

-    if ((bufpos -= amount) < 0)

-      bufpos += bufsize;

-  }

-

-  /** Constructor. */

-  public DefaultCharStream(java.io.Reader dstream, int startline, int startcolumn, int buffersize) {

-    inputStream = dstream;

-    line = startline;

-    column = startcolumn - 1;

-

-    available = bufsize = buffersize;

-    buffer = new char[buffersize];

-    bufline = new int[buffersize];

-    bufcolumn = new int[buffersize];

-  }

-

-  /** Constructor. */

-  public DefaultCharStream(java.io.Reader dstream, int startline, int startcolumn) {

-    this(dstream, startline, startcolumn, 4096);

-  }

-

-  /** Constructor. */

-  public DefaultCharStream(java.io.Reader dstream) {

-    this(dstream, 1, 1, 4096);

-  }

-

-  /** Reinitialise. */

-  public void ReInit(java.io.Reader dstream, int startline, int startcolumn, int buffersize) {

-    inputStream = dstream;

-    line = startline;

-    column = startcolumn - 1;

-

-    if (buffer == null || buffersize != buffer.length) {

-      available = bufsize = buffersize;

-      buffer = new char[buffersize];

-      bufline = new int[buffersize];

-      bufcolumn = new int[buffersize];

-    }

-    prevCharIsLF = prevCharIsCR = false;

-    tokenBegin = inBuf = maxNextCharInd = 0;

-    bufpos = -1;

-  }

-

-  /** Reinitialise. */

-  public void ReInit(java.io.Reader dstream, int startline, int startcolumn) {

-    ReInit(dstream, startline, startcolumn, 4096);

-  }

-

-  /** Reinitialise. */

-  public void ReInit(java.io.Reader dstream) {

-    ReInit(dstream, 1, 1, 4096);

-  }

-

-  /** Constructor. */

-  public DefaultCharStream(java.io.InputStream dstream, String encoding, int startline, int startcolumn, int buffersize)

-      throws java.io.UnsupportedEncodingException {

-    this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn,

-        buffersize);

-  }

-

-  /** Constructor. */

-  public DefaultCharStream(java.io.InputStream dstream, int startline, int startcolumn, int buffersize) {

-    this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);

-  }

-

-  /** Constructor. */

-  public DefaultCharStream(java.io.InputStream dstream, String encoding, int startline, int startcolumn) throws java.io.UnsupportedEncodingException {

-    this(dstream, encoding, startline, startcolumn, 4096);

-  }

-

-  /** Constructor. */

-  public DefaultCharStream(java.io.InputStream dstream, int startline, int startcolumn) {

-    this(dstream, startline, startcolumn, 4096);

-  }

-

-  /** Constructor. */

-  public DefaultCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException {

-    this(dstream, encoding, 1, 1, 4096);

-  }

-

-  /** Constructor. */

-  public DefaultCharStream(java.io.InputStream dstream) {

-    this(dstream, 1, 1, 4096);

-  }

-

-  /** Reinitialise. */

-  public void ReInit(java.io.InputStream dstream, String encoding, int startline, int startcolumn, int buffersize)

-      throws java.io.UnsupportedEncodingException {

-    ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn,

-        buffersize);

-  }

-

-  /** Reinitialise. */

-  public void ReInit(java.io.InputStream dstream, int startline, int startcolumn, int buffersize) {

-    ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);

-  }

-

-  /** Reinitialise. */

-  public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException {

-    ReInit(dstream, encoding, 1, 1, 4096);

-  }

-

-  /** Reinitialise. */

-  public void ReInit(java.io.InputStream dstream) {

-    ReInit(dstream, 1, 1, 4096);

-  }

-

-  /** Reinitialise. */

-  public void ReInit(java.io.InputStream dstream, String encoding, int startline, int startcolumn) throws java.io.UnsupportedEncodingException {

-    ReInit(dstream, encoding, startline, startcolumn, 4096);

-  }

-

-  /** Reinitialise. */

-  public void ReInit(java.io.InputStream dstream, int startline, int startcolumn) {

-    ReInit(dstream, startline, startcolumn, 4096);

-  }

-

-  /** Get token literal value. */

-  public String GetImage() {

-    if (bufpos >= tokenBegin)

-      return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);

-    else

-      return new String(buffer, tokenBegin, bufsize - tokenBegin) + new String(buffer, 0, bufpos + 1);

-  }

-

-  /** Get the suffix. */

-  public char[] GetSuffix(int len) {

-    char[] ret = new char[len];

-

-    if ((bufpos + 1) >= len)

-      System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);

-    else {

-      System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0, len - bufpos - 1);

-      System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);

-    }

-

-    return ret;

-  }

-

-  /** Reset buffer when finished. */

-  public void Done() {

-    buffer = null;

-    bufline = null;

-    bufcolumn = null;

-  }

-

-  /**

-   * Method to adjust line and column numbers for the start of a token.

-   */

-  public void adjustBeginLineColumn(int newLine, int newCol) {

-    int start = tokenBegin;

-    int len;

-

-    if (bufpos >= tokenBegin) {

-      len = bufpos - tokenBegin + inBuf + 1;

-    } else {

-      len = bufsize - tokenBegin + bufpos + 1 + inBuf;

-    }

-

-    int i = 0, j = 0, k = 0;

-    int nextColDiff = 0, columnDiff = 0;

-

-    while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) {

-      bufline[j] = newLine;

-      nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];

-      bufcolumn[j] = newCol + columnDiff;

-      columnDiff = nextColDiff;

-      i++;

-    }

-

-    if (i < len) {

-      bufline[j] = newLine++;

-      bufcolumn[j] = newCol + columnDiff;

-

-      while (i++ < len) {

-        if (bufline[j = start % bufsize] != bufline[++start % bufsize])

-          bufline[j] = newLine++;

-        else

-          bufline[j] = newLine;

-      }

-    }

-

-    line = bufline[j];

-    column = bufcolumn[j];

-  }

-

-}

-/*

- * JavaCC - OriginalChecksum=ec4e178f3ccf05ea2ca32d15e09312ca (do not edit this

- * line)

- */

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/FormatBehavior.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/FormatBehavior.java
deleted file mode 100644
index a5c1852..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/FormatBehavior.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.format;

-

-/**

- * Defines different ways of formatting.

- * 

- * @author Werner Keil

- * @version 1.0

- * @since 0.7

- */

-public enum FormatBehavior {

-

-  /**

-   * Formatting occurs in a locale-neutral way.

-   * 

-   */

-  LOCALE_NEUTRAL,

-

-  /**

-   * Formatting occurs in a locale-sensitive way.

-   * 

-   * @see java.util.Locale

-   */

-  LOCALE_SENSITIVE

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/LocalUnitFormat.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/LocalUnitFormat.java
deleted file mode 100644
index c029bb3..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/LocalUnitFormat.java
+++ /dev/null
@@ -1,599 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Eric Russell - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.format;

-

-import static org.eclipse.uomo.units.SI.CUBIC_METRE;

-import static org.eclipse.uomo.units.SI.GRAM;

-import static org.eclipse.uomo.units.SI.KILOGRAM;

-import static org.eclipse.uomo.units.impl.system.USCustomary.LITER;

-

-import java.io.IOException;

-import java.io.StringReader;

-import java.math.BigInteger;

-import java.text.FieldPosition;

-import java.text.ParsePosition;

-import java.util.Formattable;

-import java.util.Formatter;

-import java.util.Locale;

-import java.util.Map;

-import java.util.ResourceBundle;

-

-import org.eclipse.uomo.units.AbstractConverter;

-import org.eclipse.uomo.units.AbstractConverter.Compound;

-import org.eclipse.uomo.units.AbstractUnitFormat;

-import org.eclipse.uomo.units.AbstractUnit;

-import org.eclipse.uomo.units.SymbolMap;

-import org.eclipse.uomo.units.impl.AnnotatedUnit;

-import org.eclipse.uomo.units.impl.BaseUnit;

-import org.eclipse.uomo.units.impl.TransformedUnit;

-import org.eclipse.uomo.units.impl.converter.AddConverter;

-import org.eclipse.uomo.units.impl.converter.ExpConverter;

-import org.eclipse.uomo.units.impl.converter.LogConverter;

-import org.eclipse.uomo.units.impl.converter.MultiplyConverter;

-import org.eclipse.uomo.units.impl.converter.RationalConverter;

-import org.eclipse.uomo.units.Messages;

-import javax.measure.Unit;

-import javax.measure.UnitConverter;

-

-/**

- * <p>

- * This class represents the local sensitive format.

- * </p>

- *

- * <h3>Here is the grammar for CommonUnits in Extended Backus-Naur Form (EBNF)</h3>

- * <p>

- * Note that the grammar has been left-factored to be suitable for use by a top-down parser generator such as <a

- * href="https://javacc.dev.java.net/">JavaCC</a>

- * </p>

- * <table width="90%" * align="center">

- * <tr>

- * <th colspan="3" align="left">Lexical Entities:</th>

- * </tr>

- * <tr valign="top">

- * <td>&lt;sign&gt;</td>

- * <td>:=</td>

- * <td>"+" | "-"</td>

- * </tr>

- * <tr valign="top">

- * <td>&lt;digit&gt;</td>

- * <td>:=</td>

- * <td>"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"</td>

- * </tr>

- * <tr valign="top">

- * <td>&lt;superscript_digit&gt;</td>

- * <td>:=</td>

- * <td>"⁰" | "¹" | "²" | "³" | "⁴" | "⁵" | "⁶" | "⁷" | "⁸" | "⁹"</td>

- * </tr>

- * <tr valign="top">

- * <td>&lt;integer&gt;</td>

- * <td>:=</td>

- * <td>(&lt;digit&gt;)+</td>

- * </tr>

- * <tr * valign="top">

- * <td>&lt;number&gt;</td>

- * <td>:=</td>

- * <td>(&lt;sign&gt;)? (&lt;digit&gt;)* (".")? (&lt;digit&gt;)+ (("e" | "E") (&lt;sign&gt;)? (&lt;digit&gt;)+)?</td>

- * </tr>

- * <tr valign="top">

- * <td>&lt;exponent&gt;</td>

- * <td>:=</td>

- * <td>( "^" ( &lt;sign&gt; )? &lt;integer&gt; ) <br>

- * | ( "^(" (&lt;sign&gt;)? &lt;integer&gt; ( "/" (&lt;sign&gt;)? &lt;integer&gt; )? ")" ) <br>

- * | ( &lt;superscript_digit&gt; )+</td>

- * </tr>

- * <tr valign="top">

- * <td>&lt;initial_char&gt;</td>

- * <td>:=</td>

- * <td>? Any Unicode character excluding the following: ASCII control & whitespace (&#92;u0000 - &#92;u0020), decimal digits '0'-'9', '('

- * (&#92;u0028), ')' (&#92;u0029), '*' (&#92;u002A), '+' (&#92;u002B), '-' (&#92;u002D), '.' (&#92;u002E), '/' (&#92;u005C), ':' (&#92;u003A), '^'

- * (&#92;u005E), '²' (&#92;u00B2), '³' (&#92;u00B3), '·' (&#92;u00B7), '¹' (&#92;u00B9), '⁰' (&#92;u2070), '⁴' (&#92;u2074), '⁵' (&#92;u2075), '⁶'

- * (&#92;u2076), '⁷' (&#92;u2077), '⁸' (&#92;u2078), '⁹' (&#92;u2079) ?</td>

- * </tr>

- * <tr valign="top">

- * <td>&lt;unit_identifier&gt;</td>

- * <td>:=</td>

- * <td>&lt;initial_char&gt; ( &lt;initial_char&gt; | &lt;digit&gt; )*</td>

- * </tr>

- * <tr>

- * <th colspan="3" align="left">Non-Terminals:</th>

- * </tr>

- * <tr * valign="top">

- * <td>&lt;unit_expr&gt;</td>

- * <td>:=</td>

- * <td>&lt;compound_expr&gt;</td>

- * </tr>

- * <tr valign="top">

- * <td>&lt;compound_expr&gt;</td>

- * <td>:=</td>

- * <td>&lt;add_expr&gt; ( ":" &lt;add_expr&gt; )*</td>

- * </tr>

- * <tr valign="top">

- * <td>&lt;add_expr&gt;</td>

- * <td>:=</td>

- * <td>( &lt;number&gt; &lt;sign&gt; )? &lt;mul_expr&gt; ( &lt;sign&gt; &lt;number&gt; )?</td>

- * </tr>

- * <tr valign="top">

- * <td>&lt;mul_expr&gt;</td>

- * <td>:=</td>

- * <td>&lt;exponent_expr&gt; ( ( ( "*" | "·" ) &lt;exponent_expr&gt; ) | ( "/" &lt;exponent_expr&gt; ) )*</td>

- * </tr>

- * <tr valign="top">

- * <td>&lt;exponent_expr&gt;</td>

- * <td>:=</td>

- * <td>( &lt;atomic_expr&gt; ( &lt;exponent&gt; )? ) <br>

- * | (&lt;integer&gt; "^" &lt;atomic_expr&gt;) <br>

- * | ( ( "log" ( &lt;integer&gt; )? ) | "ln" ) "(" &lt;add_expr&gt; ")" )</td>

- * </tr>

- * <tr valign="top">

- * <td>&lt;atomic_expr&gt;</td>

- * <td>:=</td>

- * <td>&lt;number&gt; <br>

- * | &lt;unit_identifier&gt; <br>

- * | ( "(" &lt;add_expr&gt; ")" )</td>

- * </tr>

- * </table>

- *

- * @author <a href="mailto:eric-r@northwestern.edu">Eric Russell</a>

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @version 1.0.2, April 30, 2017

- * @since 1.0

- */

-public class LocalUnitFormat extends AbstractUnitFormat {

-

-  // ////////////////////////////////////////////////////

-  // Class variables //

-  // ////////////////////////////////////////////////////

-  /**

-   * DefaultQuantityFactory locale instance. If the default locale is changed after the class is initialized, this instance will no longer be used.

-   */

-  private static final LocalUnitFormat DEFAULT_INSTANCE = new LocalUnitFormat(SymbolMap.of(ResourceBundle.getBundle(LocalUnitFormat.class

-      .getPackage().getName() + ".messages")));

-  /**

-   * Multiplicand character

-   */

-  private static final char MIDDLE_DOT = '\u00b7';

-  /**

-   * Operator precedence for the addition and subtraction operations

-   */

-  private static final int ADDITION_PRECEDENCE = 0;

-  /**

-   * Operator precedence for the multiplication and division operations

-   */

-  private static final int PRODUCT_PRECEDENCE = ADDITION_PRECEDENCE + 2;

-  /**

-   * Operator precedence for the exponentiation and logarithm operations

-   */

-  private static final int EXPONENT_PRECEDENCE = PRODUCT_PRECEDENCE + 2;

-  /**

-   * Operator precedence for a unit identifier containing no mathematical operations (i.e., consisting exclusively of an identifier and possibly a

-   * prefix). Defined to be <code>Integer.MAX_VALUE</code> so that no operator can have a higher precedence.

-   */

-  private static final int NOOP_PRECEDENCE = Integer.MAX_VALUE;

-

-  // /////////////////

-  // Class methods //

-  // /////////////////

-  /**

-   * Returns the instance for the current default locale (non-ascii characters are allowed)

-   */

-  public static LocalUnitFormat getInstance() {

-    return DEFAULT_INSTANCE;

-  }

-

-  /**

-   * Returns an instance for the given locale.

-   * 

-   * @param locale

-   */

-  public static LocalUnitFormat getInstance(Locale locale) {

-    return new LocalUnitFormat(SymbolMap.of(ResourceBundle.getBundle(LocalUnitFormat.class.getPackage().getName() + ".messages", locale)));

-  }

-

-  /** Returns an instance for the given symbol map. */

-  public static LocalUnitFormat getInstance(SymbolMap symbols) {

-    return new LocalUnitFormat(symbols);

-  }

-

-  // //////////////////////

-  // Instance variables //

-  // //////////////////////

-  /**

-   * The symbol map used by this instance to map between {@link Unit Unit}s and <code>String</code>s, etc...

-   */

-  private final transient SymbolMap symbolMap;

-

-  // ////////////////

-  // Constructors //

-  // ////////////////

-  /**

-   * Base constructor.

-   *

-   * @param symbols

-   *          the symbol mapping.

-   */

-  private LocalUnitFormat(SymbolMap symbols) {

-    symbolMap = symbols;

-  }

-

-  // //////////////////////

-  // Instance methods //

-  // //////////////////////

-  /**

-   * Get the symbol map used by this instance to map between {@link AbstractUnit Unit}s and <code>String</code>s, etc...

-   * 

-   * @return SymbolMap the current symbol map

-   */

-  @Override

-  protected SymbolMap getSymbols() {

-    return symbolMap;

-  }

-

-  // //////////////

-  // Formatting //

-  // //////////////

-  @Override

-  public Appendable format(Unit<?> unit, Appendable appendable) throws IOException {

-    if (!(unit instanceof AbstractUnit)) {

-      return appendable.append(unit.toString()); // Unknown unit (use

-      // intrinsic toString()

-      // method)

-    }

-    formatInternal(unit, appendable);

-    return appendable;

-  }

-

-  public boolean isLocaleSensitive() {

-    return true;

-  }

-

-  protected Unit<?> parse(CharSequence csq, int index) throws ParserException {

-    return parse(csq, new ParsePosition(index));

-  }

-

-  public Unit<?> parse(CharSequence csq, ParsePosition cursor) throws ParserException {

-    // Parsing reads the whole character sequence from the parse position.

-    int start = cursor.getIndex();

-    int end = csq.length();

-    if (end <= start) {

-      return AbstractUnit.ONE;

-    }

-    String source = csq.subSequence(start, end).toString().trim();

-    if (source.length() == 0) {

-      return AbstractUnit.ONE;

-    }

-    try {

-      LocalUnitFormatParser parser = new LocalUnitFormatParser(symbolMap, new StringReader(source));

-      Unit<?> result = parser.parseUnit();

-      cursor.setIndex(end);

-      return result;

-    } catch (TokenException e) {

-      if (e.currentToken != null) {

-        cursor.setErrorIndex(start + e.currentToken.endColumn);

-      } else {

-        cursor.setErrorIndex(start);

-      }

-      throw new IllegalArgumentException(e); // TODO should we throw

-      // ParserException here,

-      // too?

-    } catch (TokenMgrError e) {

-      cursor.setErrorIndex(start);

-      throw new ParserException(e);

-    }

-  }

-

-  @Override

-  public Unit<? extends Quantity<?>> parse(CharSequence csq) throws ParserException {

-    return parse(csq, new ParsePosition(0));

-  }

-

-  /**

-   * Format the given unit to the given StringBuilder, then return the operator precedence of the outermost operator in the unit expression that was

-   * formatted. See {@link ConverterFormat} for the constants that define the various precedence values.

-   * 

-   * @param unit

-   *          the unit to be formatted

-   * @param buffer

-   *          the <code>StringBuilder</code> to be written to

-   * @return the operator precedence of the outermost operator in the unit expression that was output

-   */

-  /*

-   * private int formatInternal(Unit<?> unit, Appendable buffer) throws

-   * IOException { if (unit instanceof AnnotatedUnit) { unit =

-   * ((AnnotatedUnit) unit).getActualUnit(); } String symbol =

-   * symbolMap.getSymbol((AbstractUnit<?>) unit); if (symbol != null) {

-   * buffer.append(symbol); return NOOP_PRECEDENCE; } else if

-   * (unit.getBaseUnits() != null) { Map<? extends Unit, Integer> productUnits

-   * = unit.getBaseUnits(); int negativeExponentCount = 0; // Write positive

-   * exponents first... boolean start = true; for (Unit u :

-   * productUnits.keySet()) { int pow = productUnits.get(u); if (pow >= 0) {

-   * formatExponent(u, pow, 1, !start, buffer); start = false; } else {

-   * negativeExponentCount += 1; } } // ..then write negative exponents. if

-   * (negativeExponentCount > 0) { if (start) { buffer.append('1'); }

-   * buffer.append('/'); if (negativeExponentCount > 1) { buffer.append('(');

-   * } start = true; for (Unit u : productUnits.keySet()) { int pow =

-   * productUnits.get(u); if (pow < 0) { formatExponent(u, -pow, 1, !start,

-   * buffer); start = false; } } if (negativeExponentCount > 1) {

-   * buffer.append(')'); } } return PRODUCT_PRECEDENCE; } else if

-   * ((!((AbstractUnit)unit).isSystemUnit()) || unit.equals(Units.KILOGRAM)) {

-   * UnitConverter converter = null; boolean printSeparator = false;

-   * StringBuffer temp = new StringBuffer(); int unitPrecedence =

-   * NOOP_PRECEDENCE; if (unit.equals(Units.KILOGRAM)) { // A special case

-   * because KILOGRAM is a BaseUnit instead of // a transformed unit, even

-   * though it has a prefix. converter = MetricPrefix.KILO.getConverter();

-   * unitPrecedence = formatInternal(Units.GRAM, temp); printSeparator = true;

-   * } else { Unit parentUnit = unit.getSystemUnit(); converter =

-   * unit.getConverterTo(parentUnit); if (parentUnit.equals(Units.KILOGRAM)) {

-   * // More special-case hackery to work around gram/kilogram // incosistency

-   * parentUnit = Units.GRAM; converter =

-   * converter.concatenate(MetricPrefix.KILO.getConverter()); } unitPrecedence

-   * = formatInternal(parentUnit, temp); printSeparator =

-   * !parentUnit.equals(Units.ONE); } int result = formatConverter(converter,

-   * printSeparator, unitPrecedence, temp); buffer.append(temp); return

-   * result; } else if (unit.getSymbol() != null) {

-   * buffer.append(unit.getSymbol()); return NOOP_PRECEDENCE; } else { throw

-   * new IllegalArgumentException(

-   * "Cannot format the given Object as a Unit (unsupported unit type " +

-   * unit.getClass().getName() + ")"); } }

-   */

-  @SuppressWarnings({ "rawtypes", "unchecked" })

-  private int formatInternal(Unit<?> unit, Appendable buffer) throws IOException {

-    if (unit instanceof AnnotatedUnit<?>) {

-      unit = ((AnnotatedUnit<?>) unit).getActualUnit();

-      // } else if (unit instanceof ProductUnit<?>) {

-      // ProductUnit<?> p = (ProductUnit<?>)unit;

-    }

-    String symbol = symbolMap.getSymbol((AbstractUnit<?>) unit);

-    if (symbol != null) {

-      buffer.append(symbol);

-      return NOOP_PRECEDENCE;

-    } else if (unit.getBaseUnits() != null) {

-      Map<Unit<?>, Integer> productUnits = (Map<Unit<?>, Integer>) unit.getBaseUnits();

-      int negativeExponentCount = 0;

-      // Write positive exponents first...

-      boolean start = true;

-      for (Map.Entry<Unit<?>, Integer> e : productUnits.entrySet()) {

-        int pow = e.getValue();

-        if (pow >= 0) {

-          formatExponent(e.getKey(), pow, 1, !start, buffer);

-          start = false;

-        } else {

-          negativeExponentCount += 1;

-        }

-      }

-      // ..then write negative exponents.

-      if (negativeExponentCount > 0) {

-        if (start) {

-          buffer.append('1');

-        }

-        buffer.append('/');

-        if (negativeExponentCount > 1) {

-          buffer.append('(');

-        }

-        start = true;

-        for (Map.Entry<Unit<?>, Integer> e : productUnits.entrySet()) {

-          int pow = e.getValue();

-          if (pow < 0) {

-            formatExponent(e.getKey(), -pow, 1, !start, buffer);

-            start = false;

-          }

-        }

-        if (negativeExponentCount > 1) {

-          buffer.append(')');

-        }

-      }

-      return PRODUCT_PRECEDENCE;

-    } else if (unit instanceof BaseUnit<?>) {

-      buffer.append(((BaseUnit<?>) unit).getSymbol());

-      return NOOP_PRECEDENCE;

-    } else if (unit instanceof AlternateUnit<?>) { // unit.getSymbol() !=

-      // null) { // Alternate

-      // unit.

-      buffer.append(unit.getSymbol());

-      return NOOP_PRECEDENCE;

-    } else { // A transformed unit or new unit type!

-      UnitConverter converter = null;

-      boolean printSeparator = false;

-      StringBuilder temp = new StringBuilder();

-      int unitPrecedence = NOOP_PRECEDENCE;

-      Unit<?> parentUnit = unit.getSystemUnit();

-      converter = ((AbstractUnit<?>) unit).getSystemConverter();

-      if (KILOGRAM.equals(parentUnit)) {

-        // More special-case hackery to work around gram/kilogram

-        // incosistency

-        if (unit.equals(GRAM)) {

-          buffer.append(symbolMap.getSymbol(GRAM));

-          return NOOP_PRECEDENCE;

-        }

-        parentUnit = GRAM;

-        if (unit instanceof TransformedUnit<?>) {

-          converter = ((TransformedUnit<?>) unit).getConverter();

-        } else {

-          converter = unit.getConverterTo((Unit) GRAM);

-        }

-      } else if (CUBIC_METRE.equals(parentUnit)) {

-        if (converter != null) {

-          parentUnit = LITRE;

-        }

-      }

-

-      if (unit instanceof TransformedUnit) {

-        TransformedUnit<?> transUnit = (TransformedUnit<?>) unit;

-        if (parentUnit == null)

-          parentUnit = transUnit.getParentUnit();

-        // String x = parentUnit.toString();

-        converter = transUnit.getConverter();

-      }

-

-      unitPrecedence = formatInternal(parentUnit, temp);

-      printSeparator = !parentUnit.equals(AbstractUnit.ONE);

-      int result = formatConverter(converter, printSeparator, unitPrecedence, temp);

-      buffer.append(temp);

-      return result;

-    }

-  }

-

-  /**

-   * Format the given unit raised to the given fractional power to the given <code>StringBuffer</code>.

-   * 

-   * @param unit

-   *          Unit the unit to be formatted

-   * @param pow

-   *          int the numerator of the fractional power

-   * @param root

-   *          int the denominator of the fractional power

-   * @param continued

-   *          boolean <code>true</code> if the converter expression should begin with an operator, otherwise <code>false</code>. This will always be

-   *          true unless the unit being modified is equal to Unit.ONE.

-   * @param buffer

-   *          StringBuffer the buffer to append to. No assumptions should be made about its content.

-   */

-  private void formatExponent(Unit<?> unit, int pow, int root, boolean continued, Appendable buffer) throws IOException {

-    if (continued) {

-      buffer.append(MIDDLE_DOT);

-    }

-    StringBuffer temp = new StringBuffer();

-    int unitPrecedence = formatInternal(unit, temp);

-    if (unitPrecedence < PRODUCT_PRECEDENCE) {

-      temp.insert(0, '(');

-      temp.append(')');

-    }

-    buffer.append(temp);

-    if ((root == 1) && (pow == 1)) {

-      // do nothing

-    } else if ((root == 1) && (pow > 1)) {

-      String powStr = Integer.toString(pow);

-      for (int i = 0; i < powStr.length(); i += 1) {

-        char c = powStr.charAt(i);

-        switch (c) {

-          case '0':

-            buffer.append('\u2070');

-            break;

-          case '1':

-            buffer.append('\u00b9');

-            break;

-          case '2':

-            buffer.append('\u00b2');

-            break;

-          case '3':

-            buffer.append('\u00b3');

-            break;

-          case '4':

-            buffer.append('\u2074');

-            break;

-          case '5':

-            buffer.append('\u2075');

-            break;

-          case '6':

-            buffer.append('\u2076');

-            break;

-          case '7':

-            buffer.append('\u2077');

-            break;

-          case '8':

-            buffer.append('\u2078');

-            break;

-          case '9':

-            buffer.append('\u2079');

-            break;

-        }

-      }

-    } else if (root == 1) {

-      buffer.append("^");

-      buffer.append(String.valueOf(pow));

-    } else {

-      buffer.append("^(");

-      buffer.append(String.valueOf(pow));

-      buffer.append('/');

-      buffer.append(String.valueOf(root));

-      buffer.append(')');

-    }

-  }

-

-  /**

-   * Formats the given converter to the given StringBuffer and returns the operator precedence of the converter's mathematical operation. This is the

-   * default implementation, which supports all built-in UnitConverter implementations. Note that it recursively calls itself in the case of a

-   * {@link javax.measure.converter.UnitConverter.Compound Compound} converter.

-   * 

-   * @param converter

-   *          the converter to be formatted

-   * @param continued

-   *          <code>true</code> if the converter expression should begin with an operator, otherwise <code>false</code>.

-   * @param unitPrecedence

-   *          the operator precedence of the operation expressed by the unit being modified by the given converter.

-   * @param buffer

-   *          the <code>StringBuffer</code> to append to.

-   * @return the operator precedence of the given UnitConverter

-   */

-  private int formatConverter(UnitConverter converter, boolean continued, int unitPrecedence, StringBuilder buffer) {

-    MetricPrefix prefix = symbolMap.getPrefix(converter);

-    if ((prefix != null) && (unitPrecedence == NOOP_PRECEDENCE)) {

-      buffer.insert(0, symbolMap.getSymbol(prefix));

-      return NOOP_PRECEDENCE;

-    } else if (converter instanceof AddConverter) {

-      if (unitPrecedence < ADDITION_PRECEDENCE) {

-        buffer.insert(0, '(');

-        buffer.append(')');

-      }

-      double offset = ((AddConverter) converter).getOffset();

-      if (offset < 0) {

-        buffer.append("-");

-        offset = -offset;

-      } else if (continued) {

-        buffer.append("+");

-      }

-      long lOffset = (long) offset;

-      if (lOffset == offset) {

-        buffer.append(lOffset);

-      } else {

-        buffer.append(offset);

-      }

-      return ADDITION_PRECEDENCE;

-    } else if (converter instanceof MultiplyConverter) {

-      if (unitPrecedence < PRODUCT_PRECEDENCE) {

-        buffer.insert(0, '(');

-        buffer.append(')');

-      }

-      if (continued) {

-        buffer.append(MIDDLE_DOT);

-      }

-      double factor = ((MultiplyConverter) converter).getFactor();

-      long lFactor = (long) factor;

-      if (lFactor == factor) {

-        buffer.append(lFactor);

-      } else {

-        buffer.append(factor);

-      }

-      return PRODUCT_PRECEDENCE;

-    } else if (converter instanceof RationalConverter) {

-      if (unitPrecedence < PRODUCT_PRECEDENCE) {

-        buffer.insert(0, '(');

-        buffer.append(')');

-      }

-      RationalConverter rationalConverter = (RationalConverter) converter;

-      if (!rationalConverter.getDividend().equals(BigInteger.ONE)) {

-        if (continued) {

-          buffer.append(MIDDLE_DOT);

-        }

-        buffer.append(rationalConverter.getDividend());

-      }

-      if (!rationalConverter.getDivisor().equals(BigInteger.ONE)) {

-        buffer.append('/');

-        buffer.append(rationalConverter.getDivisor());

-      }

-      return PRODUCT_PRECEDENCE;

-    } else { // All other converter type (e.g. exponential) we use the

-      // string representation.

-      buffer.insert(0, converter.toString() + "(");

-      buffer.append(")");

-      return EXPONENT_PRECEDENCE;

-    }

-  }

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/LocalUnitFormatParser.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/LocalUnitFormatParser.java
deleted file mode 100644
index 789733f..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/LocalUnitFormatParser.java
+++ /dev/null
@@ -1,883 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.format;

-

-import static org.eclipse.uomo.units.impl.format.UnitTokenConstants.*;

-

-import javax.measure.Unit;

-

-import org.eclipse.uomo.units.AbstractUnit;

-import org.eclipse.uomo.units.impl.converter.LogConverter;

-import org.eclipse.uomo.units.impl.system.MetricPrefix;

-

-/**

- * @deprecated use {@link UnitFormatParser} FIXME there are some details e.g. Exception handling that are different, try to resolve or keep LUFP

- */

-@SuppressWarnings({ "rawtypes", "unchecked" })

-public final class LocalUnitFormatParser {

-

-  private static class Exponent {

-

-    public final int pow;

-

-    public final int root;

-

-    public Exponent(int pow, int root) {

-      this.pow = pow;

-      this.root = root;

-    }

-  }

-

-  private SymbolMapImpl symbols;

-

-  public LocalUnitFormatParser(SymbolMapImpl symbols, java.io.Reader in) {

-    this(in);

-    this.symbols = symbols;

-  }

-

-  final public Unit parseUnit() throws TokenException {

-    Unit result = CompoundExpr();

-    consumeToken(0);

-    {

-      return result;

-    }

-  }

-

-  final public Unit CompoundExpr() throws TokenException {

-    throw new UnsupportedOperationException("Compound units not supported");

-  }

-

-  final public Unit AddExpr() throws TokenException {

-    Unit result = AbstractUnit.ONE;

-    Number n1 = null;

-    Token sign1 = null;

-    Number n2 = null;

-    Token sign2 = null;

-    if (jj_2_1(2147483647)) {

-      n1 = NumberExpr();

-      sign1 = Sign();

-    } else {

-    }

-    result = MulExpr();

-    switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-      case PLUS:

-      case MINUS:

-        sign2 = Sign();

-        n2 = NumberExpr();

-        break;

-      default:

-        laA[1] = genInt;

-    }

-    if (n1 != null) {

-      if (sign1.image.equals("-")) {

-        result = result.multiply(-1);

-      }

-      result = result.shift(n1.doubleValue());

-    }

-    if (n2 != null) {

-      double offset = n2.doubleValue();

-      if (sign2.image.equals("-")) {

-        offset = -offset;

-      }

-      result = result.shift(offset);

-    }

-    {

-      return result;

-    }

-  }

-

-  final public Unit MulExpr() throws TokenException {

-    Unit result = AbstractUnit.ONE;

-    Unit temp = AbstractUnit.ONE;

-    result = ExponentExpr();

-    label_2: while (true) {

-      switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-        case ASTERISK:

-        case MIDDLE_DOT:

-        case SOLIDUS:

-          break;

-        default:

-          laA[2] = genInt;

-          break label_2;

-      }

-      switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-        case ASTERISK:

-        case MIDDLE_DOT:

-          switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-            case ASTERISK:

-              consumeToken(ASTERISK);

-              break;

-            case MIDDLE_DOT:

-              consumeToken(MIDDLE_DOT);

-              break;

-            default:

-              laA[3] = genInt;

-              consumeToken(-1);

-              throw new TokenException();

-          }

-          temp = ExponentExpr();

-          result = result.multiply(temp);

-          break;

-        case SOLIDUS:

-          consumeToken(SOLIDUS);

-          temp = ExponentExpr();

-          result = result.divide(temp);

-          break;

-        default:

-          laA[4] = genInt;

-          consumeToken(-1);

-          throw new TokenException();

-      }

-    }

-    {

-      return result;

-    }

-  }

-

-  final public Unit ExponentExpr() throws TokenException {

-    Unit result = AbstractUnit.ONE;

-    Exponent exponent = null;

-    Token token = null;

-    if (jj_2_2(2147483647)) {

-      switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-        case INTEGER:

-          token = consumeToken(INTEGER);

-          break;

-        case E:

-          token = consumeToken(E);

-          break;

-        default:

-          laA[5] = genInt;

-          consumeToken(-1);

-          throw new TokenException();

-      }

-      consumeToken(CARET);

-      result = AtomicExpr();

-      double base;

-      if (token.kind == INTEGER) {

-        base = Integer.parseInt(token.image);

-      } else {

-        base = StrictMath.E;

-      }

-      {

-        return result.transform(new LogConverter(base).inverse());

-      }

-    } else {

-      switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-        case OPEN_PAREN:

-        case INTEGER:

-        case FLOATING_POINT:

-        case UNIT_IDENTIFIER:

-          result = AtomicExpr();

-          switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-            case CARET:

-            case SUPERSCRIPT_INTEGER:

-              exponent = Exp();

-              break;

-            default:

-              laA[6] = genInt;

-          }

-          if (exponent != null) {

-            if (exponent.pow != 1) {

-              result = result.pow(exponent.pow);

-            }

-            if (exponent.root != 1) {

-              result = result.root(exponent.root);

-            }

-          }

-          {

-            return result;

-          }

-        case LOG:

-        case NAT_LOG:

-          switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-            case LOG:

-              consumeToken(LOG);

-              switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-                case INTEGER:

-                  token = consumeToken(INTEGER);

-                  break;

-                default:

-                  laA[7] = genInt;

-              }

-              break;

-            case NAT_LOG:

-              token = consumeToken(NAT_LOG);

-              break;

-            default:

-              laA[8] = genInt;

-              consumeToken(-1);

-              throw new TokenException();

-          }

-          consumeToken(OPEN_PAREN);

-          result = AddExpr();

-          consumeToken(CLOSE_PAREN);

-          double base = 10;

-          if (token != null) {

-            if (token.kind == INTEGER) {

-              base = Integer.parseInt(token.image);

-            } else if (token.kind == NAT_LOG) {

-              base = StrictMath.E;

-            }

-          }

-          {

-            return result.transform(new LogConverter(base));

-          }

-        default:

-          laA[9] = genInt;

-          consumeToken(-1);

-          throw new TokenException();

-      }

-    }

-  }

-

-  final public Unit AtomicExpr() throws TokenException {

-    Unit result = AbstractUnit.ONE;

-    Number n = null;

-    Token token = null;

-    switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-      case INTEGER:

-      case FLOATING_POINT:

-        n = NumberExpr();

-        if (n instanceof Integer) {

-          {

-            return result.multiply(n.intValue());

-          }

-        } else {

-          {

-            return result.multiply(n.doubleValue());

-          }

-        }

-      case UNIT_IDENTIFIER:

-        token = consumeToken(UNIT_IDENTIFIER);

-        Unit unit = symbols.getUnit(token.image);

-        if (unit == null) {

-          MetricPrefix prefix = symbols.getPrefix(token.image);

-          if (prefix != null) {

-            String prefixSymbol = symbols.getSymbol(prefix);

-            unit = symbols.getUnit(token.image.substring(prefixSymbol.length()));

-            if (unit != null) {

-              {

-                return unit.transform(prefix.getConverter());

-              }

-            }

-          }

-          {

-            throw new TokenException();

-          }

-        } else {

-          {

-            return unit;

-          }

-        }

-      case OPEN_PAREN:

-        consumeToken(OPEN_PAREN);

-        result = AddExpr();

-        consumeToken(CLOSE_PAREN);

-        {

-          return result;

-        }

-      default:

-        laA[10] = genInt;

-        consumeToken(-1);

-        throw new TokenException();

-    }

-  }

-

-  final public Token Sign() throws TokenException {

-    Token result = null;

-    switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-      case PLUS:

-        result = consumeToken(PLUS);

-        break;

-      case MINUS:

-        result = consumeToken(MINUS);

-        break;

-      default:

-        laA[11] = genInt;

-        consumeToken(-1);

-        throw new TokenException();

-    }

-    {

-      return result;

-    }

-  }

-

-  final public Number NumberExpr() throws TokenException {

-    Token token = null;

-    switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-      case INTEGER:

-        token = consumeToken(INTEGER);

-        {

-          return Long.valueOf(token.image);

-        }

-      case FLOATING_POINT:

-        token = consumeToken(FLOATING_POINT);

-        {

-          return Double.valueOf(token.image);

-        }

-      default:

-        laA[12] = genInt;

-        consumeToken(-1);

-        throw new TokenException();

-    }

-  }

-

-  final public Exponent Exp() throws TokenException {

-    Token powSign = null;

-    Token powToken = null;

-    Token rootSign = null;

-    Token rootToken = null;

-    switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-      case CARET:

-        consumeToken(CARET);

-        switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-          case PLUS:

-          case MINUS:

-          case INTEGER:

-            switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-              case PLUS:

-              case MINUS:

-                powSign = Sign();

-                break;

-              default:

-                laA[13] = genInt;

-            }

-            powToken = consumeToken(INTEGER);

-            int pow = Integer.parseInt(powToken.image);

-            if ((powSign != null) && powSign.image.equals("-")) {

-              pow = -pow;

-            }

-            {

-              return new Exponent(pow, 1);

-            }

-          case OPEN_PAREN:

-            consumeToken(OPEN_PAREN);

-            switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-              case PLUS:

-              case MINUS:

-                powSign = Sign();

-                break;

-              default:

-                laA[14] = genInt;

-            }

-            powToken = consumeToken(INTEGER);

-            switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-              case SOLIDUS:

-                consumeToken(SOLIDUS);

-                switch ((nextTokenIndex == -1) ? jj_ntk() : nextTokenIndex) {

-                  case PLUS:

-                  case MINUS:

-                    rootSign = Sign();

-                    break;

-                  default:

-                    laA[15] = genInt;

-                }

-                rootToken = consumeToken(INTEGER);

-                break;

-              default:

-                laA[16] = genInt;

-            }

-            consumeToken(CLOSE_PAREN);

-            pow = Integer.parseInt(powToken.image);

-            if ((powSign != null) && powSign.image.equals("-")) {

-              pow = -pow;

-            }

-            int root = 1;

-            if (rootToken != null) {

-              root = Integer.parseInt(rootToken.image);

-              if ((rootSign != null) && rootSign.image.equals("-")) {

-                root = -root;

-              }

-            }

-            {

-              return new Exponent(pow, root);

-            }

-          default:

-            laA[17] = genInt;

-            consumeToken(-1);

-            throw new TokenException();

-        }

-      case SUPERSCRIPT_INTEGER:

-        powToken = consumeToken(SUPERSCRIPT_INTEGER);

-        int pow = 0;

-        for (int i = 0; i < powToken.image.length(); i += 1) {

-          pow *= 10;

-          switch (powToken.image.charAt(i)) {

-            case '\u00b9':

-              pow += 1;

-              break;

-            case '\u00b2':

-              pow += 2;

-              break;

-            case '\u00b3':

-              pow += 3;

-              break;

-            case '\u2074':

-              pow += 4;

-              break;

-            case '\u2075':

-              pow += 5;

-              break;

-            case '\u2076':

-              pow += 6;

-              break;

-            case '\u2077':

-              pow += 7;

-              break;

-            case '\u2078':

-              pow += 8;

-              break;

-            case '\u2079':

-              pow += 9;

-              break;

-          }

-        }

-        {

-          return new Exponent(pow, 1);

-        }

-      default:

-        laA[18] = genInt;

-        consumeToken(-1);

-        throw new TokenException();

-    }

-  }

-

-  private boolean jj_2_1(int xla) {

-    laInt = xla;

-    lastpos = scanpos = token;

-    try {

-      return !jj_3_1();

-    } catch (LookaheadSuccess ls) {

-      return true;

-    } finally {

-      jj_save(0, xla);

-    }

-  }

-

-  private boolean jj_2_2(int xla) {

-    laInt = xla;

-    lastpos = scanpos = token;

-    try {

-      return !jj_3_2();

-    } catch (LookaheadSuccess ls) {

-      return true;

-    } finally {

-      jj_save(1, xla);

-    }

-  }

-

-  private boolean jj_3R_3() {

-    Token xsp;

-    xsp = scanpos;

-    if (jj_3R_5()) {

-      scanpos = xsp;

-      if (jj_3R_6())

-        return true;

-    }

-    return false;

-  }

-

-  private boolean jj_3R_6() {

-    return scanToken(FLOATING_POINT);

-  }

-

-  private boolean jj_3_2() {

-    Token xsp;

-    xsp = scanpos;

-    if (scanToken(14)) {

-      scanpos = xsp;

-      if (scanToken(19))

-        return true;

-    }

-    return scanToken(CARET);

-  }

-

-  private boolean jj_3_1() {

-    return jj_3R_3() || jj_3R_4();

-  }

-

-  private boolean jj_3R_4() {

-    Token xsp;

-    xsp = scanpos;

-    if (scanToken(5)) {

-      scanpos = xsp;

-      if (scanToken(6))

-        return true;

-    }

-    return false;

-  }

-

-  private boolean jj_3R_5() {

-    return scanToken(INTEGER);

-  }

-

-  /** Generated Token Manager. */

-  public UnitTokenManager tokenSource;

-

-  DefaultCharStream inputStream;

-

-  /** Current token. */

-  public Token token;

-

-  /** Next token. */

-  public Token nextToken;

-

-  private int nextTokenIndex;

-

-  private Token scanpos, lastpos;

-

-  private int laInt;

-

-  private int genInt;

-

-  final private int[] laA = new int[19];

-

-  static private int[] laB;

-

-  static {

-    init();

-  }

-

-  private static void init() {

-    laB = new int[] { 0x800, 0x60, 0x380, 0x180, 0x380, 0x84000, 0x8400, 0x4000, 0x60000, 0x175000, 0x115000, 0x60, 0x14000, 0x60, 0x60, 0x60, 0x200,

-        0x5060, 0x8400, };

-  }

-

-  final private JJCalls[] rtns = new JJCalls[2];

-

-  private boolean rescan = false;

-

-  private int gcInt = 0;

-

-  /** Constructor with InputStream. */

-  public LocalUnitFormatParser(java.io.InputStream stream) {

-    this(stream, null);

-  }

-

-  /** Constructor with InputStream and supplied encoding */

-  public LocalUnitFormatParser(java.io.InputStream stream, String encoding) {

-    try {

-      inputStream = new DefaultCharStream(stream, encoding, 1, 1);

-    } catch (java.io.UnsupportedEncodingException e) {

-      throw new RuntimeException(e);

-    }

-    tokenSource = new UnitTokenManager(inputStream);

-    token = new Token();

-    nextTokenIndex = -1;

-    genInt = 0;

-    for (int i = 0; i < 19; i++) {

-      laA[i] = -1;

-    }

-    for (int i = 0; i < rtns.length; i++) {

-      rtns[i] = new JJCalls();

-    }

-  }

-

-  /** Reinitialise. */

-  public void ReInit(java.io.InputStream stream) {

-    ReInit(stream, null);

-  }

-

-  /** Reinitialise. */

-  public void ReInit(java.io.InputStream stream, String encoding) {

-    try {

-      inputStream.ReInit(stream, encoding, 1, 1);

-    } catch (java.io.UnsupportedEncodingException e) {

-      throw new RuntimeException(e);

-    }

-    tokenSource.ReInit(inputStream);

-    token = new Token();

-    nextTokenIndex = -1;

-    genInt = 0;

-    for (int i = 0; i < 19; i++) {

-      laA[i] = -1;

-    }

-    for (int i = 0; i < rtns.length; i++) {

-      rtns[i] = new JJCalls();

-    }

-  }

-

-  /** Constructor. */

-  public LocalUnitFormatParser(java.io.Reader stream) {

-    inputStream = new DefaultCharStream(stream, 1, 1);

-    tokenSource = new UnitTokenManager(inputStream);

-    token = new Token();

-    nextTokenIndex = -1;

-    genInt = 0;

-    for (int i = 0; i < 19; i++) {

-      laA[i] = -1;

-    }

-    for (int i = 0; i < rtns.length; i++) {

-      rtns[i] = new JJCalls();

-    }

-  }

-

-  /** Reinitialise. */

-  public void ReInit(java.io.Reader stream) {

-    inputStream.ReInit(stream, 1, 1);

-    tokenSource.ReInit(inputStream);

-    token = new Token();

-    nextTokenIndex = -1;

-    genInt = 0;

-    for (int i = 0; i < 19; i++) {

-      laA[i] = -1;

-    }

-    for (int i = 0; i < rtns.length; i++) {

-      rtns[i] = new JJCalls();

-    }

-  }

-

-  /** Constructor with generated Token Manager. */

-  public LocalUnitFormatParser(UnitTokenManager tm) {

-    tokenSource = tm;

-    token = new Token();

-    nextTokenIndex = -1;

-    genInt = 0;

-    for (int i = 0; i < 19; i++) {

-      laA[i] = -1;

-    }

-    for (int i = 0; i < rtns.length; i++) {

-      rtns[i] = new JJCalls();

-    }

-  }

-

-  /** Reinitialise. */

-  public void ReInit(UnitTokenManager tm) {

-    tokenSource = tm;

-    token = new Token();

-    nextTokenIndex = -1;

-    genInt = 0;

-    for (int i = 0; i < 19; i++) {

-      laA[i] = -1;

-    }

-    for (int i = 0; i < rtns.length; i++) {

-      rtns[i] = new JJCalls();

-    }

-  }

-

-  private Token consumeToken(int kind) throws TokenException {

-    Token oldToken;

-    if ((oldToken = token).next != null)

-      token = token.next;

-    else

-      token = token.next = tokenSource.getNextToken();

-    nextTokenIndex = -1;

-    if (token.kind == kind) {

-      genInt++;

-      if (++gcInt > 100) {

-        gcInt = 0;

-        for (JJCalls jj_2_rtn : rtns) {

-          JJCalls c = jj_2_rtn;

-          while (c != null) {

-            if (c.gen < genInt)

-              c.first = null;

-            c = c.next;

-          }

-        }

-      }

-      return token;

-    }

-    token = oldToken;

-    this.kind = kind;

-    throw raiseTokenException();

-  }

-

-  static private final class LookaheadSuccess extends java.lang.RuntimeException {

-    private static final long serialVersionUID = 2205332054119123041L;

-  }

-

-  private boolean scanToken(int kind) {

-    if (scanpos == lastpos) {

-      laInt--;

-      if (scanpos.next == null) {

-        lastpos = scanpos = scanpos.next = tokenSource.getNextToken();

-      } else {

-        lastpos = scanpos = scanpos.next;

-      }

-    } else {

-      scanpos = scanpos.next;

-    }

-    if (rescan) {

-      int i = 0;

-      Token tok = token;

-      while (tok != null && tok != scanpos) {

-        i++;

-        tok = tok.next;

-      }

-      if (tok != null)

-        jj_add_error_token(kind, i);

-    }

-    if (scanpos.kind != kind)

-      return true;

-    if (laInt == 0 && scanpos == lastpos)

-      throw new LookaheadSuccess();

-    return false;

-  }

-

-  /** Get the next Token. */

-  final public Token getNextToken() {

-    if (token.next != null)

-      token = token.next;

-    else

-      token = token.next = tokenSource.getNextToken();

-    nextTokenIndex = -1;

-    genInt++;

-    return token;

-  }

-

-  /** Get the specific Token. */

-  final public Token getToken(int index) {

-    Token t = token;

-    for (int i = 0; i < index; i++) {

-      if (t.next != null)

-        t = t.next;

-      else

-        t = t.next = tokenSource.getNextToken();

-    }

-    return t;

-  }

-

-  private int jj_ntk() {

-    if ((nextToken = token.next) == null) {

-      return (nextTokenIndex = (token.next = tokenSource.getNextToken()).kind);

-    } else {

-      return (nextTokenIndex = nextToken.kind);

-    }

-  }

-

-  private final java.util.List<int[]> expentries = new java.util.ArrayList<>();

-

-  private int[] expentry;

-

-  private int kind = -1;

-

-  private final int[] lastTokens = new int[100];

-

-  private int endpos;

-

-  private void jj_add_error_token(int kind, int pos) {

-    if (pos >= 100)

-      return;

-    if (pos == endpos + 1) {

-      lastTokens[endpos++] = kind;

-    } else if (endpos != 0) {

-      expentry = new int[endpos];

-      System.arraycopy(lastTokens, 0, expentry, 0, endpos);

-      entriesLoop: for (int[] jj_expentry1 : expentries) {

-        if (jj_expentry1.length == expentry.length) {

-          for (int i = 0; i < expentry.length; i++) {

-            if (jj_expentry1[i] != expentry[i]) {

-              continue entriesLoop;

-            }

-          }

-          expentries.add(expentry);

-          break;

-        }

-      }

-      if (pos != 0)

-        lastTokens[(endpos = pos) - 1] = kind;

-    }

-  }

-

-  /** Generate TokenException. */

-  TokenException raiseTokenException() {

-    expentries.clear();

-    boolean[] la1tokens = new boolean[21];

-    if (kind >= 0) {

-      la1tokens[kind] = true;

-      kind = -1;

-    }

-    for (int i = 0; i < 19; i++) {

-      if (laA[i] == genInt) {

-        for (int j = 0; j < 32; j++) {

-          if ((laB[i] & (1 << j)) != 0) {

-            la1tokens[j] = true;

-          }

-        }

-      }

-    }

-    for (int i = 0; i < 21; i++) {

-      if (la1tokens[i]) {

-        expentry = new int[1];

-        expentry[0] = i;

-        expentries.add(expentry);

-      }

-    }

-    endpos = 0;

-    jj_rescan_token();

-    jj_add_error_token(0, 0);

-    int[][] exptokseq = new int[expentries.size()][];

-    for (int i = 0; i < expentries.size(); i++) {

-      exptokseq[i] = expentries.get(i);

-    }

-    return new TokenException(token, exptokseq, tokenImage);

-  }

-

-  /** Enable tracing. */

-  final public void enable_tracing() {

-  }

-

-  /** Disable tracing. */

-  final public void disable_tracing() {

-  }

-

-  private void jj_rescan_token() {

-    rescan = true;

-    for (int i = 0; i < 2; i++) {

-      try {

-        JJCalls p = rtns[i];

-        do {

-          if (p.gen > genInt) {

-            laInt = p.arg;

-            lastpos = scanpos = p.first;

-            switch (i) {

-              case 0:

-                jj_3_1();

-                break;

-              case 1:

-                jj_3_2();

-                break;

-            }

-          }

-          p = p.next;

-        } while (p != null);

-      } catch (LookaheadSuccess ls) {

-      }

-    }

-    rescan = false;

-  }

-

-  private void jj_save(int index, int xla) {

-    JJCalls p = rtns[index];

-    while (p.gen > genInt) {

-      if (p.next == null) {

-        p = p.next = new JJCalls();

-        break;

-      }

-      p = p.next;

-    }

-    p.gen = genInt + xla - laInt;

-    p.first = token;

-    p.arg = xla;

-  }

-

-  static final class JJCalls {

-

-    int gen;

-

-    Token first;

-

-    int arg;

-

-    JJCalls next;

-  }

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/NumberSpaceQuantityFormat.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/NumberSpaceQuantityFormat.java
deleted file mode 100644
index 6e81cd2..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/NumberSpaceQuantityFormat.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.format;

-

-import java.io.IOException;

-import java.text.NumberFormat;

-import java.text.ParsePosition;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-import javax.measure.format.ParserException;

-import javax.measure.format.UnitFormat;

-

-import org.eclipse.uomo.units.AbstractUnit;

-import org.eclipse.uomo.units.ComparableQuantity;

-import org.eclipse.uomo.units.impl.Quantities;

-

-@SuppressWarnings({ "rawtypes", "unchecked" })

-class NumberSpaceQuantityFormat extends QuantityFormat {

-

-  private final NumberFormat numberFormat;

-

-  private final UnitFormat unitFormat;

-

-  NumberSpaceQuantityFormat(NumberFormat numberFormat, UnitFormat unitFormat) {

-    this.numberFormat = numberFormat;

-    this.unitFormat = unitFormat;

-  }

-

-  static int getFractionDigitsCount(double d) {

-    if (d >= 1) { // we only need the fraction digits

-      d = d - (long) d;

-    }

-    if (d == 0) { // nothing to count

-      return 0;

-    }

-    d *= 10; // shifts 1 digit to left

-    int count = 1;

-    while (d - (long) d != 0) { // keeps shifting until there are no more

-      // fractions

-      d *= 10;

-      count++;

-    }

-    return count;

-  }

-

-  @Override

-  public Appendable format(Quantity<?> quantity, Appendable dest) throws IOException {

-    // dest.append(numberFormat.format(quantity.getValue()));

-    // if (quantity.getUnit().equals(AbstractUnit.ONE))

-    // return dest;

-    // dest.append(' ');

-    // return unitFormat.format(quantity.getUnit(), dest);

-    int fract = 0;

-    if (quantity != null && quantity.getValue() != null) {

-      fract = getFractionDigitsCount(quantity.getValue().doubleValue());

-    }

-    if (fract > 1) {

-      numberFormat.setMaximumFractionDigits(fract + 1);

-    }

-    dest.append(numberFormat.format(quantity.getValue()));

-    if (quantity.getUnit().equals(AbstractUnit.ONE))

-      return dest;

-    dest.append(' ');

-    return unitFormat.format(quantity.getUnit(), dest);

-  }

-

-  @Override

-  public ComparableQuantity<?> parse(CharSequence csq, ParsePosition cursor) throws IllegalArgumentException, ParserException {

-    String str = csq.toString();

-    Number number = numberFormat.parse(str, cursor);

-    if (number == null)

-      throw new IllegalArgumentException("Number cannot be parsed");

-

-    Unit unit = unitFormat.parse(csq);

-    return Quantities.getQuantity(number.longValue(), unit);

-  }

-

-  @Override

-  ComparableQuantity<?> parse(CharSequence csq, int index) throws IllegalArgumentException, ParserException {

-    return parse(csq, new ParsePosition(index));

-  }

-

-  @Override

-  public ComparableQuantity<?> parse(CharSequence csq) throws IllegalArgumentException, ParserException {

-    return parse(csq, 0);

-  }

-

-  private static final long serialVersionUID = 1L;

-

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/ParseException.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/ParseException.java
deleted file mode 100644
index b8e9d97..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/ParseException.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-/* Generated By:JavaCC: Do not edit this line. ParseException.java Version 5.0 */

-/* JavaCCOptions:KEEP_LINE_COL=null */

-package org.eclipse.uomo.units.impl.format;

-

-import static org.eclipse.uomo.units.impl.format.TokenMgrError.addEscapes;

-

-/**

- * This exception is thrown when parse errors are encountered.

- * You can explicitly create objects of this exception type by

- * calling the method generateParseException in the generated

- * parser.

- *

- * You can modify this class to customize your error reporting

- * mechanisms so long as you retain the public fields.

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.0.1 ($Revision: 105 $), $Date: 2010-08-05 21:44:23 +0100 (Do, 05 Aug 2010) $

- */

-class ParseException extends RuntimeException {

-

-    /**

-     * The version identifier for this Serializable class.

-     * Increment only if the <i>serialized</i> form of the

-     * class changes.

-     */

-    private static final long serialVersionUID = 2932151235799168061L;

-

-  /**

-   * This constructor is used by the method "generateParseException"

-   * in the generated parser.  Calling this constructor generates

-   * a new object of this type with the fields "currentToken",

-   * "expectedTokenSequences", and "tokenImage" set.

-   */

-  public ParseException(Token currentTokenVal,

-                        int[][] expectedTokenSequencesVal,

-                        String[] tokenImageVal

-                       )

-  {

-    super(initialise(currentTokenVal, expectedTokenSequencesVal, tokenImageVal));

-    currentToken = currentTokenVal;

-    expectedTokenSequences = expectedTokenSequencesVal;

-    tokenImage = tokenImageVal;

-  }

-

-  /**

-   * The following constructors are for use by you for whatever

-   * purpose you can think of.  Constructing the exception in this

-   * manner makes the exception behave in the normal way - i.e., as

-   * documented in the class "Throwable".  The fields "errorToken",

-   * "expectedTokenSequences", and "tokenImage" do not contain

-   * relevant information.  The JavaCC generated code does not use

-   * these constructors.

-   */

-

-  public ParseException() {

-    super();

-  }

-

-  /** Constructor with message. */

-  public ParseException(String message) {

-    super(message);

-  }

-

-

-  /**

-   * This is the last token that has been consumed successfully.  If

-   * this object has been created due to a parse error, the token

-   * followng this token will (therefore) be the first error token.

-   */

-  public Token currentToken;

-

-  /**

-   * Each entry in this array is an array of integers.  Each array

-   * of integers represents a sequence of tokens (by their ordinal

-   * values) that is expected at this point of the parse.

-   */

-  public int[][] expectedTokenSequences;

-

-  /**

-   * This is a reference to the "tokenImage" array of the generated

-   * parser within which the parse error occurred.  This array is

-   * defined in the generated ...Constants interface.

-   */

-  public String[] tokenImage;

-

-  /**

-   * It uses "currentToken" and "expectedTokenSequences" to generate a parse

-   * error message and returns it.  If this object has been created

-   * due to a parse error, and you do not catch it (it gets thrown

-   * from the parser) the correct error message

-   * gets displayed.

-   */

-  private static String initialise(Token currentToken,

-                           int[][] expectedTokenSequences,

-                           String[] tokenImage) {

-    String eol = System.getProperty("line.separator", "\n");

-    StringBuffer expected = new StringBuffer();

-    int maxSize = 0;

-    for (int i = 0; i < expectedTokenSequences.length; i++) {

-      if (maxSize < expectedTokenSequences[i].length) {

-        maxSize = expectedTokenSequences[i].length;

-      }

-      for (int j = 0; j < expectedTokenSequences[i].length; j++) {

-        expected.append(tokenImage[expectedTokenSequences[i][j]]).append(' ');

-      }

-      if (expectedTokenSequences[i][expectedTokenSequences[i].length - 1] != 0) {

-        expected.append("...");

-      }

-      expected.append(eol).append("    ");

-    }

-    String retval = "Encountered \"";

-    Token tok = currentToken.next;

-    for (int i = 0; i < maxSize; i++) {

-      if (i != 0) retval += " ";

-      if (tok.kind == 0) {

-        retval += tokenImage[0];

-        break;

-      }

-      retval += " " + tokenImage[tok.kind];

-      retval += " \"";

-      retval += addEscapes(tok.image);

-      retval += " \"";

-      tok = tok.next;

-    }

-    retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;

-    retval += "." + eol;

-    if (expectedTokenSequences.length == 1) {

-      retval += "Was expecting:" + eol + "    ";

-    } else {

-      retval += "Was expecting one of:" + eol + "    ";

-    }

-    retval += expected.toString();

-    return retval;

-  }

-

-  /**

-   * The end of line string for this machine.

-   */

-  protected String eol = System.getProperty("line.separator", "\n");

-

-}

-/* JavaCC - OriginalChecksum=c67b0f8ee6c642900399352b33f90efd (do not edit this line) */

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/QuantityFormat.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/QuantityFormat.java
deleted file mode 100644
index 7313baa..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/QuantityFormat.java
+++ /dev/null
@@ -1,240 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.format;

-

-import java.io.IOException;

-import java.text.NumberFormat;

-import java.text.ParsePosition;

-

-import javax.measure.MeasurementException;

-import javax.measure.Quantity;

-import javax.measure.Unit;

-import javax.measure.format.ParserException;

-import javax.measure.format.UnitFormat;

-

-import org.eclipse.uomo.units.AbstractQuantity;

-import org.eclipse.uomo.units.AbstractUnit;

-import org.eclipse.uomo.units.impl.NumberQuantity;

-

-import tec.uom.lib.common.function.Parser;

-

-/**

- * <p>

- * This class provides the interface for formatting and parsing {@link Quantity quantities}.

- * </p>

- * 

- * <p>

- * Instances of this class should be able to format quantities stated in {@link CompoundUnit}. See {@link #formatCompound formatCompound(...)}.

- * </p>

- * 

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @version 1.2, $Date: 2017-12-24 $

- * @since 0.7

- */

-@SuppressWarnings("rawtypes")

-public abstract class QuantityFormat implements Parser<CharSequence, Quantity> {

-

-  /**

-   * 

-   */

-  private static final long serialVersionUID = -4628006924354248662L;

-

-  /**

-   * Holds the default format instance.

-   */

-  private static final QuantityFormat DEFAULT = new Standard();

-

-  /**

-   * Holds the localized format instance.

-   */

-  private static final NumberSpaceQuantityFormat LOCAL = new NumberSpaceQuantityFormat(NumberFormat.getInstance(), LocalUnitFormat.getInstance());

-

-  

-  /**

-   * Holds the Number-Space-Unit format instance.

-   */

-  // private static final QuantityFormat NUM_SPACE = new NumberSpaceUnit(NumberFormat.getInstance(), SimpleUnitFormat.getInstance());

-

-  // TODO use it as an option (after fixing parse())

-

-  /**

-   * Returns the quantity format for the default locale. The default format assumes the quantity is composed of a decimal number and a {@link Unit}

-   * separated by whitespace(s).

-   * 

-   * @return <code>MeasureFormat.getInstance(NumberFormat.getInstance(), UnitFormat.getInstance())</code>

-   */

-  public static QuantityFormat getInstance() {

-    return DEFAULT;

-  }

-

-  /**

-   * Returns the quantity format using the specified number format and unit format (the number and unit are separated by one space).

-   *

-   * @param numberFormat

-   *          the number format.

-   * @param unitFormat

-   *          the unit format.

-   * @return the corresponding format.

-   */

-  public static QuantityFormat getInstance(NumberFormat numberFormat, UnitFormat unitFormat) {

-    return new NumberSpaceQuantityFormat(numberFormat, unitFormat);

-  }

-

-  /**

-   * Returns the culture invariant format based upon {@link BigDecimal} canonical format and the {@link UnitFormat#getStandardInstance() standard}

-   * unit format. This format <b>is not</b> locale-sensitive and can be used for unambiguous electronic communication of quantities together with

-   * their units without loss of information. For example: <code>"1.23456789 kg.m/s2"</code> returns

-   * <code>Quantities.getQuantity(new BigDecimal("1.23456789"), AbstractUnit.parse("kg.m/s2")));</code>

-   *

-   * @param style

-   *          the format style to apply.

-   * @return the desired format.

-   */

-  public static QuantityFormat getInstance(FormatBehavior style) {

-    switch (style) {

-      case LOCALE_NEUTRAL:

-        return DEFAULT;

-      case LOCALE_SENSITIVE:

-        return LOCAL;

-      default:

-        return DEFAULT;

-    }

-  }

-  

-  /**

-   * Formats the specified quantity into an <code>Appendable</code>.

-   * 

-   * @param quantity

-   *          the quantity to format.

-   * @param dest

-   *          the appendable destination.

-   * @return the specified <code>Appendable</code>.

-   * @throws IOException

-   *           if an I/O exception occurs.

-   */

-  public abstract Appendable format(Quantity<?> quantity, Appendable dest) throws IOException;

-

-  /**

-   * Parses a portion of the specified <code>CharSequence</code> from the specified position to produce an object. If parsing succeeds, then the index

-   * of the <code>cursor</code> argument is updated to the index after the last character used.

-   * 

-   * @param csq

-   *          the <code>CharSequence</code> to parse.

-   * @param index

-   *          the current parsing index.

-   * @return the object parsed from the specified character sub-sequence.

-   * @throws IllegalArgumentException

-   *           if any problem occurs while parsing the specified character sequence (e.g. illegal syntax).

-   */

-  abstract Quantity<?> parse(CharSequence csq, int index) throws IllegalArgumentException, ParserException;

-

-  /**

-   * Convenience method equivalent to {@link #format(AbstractQuantity, Appendable)} except it does not raise an IOException.

-   * 

-   * @param q

-   *          the quantity to format.

-   * @param dest

-   *          the appendable destination.

-   * @return the specified <code>StringBuilder</code>.

-   */

-  public final StringBuilder format(Quantity<?> q, StringBuilder dest) {

-    try {

-      return (StringBuilder) this.format(q, (Appendable) dest);

-    } catch (IOException ex) {

-      throw new MeasurementException(ex); // Should not happen.

-    }

-  }

-

-  /**

-   * Formats an object to produce a string. This is equivalent to <blockquote> {@link #format(Unit, StringBuilder) format}<code>(unit,

-   *         new StringBuilder()).toString();</code> </blockquote>

-   *

-   * @param obj

-   *          The object to format

-   * @return Formatted string.

-   * @exception IllegalArgumentException

-   *              if the Format cannot format the given object

-   */

-  public final String format(Quantity q) {

-    if (q instanceof AbstractQuantity) {

-      return format((AbstractQuantity<?>) q, new StringBuilder()).toString();

-    } else {

-      return (this.format(q, new StringBuilder())).toString();

-    }

-  }

-

-  static int getFractionDigitsCount(double d) {

-    if (d >= 1) { // we only need the fraction digits

-      d = d - (long) d;

-    }

-    if (d == 0) { // nothing to count

-      return 0;

-    }

-    d *= 10; // shifts 1 digit to left

-    int count = 1;

-    while (d - (long) d != 0) { // keeps shifting until there are no more

-      // fractions

-      d *= 10;

-      count++;

-    }

-    return count;

-  }

-

-  // Holds standard implementation.

-  private static final class Standard extends QuantityFormat {

-

-    /**

-     * 

-     */

-    // private static final long serialVersionUID = 2758248665095734058L;

-

-    @Override

-    public Appendable format(Quantity q, Appendable dest) throws IOException {

-      Unit unit = q.getUnit();

-      // if (unit instanceof CompoundUnit)

-      // return formatCompound(q.doubleValue(unit),

-      // (CompoundUnit) unit, dest);

-      // else {

-

-      Number number = q.getValue();

-      dest.append(number.toString());

-      // }

-      if (q.getUnit().equals(AbstractUnit.ONE))

-        return dest;

-      dest.append(' ');

-      return SimpleUnitFormat.getInstance().format(unit, dest);

-      // }

-    }

-

-    @SuppressWarnings("unchecked")

-    @Override

-    Quantity<?> parse(CharSequence csq, int index) throws ParserException {

-      int startDecimal = index; // cursor.getIndex();

-      while ((startDecimal < csq.length()) && Character.isWhitespace(csq.charAt(startDecimal))) {

-        startDecimal++;

-      }

-      int endDecimal = startDecimal + 1;

-      while ((endDecimal < csq.length()) && !Character.isWhitespace(csq.charAt(endDecimal))) {

-        endDecimal++;

-      }

-      Double decimal = new Double(csq.subSequence(startDecimal, endDecimal).toString());

-      // cursor.setIndex(endDecimal + 1);

-      int startUnit = endDecimal + 1;// csq.toString().indexOf(' ') + 1;

-      Unit unit = SimpleUnitFormat.getInstance().parse(csq, new ParsePosition(startUnit));

-      return NumberQuantity.of(decimal.doubleValue(), unit);

-    }

-

-    public Quantity<?> parse(CharSequence csq) throws ParserException {

-      return parse(csq, 0);

-    }

-  }

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/SimpleCharStream.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/SimpleCharStream.java
deleted file mode 100644
index 20c2268..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/SimpleCharStream.java
+++ /dev/null
@@ -1,481 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-/* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 5.0 */

-/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */

-package org.eclipse.uomo.units.impl.format;

-

-/**

- * An implementation of interface CharStream, where the stream is assumed to

- * contain only ASCII characters (without unicode processing).

- */

-

-class SimpleCharStream

-{

-/** Whether parser is static. */

-  static final boolean staticFlag = false;

-  int bufsize;

-  int available;

-  int tokenBegin;

-/** Position in buffer. */

-  private int bufpos = -1;

-  protected int bufline[];

-  protected int bufcolumn[];

-

-  protected int column = 0;

-  protected int line = 1;

-

-  protected boolean prevCharIsCR = false;

-  protected boolean prevCharIsLF = false;

-

-  protected java.io.Reader inputStream;

-

-  protected char[] buffer;

-  protected int maxNextCharInd = 0;

-  protected int inBuf = 0;

-  protected int tabSize = 8;

-

-  protected void setTabSize(int i) { tabSize = i; }

-  protected int getTabSize(int i) { return tabSize; }

-

-

-  protected void expandBuff(boolean wrapAround)

-  {

-    char[] newbuffer = new char[bufsize + 2048];

-    int newbufline[] = new int[bufsize + 2048];

-    int newbufcolumn[] = new int[bufsize + 2048];

-

-    try

-    {

-      if (wrapAround)

-      {

-        System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);

-        System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos);

-        buffer = newbuffer;

-

-        System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);

-        System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);

-        bufline = newbufline;

-

-        System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);

-        System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);

-        bufcolumn = newbufcolumn;

-

-        maxNextCharInd = (bufpos += (bufsize - tokenBegin));

-      }

-      else

-      {

-        System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);

-        buffer = newbuffer;

-

-        System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);

-        bufline = newbufline;

-

-        System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);

-        bufcolumn = newbufcolumn;

-

-        maxNextCharInd = (bufpos -= tokenBegin);

-      }

-    }

-    catch (Throwable t)

-    {

-      throw new Error(t.getMessage());

-    }

-

-

-    bufsize += 2048;

-    available = bufsize;

-    tokenBegin = 0;

-  }

-

-  protected void fillBuff() throws java.io.IOException

-  {

-    if (maxNextCharInd == available)

-    {

-      if (available == bufsize)

-      {

-        if (tokenBegin > 2048)

-        {

-          bufpos = maxNextCharInd = 0;

-          available = tokenBegin;

-        }

-        else if (tokenBegin < 0)

-          bufpos = maxNextCharInd = 0;

-        else

-          expandBuff(false);

-      }

-      else if (available > tokenBegin)

-        available = bufsize;

-      else if ((tokenBegin - available) < 2048)

-        expandBuff(true);

-      else

-        available = tokenBegin;

-    }

-

-    int i;

-    try {

-      if ((i = inputStream.read(buffer, maxNextCharInd, available - maxNextCharInd)) == -1)

-      {

-        inputStream.close();

-        throw new java.io.IOException();

-      }

-      else

-        maxNextCharInd += i;

-      return;

-    }

-    catch(java.io.IOException e) {

-      --bufpos;

-      backup(0);

-      if (tokenBegin == -1)

-        tokenBegin = bufpos;

-      throw e;

-    }

-  }

-

-/** Start. */

-  protected char beginToken() throws java.io.IOException

-  {

-    tokenBegin = -1;

-    char c = readChar();

-    tokenBegin = bufpos;

-

-    return c;

-  }

-

-  protected void updateLineColumn(char c)

-  {

-    column++;

-

-    if (prevCharIsLF)

-    {

-      prevCharIsLF = false;

-      line += (column = 1);

-    }

-    else if (prevCharIsCR)

-    {

-      prevCharIsCR = false;

-      if (c == '\n')

-      {

-        prevCharIsLF = true;

-      }

-      else

-        line += (column = 1);

-    }

-

-    switch (c)

-    {

-      case '\r' :

-        prevCharIsCR = true;

-        break;

-      case '\n' :

-        prevCharIsLF = true;

-        break;

-      case '\t' :

-        column--;

-        column += (tabSize - (column % tabSize));

-        break;

-      default :

-        break;

-    }

-

-    bufline[bufpos] = line;

-    bufcolumn[bufpos] = column;

-  }

-

-/** Read a character. */

-  protected char readChar() throws java.io.IOException

-  {

-    if (inBuf > 0)

-    {

-      --inBuf;

-

-      if (++bufpos == bufsize)

-        bufpos = 0;

-

-      return buffer[bufpos];

-    }

-

-    if (++bufpos >= maxNextCharInd)

-      fillBuff();

-

-    char c = buffer[bufpos];

-

-    updateLineColumn(c);

-    return c;

-  }

-

-  @Deprecated

-  /**

-   * @deprecated

-   * @see #getEndColumn

-   */

-

-  protected int getColumn() {

-    return bufcolumn[bufpos];

-  }

-

-  @Deprecated

-  /**

-   * @deprecated

-   * @see #getEndLine

-   */

-

-  protected int getLine() {

-    return bufline[bufpos];

-  }

-

-  /** Get token end column number. */

-  protected int getEndColumn() {

-    return bufcolumn[bufpos];

-  }

-

-  /** Get token end line number. */

-  protected int getEndLine() {

-     return bufline[bufpos];

-  }

-

-  /** Get token beginning column number. */

-  protected int getBeginColumn() {

-    return bufcolumn[tokenBegin];

-  }

-

-  /** Get token beginning line number. */

-  protected int getBeginLine() {

-    return bufline[tokenBegin];

-  }

-

-/** Backup a number of characters. */

-  protected void backup(int amount) {

-

-    inBuf += amount;

-    if ((bufpos -= amount) < 0)

-      bufpos += bufsize;

-  }

-

-  /** Constructor. */

-  protected SimpleCharStream(java.io.Reader dstream, int startline,

-  int startcolumn, int buffersize)

-  {

-    inputStream = dstream;

-    line = startline;

-    column = startcolumn - 1;

-

-    available = bufsize = buffersize;

-    buffer = new char[buffersize];

-    bufline = new int[buffersize];

-    bufcolumn = new int[buffersize];

-  }

-

-  /** Constructor. */

-  protected SimpleCharStream(java.io.Reader dstream, int startline,

-                          int startcolumn)

-  {

-    this(dstream, startline, startcolumn, 4096);

-  }

-

-  /** Constructor. */

-  protected SimpleCharStream(java.io.Reader dstream)

-  {

-    this(dstream, 1, 1, 4096);

-  }

-

-  /** Reinitialise. */

-  void reInit(java.io.Reader dstream, int startline,

-  int startcolumn, int buffersize)

-  {

-    inputStream = dstream;

-    line = startline;

-    column = startcolumn - 1;

-

-    if (buffer == null || buffersize != buffer.length)

-    {

-      available = bufsize = buffersize;

-      buffer = new char[buffersize];

-      bufline = new int[buffersize];

-      bufcolumn = new int[buffersize];

-    }

-    prevCharIsLF = prevCharIsCR = false;

-    tokenBegin = inBuf = maxNextCharInd = 0;

-    bufpos = -1;

-  }

-

-  /** Reinitialise. */

-  protected void reInit(java.io.Reader dstream, int startline,

-                     int startcolumn)

-  {

-    reInit(dstream, startline, startcolumn, 4096);

-  }

-

-  /** Reinitialise. */

-  protected void reInit(java.io.Reader dstream)

-  {

-    reInit(dstream, 1, 1, 4096);

-  }

-  /** Constructor. */

-  protected SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,

-  int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException

-  {

-    this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);

-  }

-

-  /** Constructor. */

-  protected SimpleCharStream(java.io.InputStream dstream, int startline,

-  int startcolumn, int buffersize)

-  {

-    this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);

-  }

-

-  /** Constructor. */

-  protected SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,

-                          int startcolumn) throws java.io.UnsupportedEncodingException

-  {

-    this(dstream, encoding, startline, startcolumn, 4096);

-  }

-

-  /** Constructor. */

-  protected SimpleCharStream(java.io.InputStream dstream, int startline,

-                          int startcolumn)

-  {

-    this(dstream, startline, startcolumn, 4096);

-  }

-

-  /** Constructor. */

-  protected SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException

-  {

-    this(dstream, encoding, 1, 1, 4096);

-  }

-

-  /** Constructor. */

-  protected SimpleCharStream(java.io.InputStream dstream)

-  {

-    this(dstream, 1, 1, 4096);

-  }

-

-  /** Reinitialise. */

-  protected void reInit(java.io.InputStream dstream, String encoding, int startline,

-                          int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException

-  {

-    reInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);

-  }

-

-  /** Reinitialise. */

-  protected void reInit(java.io.InputStream dstream, int startline,

-                          int startcolumn, int buffersize)

-  {

-    reInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);

-  }

-

-  /** Reinitialise. */

-  protected void reInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException

-  {

-    reInit(dstream, encoding, 1, 1, 4096);

-  }

-

-  /** Reinitialise. */

-  protected void reInit(java.io.InputStream dstream)

-  {

-    reInit(dstream, 1, 1, 4096);

-  }

-  /** Reinitialise. */

-  protected void reInit(java.io.InputStream dstream, String encoding, int startline,

-                     int startcolumn) throws java.io.UnsupportedEncodingException

-  {

-    reInit(dstream, encoding, startline, startcolumn, 4096);

-  }

-  /** Reinitialise. */

-  protected void reInit(java.io.InputStream dstream, int startline,

-                     int startcolumn)

-  {

-    reInit(dstream, startline, startcolumn, 4096);

-  }

-  /** Get token literal value. */

-  protected String getImage()

-  {

-    if (bufpos >= tokenBegin)

-      return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);

-    else

-      return new String(buffer, tokenBegin, bufsize - tokenBegin) +

-                            new String(buffer, 0, bufpos + 1);

-  }

-

-  /** Get the suffix. */

-  protected char[] getSuffix(int len)

-  {

-    char[] ret = new char[len];

-

-    if ((bufpos + 1) >= len)

-      System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);

-    else

-    {

-      System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,

-                                                        len - bufpos - 1);

-      System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);

-    }

-

-    return ret;

-  }

-

-  /** Reset buffer when finished. */

-  protected void done()

-  {

-    buffer = null;

-    bufline = null;

-    bufcolumn = null;

-  }

-

-  /**

-   * Method to adjust line and column numbers for the start of a token.

-   */

-  protected void adjustBeginLineColumn(int newLine, int newCol)

-  {

-    int start = tokenBegin;

-    int len;

-

-    if (bufpos >= tokenBegin)

-    {

-      len = bufpos - tokenBegin + inBuf + 1;

-    }

-    else

-    {

-      len = bufsize - tokenBegin + bufpos + 1 + inBuf;

-    }

-

-    int i = 0, j = 0, k = 0;

-    int nextColDiff = 0, columnDiff = 0;

-

-    while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize])

-    {

-      bufline[j] = newLine;

-      nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];

-      bufcolumn[j] = newCol + columnDiff;

-      columnDiff = nextColDiff;

-      i++;

-    }

-

-    if (i < len)

-    {

-      bufline[j] = newLine++;

-      bufcolumn[j] = newCol + columnDiff;

-

-      while (i++ < len)

-      {

-        if (bufline[j = start % bufsize] != bufline[++start % bufsize])

-          bufline[j] = newLine++;

-        else

-          bufline[j] = newLine;

-      }

-    }

-

-    line = bufline[j];

-    column = bufcolumn[j];

-  }

-

-}

-/* JavaCC - OriginalChecksum=ec4e178f3ccf05ea2ca32d15e09312ca (do not edit this line) */

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/SimpleUnitFormat.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/SimpleUnitFormat.java
deleted file mode 100644
index 29c2bdf..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/SimpleUnitFormat.java
+++ /dev/null
@@ -1,984 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.format;

-

-import static org.eclipse.uomo.units.impl.system.MetricPrefix.*;

-import static org.eclipse.uomo.units.impl.system.Units.LITRE;

-

-import java.io.IOException;

-import java.lang.CharSequence;

-import java.text.FieldPosition;

-import java.text.ParsePosition;

-import java.util.HashMap;

-import java.util.Map;

-

-import org.eclipse.uomo.units.AbstractUnit;

-import org.eclipse.uomo.units.AbstractUnitFormat;

-import org.eclipse.uomo.units.SymbolMap;

-import org.eclipse.uomo.units.impl.converter.AddConverter;

-import org.eclipse.uomo.units.impl.converter.MultiplyConverter;

-import org.eclipse.uomo.units.impl.converter.RationalConverter;

-import org.eclipse.uomo.units.impl.AlternateUnit;

-import org.eclipse.uomo.units.impl.BaseUnit;

-import org.eclipse.uomo.units.impl.ProductUnit;

-import org.eclipse.uomo.units.impl.TransformedUnit;

-import org.eclipse.uomo.units.impl.system.Units;

-import org.eclipse.uomo.units.impl.system.MetricPrefix;

-

-import javax.measure.Unit;

-import javax.measure.UnitConverter;

-import javax.measure.Quantity;

-import javax.measure.format.ParserException;

-import javax.measure.format.UnitFormat;

-

-/**

- * <p>

- * This class implements the {@link UnitFormat} interface for formatting and

- * parsing {@link Unit units}.

- * </p>

- * 

- * <p>

- * For all SI units, the 20 SI prefixes used to form decimal multiples and

- * sub-multiples of SI units are recognized. {@link Units} are directly

- * recognized. For example:<br>

- * <code>

- *        AbstractUnit.parse("m°C").equals(MetricPrefix.MILLI(Units.CELSIUS))

- *        AbstractUnit.parse("kW").equals(MetricPrefix.KILO(Units.WATT))

- *        AbstractUnit.parse("ft").equals(Units.METRE.multiply(0.3048))</code>

- * </p>

- *

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @author Eric Russell

- * @version 1.0.3, June 7, 2017

- * @since 1.0

- */

-public abstract class SimpleUnitFormat extends AbstractUnitFormat {

-	/**

-	 * 

-	 */

-	// private static final long serialVersionUID = 4149424034841739785L;

-

-	/**

-	 * Flavor of this format

-	 *

-	 * @author Werner

-	 *

-	 */

-	public enum Flavor {

-		Default, ASCII

-	}

-

-	/**

-	 * Holds the standard unit format.

-	 */

-	private static final DefaultFormat DEFAULT = new DefaultFormat();

-

-	/**

-	 * Holds the ASCIIFormat unit format.

-	 */

-	private static final ASCIIFormat ASCII = new ASCIIFormat();

-

-	/**

-	 * Returns the unit format for the default locale (format used by

-	 * {@link AbstractUnit#parse(CharSequence) AbstractUnit.parse(CharSequence)}

-	 * and {@link Unit#toString() Unit.toString()}).

-	 *

-	 * @return the default unit format (locale sensitive).

-	 */

-	public static SimpleUnitFormat getInstance() {

-		return getInstance(Flavor.Default);

-	}

-

-	/**

-	 * Returns the {@link SimpleUnitFormat} in the desired {@link Flavor}

-	 *

-	 * @return the instance for the given {@link Flavor}.

-	 */

-	public static SimpleUnitFormat getInstance(Flavor flavor) {

-		switch (flavor) {

-		case ASCII:

-			return SimpleUnitFormat.ASCII;

-		default:

-			return DEFAULT;

-		}

-	}

-

-	/**

-	 * Base constructor.

-	 */

-	protected SimpleUnitFormat() {

-	}

-

-	/**

-	 * Formats the specified unit.

-	 *

-	 * @param unit

-	 *            the unit to format.

-	 * @param appendable

-	 *            the appendable destination.

-	 * @throws IOException

-	 *             if an error occurs.

-	 */

-	public abstract Appendable format(Unit<?> unit, Appendable appendable) throws IOException;

-

-	/**

-	 * Parses a sequence of character to produce a unit or a rational product of

-	 * unit.

-	 *

-	 * @param csq

-	 *            the <code>CharSequence</code> to parse.

-	 * @param pos

-	 *            an object holding the parsing index and error position.

-	 * @return an {@link Unit} parsed from the character sequence.

-	 * @throws IllegalArgumentException

-	 *             if the character sequence contains an illegal syntax.

-	 */

-	@SuppressWarnings("rawtypes")

-	public abstract Unit<? extends Quantity> parseProductUnit(CharSequence csq, ParsePosition pos)

-			throws ParserException;

-

-	/**

-	 * Parses a sequence of character to produce a single unit.

-	 *

-	 * @param csq

-	 *            the <code>CharSequence</code> to parse.

-	 * @param pos

-	 *            an object holding the parsing index and error position.

-	 * @return an {@link Unit} parsed from the character sequence.

-	 * @throws IllegalArgumentException

-	 *             if the character sequence does not contain a valid unit

-	 *             identifier.

-	 */

-	@SuppressWarnings("rawtypes")

-	public abstract Unit<? extends Quantity> parseSingleUnit(CharSequence csq, ParsePosition pos)

-			throws ParserException;

-

-	/**

-	 * Attaches a system-wide label to the specified unit. For example:

-	 * <code> SimpleUnitFormat.getInstance().label(DAY.multiply(365), "year");

-	 * SimpleUnitFormat.getInstance().label(METER.multiply(0.3048), "ft"); </code>

-	 * If the specified label is already associated to an unit the previous

-	 * association is discarded or ignored.

-	 *

-	 * @param unit

-	 *            the unit being labeled.

-	 * @param label

-	 *            the new label for this unit.

-	 * @throws IllegalArgumentException

-	 *             if the label is not a

-	 *             {@link SimpleUnitFormat#isValidIdentifier(String)} valid

-	 *             identifier.

-	 */

-	public abstract void label(Unit<?> unit, String label);

-

-	public boolean isLocaleSensitive() {

-		return false;

-	}

-

-	/**

-	 * Attaches a system-wide alias to this unit. Multiple aliases may be

-	 * attached to the same unit. Aliases are used during parsing to recognize

-	 * different variants of the same unit. For example:

-	 * <code> SimpleUnitFormat.getInstance().alias(METER.multiply(0.3048), "foot");

-	 * SimpleUnitFormat.getInstance().alias(METER.multiply(0.3048), "feet"); SimpleUnitFormat.getInstance().alias(METER, "meter");

-	 * SimpleUnitFormat.getInstance().alias(METER, "metre"); </code> If the

-	 * specified label is already associated to an unit the previous association

-	 * is discarded or ignored.

-	 *

-	 * @param unit

-	 *            the unit being aliased.

-	 * @param alias

-	 *            the alias attached to this unit.

-	 * @throws IllegalArgumentException

-	 *             if the label is not a

-	 *             {@link SimpleUnitFormat#isValidIdentifier(String)} valid

-	 *             identifier.

-	 */

-	public abstract void alias(Unit<?> unit, String alias);

-

-	/**

-	 * Indicates if the specified name can be used as unit identifier.

-	 *

-	 * @param name

-	 *            the identifier to be tested.

-	 * @return <code>true</code> if the name specified can be used as label or

-	 *         alias for this format;<code>false</code> otherwise.

-	 */

-	public abstract boolean isValidIdentifier(String name);

-

-	/**

-	 * Formats an unit and appends the resulting text to a given string buffer

-	 * (implements <code>java.text.Format</code>).

-	 *

-	 * @param unit

-	 *            the unit to format.

-	 * @param toAppendTo

-	 *            where the text is to be appended

-	 * @param pos

-	 *            the field position (not used).

-	 * @return <code>toAppendTo</code>

-	 */

-	public final StringBuffer format(Object unit, final StringBuffer toAppendTo, FieldPosition pos) {

-		try {

-			Object dest = toAppendTo;

-			if (dest instanceof Appendable) {

-				format((Unit<?>) unit, (Appendable) dest);

-			} else { // When retroweaver is used to produce 1.4 binaries.

-				format((Unit<?>) unit, new Appendable() {

-

-					public Appendable append(char arg0) throws IOException {

-						toAppendTo.append(arg0);

-						return null;

-					}

-

-					public Appendable append(CharSequence arg0) throws IOException {

-						toAppendTo.append(arg0);

-						return null;

-					}

-

-					public Appendable append(CharSequence arg0, int arg1, int arg2) throws IOException {

-						toAppendTo.append(arg0.subSequence(arg1, arg2));

-						return null;

-					}

-				});

-			}

-			return toAppendTo;

-		} catch (IOException e) {

-			throw new Error(e); // Should never happen.

-		}

-	}

-

-	/**

-	 * Parses the text from a string to produce an object (implements

-	 * <code>java.text.Format</code>).

-	 *

-	 * @param source

-	 *            the string source, part of which should be parsed.

-	 * @param pos

-	 *            the cursor position.

-	 * @return the corresponding unit or <code>null</code> if the string cannot

-	 *         be parsed.

-	 */

-	public final Unit<?> parseObject(String source, ParsePosition pos) throws ParserException {

-		// int start = pos.getIndex();

-		return parseProductUnit(source, pos);

-		/*

-		 * } catch (ParserException e) { pos.setIndex(start);

-		 * pos.setErrorIndex(e.getPosition()); return null; }

-		 */

-	}

-

-	/**

-	 * This class represents an exponent with both a power (numerator) and a

-	 * root (denominator).

-	 */

-	private static class Exponent {

-		public final int pow;

-		public final int root;

-

-		public Exponent(int pow, int root) {

-			this.pow = pow;

-			this.root = root;

-		}

-	}

-

-	/**

-	 * This class represents the standard format.

-	 */

-	protected static class DefaultFormat extends SimpleUnitFormat {

-

-		/**

-		 * Holds the name to unit mapping.

-		 */

-		final HashMap<String, Unit<?>> _nameToUnit = new HashMap<>();

-

-		/**

-		 * Holds the unit to name mapping.

-		 */

-		final HashMap<Unit<?>, String> _unitToName = new HashMap<>();

-

-		@Override

-		public void label(Unit<?> unit, String label) {

-			if (!isValidIdentifier(label))

-				throw new IllegalArgumentException("Label: " + label + " is not a valid identifier.");

-			synchronized (this) {

-				_nameToUnit.put(label, unit);

-				_unitToName.put(unit, label);

-			}

-		}

-

-		@Override

-		public void alias(Unit<?> unit, String alias) {

-			if (!isValidIdentifier(alias))

-				throw new IllegalArgumentException("Alias: " + alias + " is not a valid identifier.");

-			synchronized (this) {

-				_nameToUnit.put(alias, unit);

-			}

-		}

-

-		@Override

-		public boolean isValidIdentifier(String name) {

-			if ((name == null) || (name.length() == 0))

-				return false;

-			/*

-			 * for (int i = 0; i < name.length(); i++) { if

-			 * (!isUnitIdentifierPart(name.charAt(i))) return false; }

-			 */

-			return isUnitIdentifierPart(name.charAt(0));

-		}

-

-		static boolean isUnitIdentifierPart(char ch) {

-			return Character.isLetter(ch) || (!Character.isWhitespace(ch) && !Character.isDigit(ch) && (ch != '\u00b7')

-					&& (ch != '*') && (ch != '/') && (ch != '(') && (ch != ')') && (ch != '[') && (ch != ']')

-					&& (ch != '\u00b9') && (ch != '\u00b2') && (ch != '\u00b3') && (ch != '^') && (ch != '+')

-					&& (ch != '-'));

-		}

-

-		// Returns the name for the specified unit or null if product unit.

-		protected String nameFor(Unit<?> unit) {

-			// Searches label database.

-			String label = _unitToName.get(unit);

-			if (label != null)

-				return label;

-			if (unit instanceof BaseUnit)

-				return ((BaseUnit<?>) unit).getSymbol();

-			if (unit instanceof AlternateUnit)

-				return ((AlternateUnit<?>) unit).getSymbol();

-			if (unit instanceof TransformedUnit) {

-				TransformedUnit<?> tfmUnit = (TransformedUnit<?>) unit;

-				Unit<?> baseUnit = tfmUnit.getParentUnit();

-				UnitConverter cvtr = tfmUnit.getConverterToMetric(); // tfmUnit.getSystemConverter();

-				StringBuilder result = new StringBuilder();

-				String baseUnitName = baseUnit.toString();

-				String prefix = prefixFor(cvtr);

-				if ((baseUnitName.indexOf('\u00b7') >= 0) || (baseUnitName.indexOf('*') >= 0)

-						|| (baseUnitName.indexOf('/') >= 0)) {

-					// We could use parentheses whenever baseUnits is an

-					// instanceof ProductUnit, but most ProductUnits have

-					// aliases,

-					// so we'd end up with a lot of unnecessary parentheses.

-					result.append('(');

-					result.append(baseUnitName);

-					result.append(')');

-				} else {

-					result.append(baseUnitName);

-				}

-				if (prefix != null) {

-					result.insert(0, prefix);

-				} else {

-					if (cvtr instanceof AddConverter) {

-						result.append('+');

-						result.append(((AddConverter) cvtr).getOffset());

-					} else if (cvtr instanceof RationalConverter) {

-						double dividend = ((RationalConverter) cvtr).getDividend().doubleValue();

-						if (dividend != 1) {

-							result.append('*');

-							result.append(dividend);

-						}

-						double divisor = ((RationalConverter) cvtr).getDivisor().doubleValue();

-						if (divisor != 1) {

-							result.append('/');

-							result.append(divisor);

-						}

-					} else if (cvtr instanceof MultiplyConverter) {

-						result.append('*');

-						result.append(((MultiplyConverter) cvtr).getFactor());

-					} else { // Other converters.

-						return "[" + baseUnit + "?]";

-					}

-				}

-				return result.toString();

-			}

-			// Compound unit.

-			// if (unit instanceof CompoundUnit) {

-			// CompoundUnit<?> cpdUnit = (CompoundUnit<?>) unit;

-			// return nameFor(cpdUnit.getHigher()).toString() + ":"

-			// + nameFor(cpdUnit.getLower());

-			// }

-			return null; // Product unit.

-		}

-

-		// Returns the prefix for the specified unit converter.

-		protected String prefixFor(UnitConverter converter) {

-			for (int i = 0; i < CONVERTERS.length; i++) {

-				if (CONVERTERS[i].equals(converter)) {

-					return PREFIXES[i];

-				}

-			}

-			return null; // TODO or return blank?

-		}

-

-		// Returns the unit for the specified name.

-		protected Unit<?> unitFor(String name) {

-			Unit<?> unit = _nameToUnit.get(name);

-			if (unit != null)

-				return unit;

-			unit = SYMBOL_TO_UNIT.get(name);

-			return unit;

-		}

-

-		// //////////////////////////

-		// Parsing.

-		@SuppressWarnings({ "rawtypes", "unchecked" })

-		public Unit<? extends Quantity> parseSingleUnit(CharSequence csq, ParsePosition pos) throws ParserException {

-			int startIndex = pos.getIndex();

-			String name = readIdentifier(csq, pos);

-			Unit unit = unitFor(name);

-			check(unit != null, name + " not recognized", csq, startIndex);

-			return unit;

-		}

-

-		@SuppressWarnings({ "rawtypes", "unchecked" })

-		@Override

-		public Unit<? extends Quantity> parseProductUnit(CharSequence csq, ParsePosition pos) throws ParserException {

-			Unit result = AbstractUnit.ONE;

-			int token = nextToken(csq, pos);

-			switch (token) {

-			case IDENTIFIER:

-				result = parseSingleUnit(csq, pos);

-				break;

-			case OPEN_PAREN:

-				pos.setIndex(pos.getIndex() + 1);

-				result = parseProductUnit(csq, pos);

-				token = nextToken(csq, pos);

-				check(token == CLOSE_PAREN, "')' expected", csq, pos.getIndex());

-				pos.setIndex(pos.getIndex() + 1);

-				break;

-			}

-			token = nextToken(csq, pos);

-			while (true) {

-				switch (token) {

-				case EXPONENT:

-					Exponent e = readExponent(csq, pos);

-					if (e.pow != 1) {

-						result = result.pow(e.pow);

-					}

-					if (e.root != 1) {

-						result = result.root(e.root);

-					}

-					break;

-				case MULTIPLY:

-					pos.setIndex(pos.getIndex() + 1);

-					token = nextToken(csq, pos);

-					if (token == INTEGER) {

-						long n = readLong(csq, pos);

-						if (n != 1) {

-							result = result.multiply(n);

-						}

-					} else if (token == FLOAT) {

-						double d = readDouble(csq, pos);

-						if (d != 1.0) {

-							result = result.multiply(d);

-						}

-					} else {

-						result = result.multiply(parseProductUnit(csq, pos));

-					}

-					break;

-				case DIVIDE:

-					pos.setIndex(pos.getIndex() + 1);

-					token = nextToken(csq, pos);

-					if (token == INTEGER) {

-						long n = readLong(csq, pos);

-						if (n != 1) {

-							result = result.divide(n);

-						}

-					} else if (token == FLOAT) {

-						double d = readDouble(csq, pos);

-						if (d != 1.0) {

-							result = result.divide(d);

-						}

-					} else {

-						result = result.divide(parseProductUnit(csq, pos));

-					}

-					break;

-				case PLUS:

-					pos.setIndex(pos.getIndex() + 1);

-					token = nextToken(csq, pos);

-					if (token == INTEGER) {

-						long n = readLong(csq, pos);

-						if (n != 1) {

-							result = result.shift(n);

-						}

-					} else if (token == FLOAT) {

-						double d = readDouble(csq, pos);

-						if (d != 1.0) {

-							result = result.shift(d);

-						}

-					} else {

-						throw new ParserException("not a number", pos.getIndex());

-					}

-					break;

-				case EOF:

-				case CLOSE_PAREN:

-					return result;

-				default:

-					throw new ParserException("unexpected token " + token, pos.getIndex());

-				}

-				token = nextToken(csq, pos);

-			}

-		}

-

-		private static final int EOF = 0;

-		private static final int IDENTIFIER = 1;

-		private static final int OPEN_PAREN = 2;

-		private static final int CLOSE_PAREN = 3;

-		private static final int EXPONENT = 4;

-		private static final int MULTIPLY = 5;

-		private static final int DIVIDE = 6;

-		private static final int PLUS = 7;

-		private static final int INTEGER = 8;

-		private static final int FLOAT = 9;

-

-		private int nextToken(CharSequence csq, ParsePosition pos) {

-			final int length = csq.length();

-			while (pos.getIndex() < length) {

-				char c = csq.charAt(pos.getIndex());

-				if (isUnitIdentifierPart(c)) {

-					return IDENTIFIER;

-				} else if (c == '(') {

-					return OPEN_PAREN;

-				} else if (c == ')') {

-					return CLOSE_PAREN;

-				} else if ((c == '^') || (c == '\u00b9') || (c == '\u00b2') || (c == '\u00b3')) {

-					return EXPONENT;

-				} else if (c == '*') {

-					char c2 = csq.charAt(pos.getIndex() + 1);

-					if (c2 == '*') {

-						return EXPONENT;

-					} else {

-						return MULTIPLY;

-					}

-				} else if (c == '\u00b7') {

-					return MULTIPLY;

-				} else if (c == '/') {

-					return DIVIDE;

-				} else if (c == '+') {

-					return PLUS;

-				} else if ((c == '-') || Character.isDigit(c)) {

-					int index = pos.getIndex() + 1;

-					while ((index < length) && (Character.isDigit(c) || (c == '-') || (c == '.') || (c == 'E'))) {

-						c = csq.charAt(index++);

-						if (c == '.') {

-							return FLOAT;

-						}

-					}

-					return INTEGER;

-				}

-				pos.setIndex(pos.getIndex() + 1);

-			}

-			return EOF;

-		}

-

-		private void check(boolean expr, String message, CharSequence csq, int index) throws ParserException {

-			if (!expr) {

-				throw new ParserException(message + " (in " + csq + " at index " + index + ")", index);

-			}

-		}

-

-		private Exponent readExponent(CharSequence csq, ParsePosition pos) {

-			char c = csq.charAt(pos.getIndex());

-			if (c == '^') {

-				pos.setIndex(pos.getIndex() + 1);

-			} else if (c == '*') {

-				pos.setIndex(pos.getIndex() + 2);

-			}

-			final int length = csq.length();

-			int pow = 0;

-			boolean isPowNegative = false;

-			int root = 0;

-			boolean isRootNegative = false;

-			boolean isRoot = false;

-			while (pos.getIndex() < length) {

-				c = csq.charAt(pos.getIndex());

-				if (c == '\u00b9') {

-					if (isRoot) {

-						root = root * 10 + 1;

-					} else {

-						pow = pow * 10 + 1;

-					}

-				} else if (c == '\u00b2') {

-					if (isRoot) {

-						root = root * 10 + 2;

-					} else {

-						pow = pow * 10 + 2;

-					}

-				} else if (c == '\u00b3') {

-					if (isRoot) {

-						root = root * 10 + 3;

-					} else {

-						pow = pow * 10 + 3;

-					}

-				} else if (c == '-') {

-					if (isRoot) {

-						isRootNegative = true;

-					} else {

-						isPowNegative = true;

-					}

-				} else if ((c >= '0') && (c <= '9')) {

-					if (isRoot) {

-						root = root * 10 + (c - '0');

-					} else {

-						pow = pow * 10 + (c - '0');

-					}

-				} else if (c == ':') {

-					isRoot = true;

-				} else {

-					break;

-				}

-				pos.setIndex(pos.getIndex() + 1);

-			}

-			if (pow == 0)

-				pow = 1;

-			if (root == 0)

-				root = 1;

-			return new Exponent(isPowNegative ? -pow : pow, isRootNegative ? -root : root);

-		}

-

-		private long readLong(CharSequence csq, ParsePosition pos) {

-			final int length = csq.length();

-			int result = 0;

-			boolean isNegative = false;

-			while (pos.getIndex() < length) {

-				char c = csq.charAt(pos.getIndex());

-				if (c == '-') {

-					isNegative = true;

-				} else if ((c >= '0') && (c <= '9')) {

-					result = result * 10 + (c - '0');

-				} else {

-					break;

-				}

-				pos.setIndex(pos.getIndex() + 1);

-			}

-			return isNegative ? -result : result;

-		}

-

-		private double readDouble(CharSequence csq, ParsePosition pos) {

-			final int length = csq.length();

-			int start = pos.getIndex();

-			int end = start + 1;

-			while (end < length) {

-				if ("0123456789+-.E".indexOf(csq.charAt(end)) < 0) {

-					break;

-				}

-				end += 1;

-			}

-			pos.setIndex(end + 1);

-			return Double.parseDouble(csq.subSequence(start, end).toString());

-		}

-

-		private String readIdentifier(CharSequence csq, ParsePosition pos) {

-			final int length = csq.length();

-			int start = pos.getIndex();

-			int i = start;

-			while ((++i < length) && isUnitIdentifierPart(csq.charAt(i))) {

-			}

-			pos.setIndex(i);

-			return csq.subSequence(start, i).toString();

-		}

-

-		// //////////////////////////

-		// Formatting.

-

-		@Override

-		public Appendable format(Unit<?> unit, Appendable appendable) throws IOException {

-			String name = nameFor(unit);

-			if (name != null) {

-				return appendable.append(name);

-			}

-			if (!(unit instanceof ProductUnit)) {

-				throw new IllegalArgumentException("Cannot format given Object as a Unit");

-			}

-

-			// Product unit.

-			ProductUnit<?> productUnit = (ProductUnit<?>) unit;

-			int invNbr = 0;

-

-			// Write positive exponents first.

-			boolean start = true;

-			for (int i = 0; i < productUnit.getUnitCount(); i++) {

-				int pow = productUnit.getUnitPow(i);

-				if (pow >= 0) {

-					if (!start) {

-						appendable.append('\u00b7'); // Separator.

-					}

-					name = nameFor(productUnit.getUnit(i));

-					int root = productUnit.getUnitRoot(i);

-					append(appendable, name, pow, root);

-					start = false;

-				} else {

-					invNbr++;

-				}

-			}

-

-			// Write negative exponents.

-			if (invNbr != 0) {

-				if (start) {

-					appendable.append('1'); // e.g. 1/s

-				}

-				appendable.append('/');

-				if (invNbr > 1) {

-					appendable.append('(');

-				}

-				start = true;

-				for (int i = 0; i < productUnit.getUnitCount(); i++) {

-					int pow = productUnit.getUnitPow(i);

-					if (pow < 0) {

-						name = nameFor(productUnit.getUnit(i));

-						int root = productUnit.getUnitRoot(i);

-						if (!start) {

-							appendable.append('\u00b7'); // Separator.

-						}

-						append(appendable, name, -pow, root);

-						start = false;

-					}

-				}

-				if (invNbr > 1) {

-					appendable.append(')');

-				}

-			}

-			return appendable;

-		}

-

-		private void append(Appendable appendable, CharSequence symbol, int pow, int root) throws IOException {

-			appendable.append(symbol);

-			if ((pow != 1) || (root != 1)) {

-				// Write exponent.

-				if ((pow == 2) && (root == 1)) {

-					appendable.append('\u00b2'); // Square

-				} else if ((pow == 3) && (root == 1)) {

-					appendable.append('\u00b3'); // Cubic

-				} else {

-					// Use general exponent form.

-					appendable.append('^');

-					appendable.append(String.valueOf(pow));

-					if (root != 1) {

-						appendable.append(':');

-						appendable.append(String.valueOf(root));

-					}

-				}

-			}

-		}

-

-		// private static final long serialVersionUID = 1L;

-

-		@Override

-		public Unit<?> parse(CharSequence csq) throws ParserException {

-			return parse(csq, 0);

-		}

-

-		protected Unit<?> parse(CharSequence csq, int index) throws ParserException {

-			return parseObject(csq.toString(), new ParsePosition(index));

-		}

-

-		@Override

-		protected SymbolMap getSymbolMap() {

-			// TODO Auto-generated method stub

-			return null;

-		}

-

-		@Override

-		public Unit<?> parse(CharSequence csq, ParsePosition cursor) throws IllegalArgumentException {

-			// TODO Auto-generated method stub

-			return null;

-		}

-	}

-

-	/**

-	 * This class represents the ASCII format.

-	 */

-	protected final static class ASCIIFormat extends DefaultFormat {

-

-		@Override

-		protected String nameFor(Unit<?> unit) {

-			// First search if specific ASCII name should be used.

-			String name = _unitToName.get(unit);

-			if (name != null)

-				return name;

-			// Else returns default name.

-			return DEFAULT.nameFor(unit);

-		}

-

-		@Override

-		protected Unit<?> unitFor(String name) {

-			// First search if specific ASCII name.

-			Unit<?> unit = _nameToUnit.get(name);

-			if (unit != null)

-				return unit;

-			// Else returns default mapping.

-			return DEFAULT.unitFor(name);

-		}

-

-		@Override

-		public Appendable format(Unit<?> unit, Appendable appendable) throws IOException {

-			String name = nameFor(unit);

-			if (name != null)

-				return appendable.append(name);

-			if (!(unit instanceof ProductUnit))

-				throw new IllegalArgumentException("Cannot format given Object as a Unit");

-

-			ProductUnit<?> productUnit = (ProductUnit<?>) unit;

-			for (int i = 0; i < productUnit.getUnitCount(); i++) {

-				if (i != 0) {

-					appendable.append('*'); // Separator.

-				}

-				name = nameFor(productUnit.getUnit(i));

-				int pow = productUnit.getUnitPow(i);

-				int root = productUnit.getUnitRoot(i);

-				appendable.append(name);

-				if ((pow != 1) || (root != 1)) {

-					// Use general exponent form.

-					appendable.append('^');

-					appendable.append(String.valueOf(pow));

-					if (root != 1) {

-						appendable.append(':');

-						appendable.append(String.valueOf(root));

-					}

-				}

-			}

-			return appendable;

-		}

-

-		@Override

-		public boolean isValidIdentifier(String name) {

-			if ((name == null) || (name.length() == 0))

-				return false;

-			// label must not begin with a digit or mathematical operator

-			return isUnitIdentifierPart(name.charAt(0)) && isAllASCII(name);

-			/*

-			 * for (int i = 0; i < name.length(); i++) { if

-			 * (!isAsciiCharacter(name.charAt(i))) return false; } return true;

-			 */

-		}

-	}

-

-	/**

-	 * Holds the unique symbols collection (base units or alternate units).

-	 */

-	private static final Map<String, Unit<?>> SYMBOL_TO_UNIT = new HashMap<>();

-

-	// //////////////////////////////////////////////////////////////////////////

-	// Initializes the standard unit database for SI units.

-

-	private static final Unit<?>[] SI_UNITS = { Units.AMPERE, Units.BECQUEREL, Units.CANDELA, Units.COULOMB,

-			Units.FARAD, Units.GRAY, Units.HENRY, Units.HERTZ, Units.JOULE, Units.KATAL, Units.KELVIN, Units.LUMEN,

-			Units.LUX, Units.METRE, Units.MOLE, Units.NEWTON, Units.OHM, Units.PASCAL, Units.RADIAN, Units.SECOND,

-			Units.SIEMENS, Units.SIEVERT, Units.STERADIAN, Units.TESLA, Units.VOLT, Units.WATT, Units.WEBER };

-

-	private static final String[] PREFIXES = { YOTTA.getSymbol(), ZETTA.getSymbol(), EXA.getSymbol(), PETA.getSymbol(),

-			TERA.getSymbol(), GIGA.getSymbol(), MEGA.getSymbol(), KILO.getSymbol(), HECTO.getSymbol(), DEKA.getSymbol(),

-			DECI.getSymbol(), CENTI.getSymbol(), MILLI.getSymbol(), MICRO.getSymbol(), NANO.getSymbol(),

-			PICO.getSymbol(), FEMTO.getSymbol(), ATTO.getSymbol(), ZEPTO.getSymbol(), YOCTO.getSymbol() };

-

-	// TODO we could try retrieving this dynamically in a static {} method from

-	// MetricPrefix if symbols above are also aligned

-	private static final UnitConverter[] CONVERTERS = { YOTTA.getConverter(), ZETTA.getConverter(), EXA.getConverter(),

-			PETA.getConverter(), TERA.getConverter(), GIGA.getConverter(), MEGA.getConverter(), KILO.getConverter(),

-			HECTO.getConverter(), DEKA.getConverter(), DECI.getConverter(), CENTI.getConverter(), MILLI.getConverter(),

-			MICRO.getConverter(), NANO.getConverter(), PICO.getConverter(), FEMTO.getConverter(), ATTO.getConverter(),

-			ZEPTO.getConverter(), YOCTO.getConverter() };

-

-	private static String asciiPrefix(String prefix) {

-		return prefix == "µ" ? "micro" : prefix;

-	}

-

-	// to check if a string only contains US-ASCII characters

-	//

-	protected static boolean isAllASCII(String input) {

-		boolean isASCII = true;

-		for (int i = 0; i < input.length(); i++) {

-			int c = input.charAt(i);

-			if (c > 0x7F) {

-				isASCII = false;

-				break;

-			}

-		}

-		return isASCII;

-	}

-

-	static {

-		for (int i = 0; i < SI_UNITS.length; i++) {

-			Unit<?> si = SI_UNITS[i];

-			String symbol = (si instanceof BaseUnit) ? ((BaseUnit<?>) si).getSymbol()

-					: ((AlternateUnit<?>) si).getSymbol();

-			DEFAULT.label(si, symbol);

-			if (isAllASCII(symbol))

-				ASCII.label(si, symbol);

-			for (int j = 0; j < PREFIXES.length; j++) {

-				Unit<?> u = si.transform(CONVERTERS[j]);

-				DEFAULT.label(u, PREFIXES[j] + symbol);

-				if (PREFIXES[j] == "µ") {

-					ASCII.label(u, "micro"); // + symbol);

-				}

-			}

-		}

-		// Special case for KILOGRAM.

-		DEFAULT.label(Units.GRAM, "g");

-		for (int i = 0; i < PREFIXES.length; i++) {

-			if (CONVERTERS[i] == KILO.getConverter()) // TODO should it better

-				// be equals()?

-				continue; // kg is already defined.

-			DEFAULT.label(Units.KILOGRAM.transform(CONVERTERS[i].concatenate(MILLI.getConverter())), PREFIXES[i] + "g");

-			if (PREFIXES[i] == "µ") {

-				ASCII.label(Units.KILOGRAM.transform(CONVERTERS[i].concatenate(MILLI.getConverter())), "microg");

-			}

-		}

-

-		// Alias and ASCIIFormat for Ohm

-		DEFAULT.alias(Units.OHM, "Ohm");

-		ASCII.label(Units.OHM, "Ohm");

-		for (int i = 0; i < PREFIXES.length; i++) {

-			DEFAULT.alias(Units.OHM.transform(CONVERTERS[i]), PREFIXES[i] + "Ohm");

-			ASCII.label(Units.OHM.transform(CONVERTERS[i]), asciiPrefix(PREFIXES[i]) + "Ohm");

-		}

-

-		// Special case for DEGREE_CElSIUS.

-		// DEFAULT.label(Units.CELSIUS, "°C");

-		DEFAULT.label(Units.CELSIUS, "\u00b0C");

-		DEFAULT.alias(Units.CELSIUS, "℃");

-		// DEFAULT.alias(Units.CELSIUS, "°C");

-		ASCII.label(Units.CELSIUS, "Celsius");

-		for (int i = 0; i < PREFIXES.length; i++) {

-			DEFAULT.label(Units.CELSIUS.transform(CONVERTERS[i]), PREFIXES[i] + "℃");

-			DEFAULT.alias(Units.CELSIUS.transform(CONVERTERS[i]), PREFIXES[i] + "°C");

-			ASCII.label(Units.CELSIUS.transform(CONVERTERS[i]), asciiPrefix(PREFIXES[i]) + "Celsius");

-		}

-

-		DEFAULT.label(Units.PERCENT, "%");

-		DEFAULT.label(Units.KILOGRAM, "kg");

-		DEFAULT.label(Units.METRE, "m");

-		DEFAULT.label(Units.SECOND, "s");

-		DEFAULT.label(Units.MINUTE, "min");

-		DEFAULT.label(Units.HOUR, "h");

-		DEFAULT.label(Units.DAY, "day");

-		DEFAULT.label(Units.WEEK, "week");

-		DEFAULT.label(Units.YEAR, "year");

-		DEFAULT.label(Units.KILOMETRE_PER_HOUR, "km/h");

-		DEFAULT.label(Units.CUBIC_METRE, "\u33A5");

-		ASCII.label(Units.CUBIC_METRE, "m3");

-		ASCII.label(LITRE, "l");

-		DEFAULT.label(LITRE, "l");

-		DEFAULT.label(MetricPrefix.NANO(LITRE), "nl");

-		ASCII.label(MetricPrefix.NANO(LITRE), "nl");

-		DEFAULT.label(MetricPrefix.MICRO(LITRE), "µl");

-		ASCII.label(MetricPrefix.MICRO(LITRE), "microL");

-		ASCII.label(MetricPrefix.MILLI(LITRE), "mL");

-		DEFAULT.label(MetricPrefix.MILLI(LITRE), "ml");

-		ASCII.label(MetricPrefix.CENTI(LITRE), "cL");

-		DEFAULT.label(MetricPrefix.CENTI(LITRE), "cl");

-		ASCII.label(MetricPrefix.DECI(LITRE), "dL");

-		DEFAULT.label(MetricPrefix.DECI(LITRE), "dl");

-		DEFAULT.label(Units.NEWTON, "N");

-		ASCII.label(Units.NEWTON, "N");

-		DEFAULT.label(Units.RADIAN, "rad");

-		ASCII.label(Units.RADIAN, "rad");

-	}

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/SymbolMapImpl.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/SymbolMapImpl.java
deleted file mode 100644
index dbe8b3c..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/SymbolMapImpl.java
+++ /dev/null
@@ -1,241 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Eric Russell - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.format;

-

-import java.lang.reflect.Field;

-import java.util.Collections;

-import java.util.Comparator;

-import java.util.Enumeration;

-import java.util.HashMap;

-import java.util.List;

-import java.util.Map;

-import java.util.ResourceBundle;

-import java.util.TreeMap;

-import java.util.logging.Level;

-import java.util.logging.Logger;

-import java.util.stream.Collectors;

-import org.eclipse.uomo.units.AbstractUnit;

-import org.eclipse.uomo.units.impl.system.MetricPrefix;

-import javax.measure.Unit;

-import javax.measure.UnitConverter;

-

-/**

- * <p>

- * This class provides a set of mappings between {@link AbstractUnit units} and symbols (both ways), between {@link MetricPrefix prefixes} and symbols

- * (both ways), and from {@link AbstractConverter unit converters} to {@link MetricPrefix prefixes} (one way). No attempt is made to verify the

- * uniqueness of the mappings.

- * </p>

- *

- * <p>

- * Mappings are read from a <code>ResourceBundle</code>, the keys of which should consist of a fully-qualified class name, followed by a dot ('.'),

- * and then the name of a static field belonging to that class, followed optionally by another dot and a number. If the trailing dot and number are

- * not present, the value associated with the key is treated as a {@link SymbolMapImpl#label(AbstractUnit, String) label}, otherwise if the trailing dot

- * and number are present, the value is treated as an {@link SymbolMapImpl#alias(AbstractUnit,String) alias}. Aliases map from String to Unit only,

- * whereas labels map in both directions. A given unit may have any number of aliases, but may have only one label.

- * </p>

- *

- * @author <a href="mailto:eric-r@northwestern.edu">Eric Russell</a>

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @version 1.7, February 25, 2017

- */

-@SuppressWarnings("rawtypes")

-public final class SymbolMapImpl {

-  private static final Logger logger = Logger.getLogger(SymbolMapImpl.class.getName());

-

-  private final Map<String, Unit<?>> symbolToUnit;

-  private final Map<Unit<?>, String> unitToSymbol;

-  private final Map<String, Object> symbolToPrefix;

-  private final Map<Object, String> prefixToSymbol;

-  private final Map<UnitConverter, MetricPrefix> converterToPrefix;

-

-  /**

-   * Creates an empty mapping.

-   */

-  private SymbolMapImpl() {

-    symbolToUnit = new TreeMap<>();

-    unitToSymbol = new HashMap<>();

-    symbolToPrefix = new TreeMap<>();

-    prefixToSymbol = new HashMap<>();

-    converterToPrefix = new HashMap<>();

-  }

-

-  /**

-   * Creates a symbol map from the specified resource bundle,

-   *

-   * @param rb

-   *          the resource bundle.

-   */

-  private SymbolMapImpl(ResourceBundle rb) {

-    this();

-    for (Enumeration<String> i = rb.getKeys(); i.hasMoreElements();) {

-      String fqn = i.nextElement();

-      String symbol = rb.getString(fqn);

-      boolean isAlias = false;

-      int lastDot = fqn.lastIndexOf('.');

-      String className = fqn.substring(0, lastDot);

-      String fieldName = fqn.substring(lastDot + 1, fqn.length());

-      if (Character.isDigit(fieldName.charAt(0))) {

-        isAlias = true;

-        fqn = className;

-        lastDot = fqn.lastIndexOf('.');

-        className = fqn.substring(0, lastDot);

-        fieldName = fqn.substring(lastDot + 1, fqn.length());

-      }

-      try {

-        Class<?> c = Class.forName(className);

-        Field field = c.getField(fieldName);

-        Object value = field.get(null);

-        if (value instanceof Unit<?>) {

-          if (isAlias) {

-            alias((Unit) value, symbol);

-          } else {

-            label((AbstractUnit<?>) value, symbol);

-          }

-        } else if (value instanceof MetricPrefix) {

-          label((MetricPrefix) value, symbol);

-        } else {

-          throw new ClassCastException("unable to cast " + value + " to Unit or Prefix");

-        }

-      } catch (Exception error) {

-        logger.log(Level.SEVERE, "Error", error);

-      }

-    }

-  }

-

-  /**

-   * Creates a symbol map from the specified resource bundle,

-   *

-   * @param rb

-   *          the resource bundle.

-   */

-  public static SymbolMapImpl of(ResourceBundle rb) {

-    return new SymbolMapImpl(rb);

-  }

-

-  /**

-   * Attaches a label to the specified unit. For example:<br>

-   * <code> symbolMap.label(DAY.multiply(365), "year"); symbolMap.label(US.FOOT, "ft");

-   * </code>

-   *

-   * @param unit

-   *          the unit to label.

-   * @param symbol

-   *          the new symbol for the unit.

-   */

-  public void label(Unit<?> unit, String symbol) {

-    symbolToUnit.put(symbol, unit);

-    unitToSymbol.put(unit, symbol);

-  }

-

-  /**

-   * Attaches an alias to the specified unit. Multiple aliases may be attached to the same unit. Aliases are used during parsing to recognize

-   * different variants of the same unit.<code> symbolMap.alias(US.FOOT, "foot"); symbolMap.alias(US.FOOT, "feet");

-   * symbolMap.alias(Units.METER, "meter"); symbolMap.alias(Units.METER, "metre"); </code>

-   *

-   * @param unit

-   *          the unit to label.

-   * @param symbol

-   *          the new symbol for the unit.

-   */

-  public void alias(Unit<?> unit, String symbol) {

-    symbolToUnit.put(symbol, unit);

-  }

-

-  /**

-   * Attaches a label to the specified prefix. For example:<br>

-   * <code> symbolMap.label(MetricPrefix.GIGA, "G"); symbolMap.label(MetricPrefix.MICRO, "µ");

-   * </code>

-   */

-  public void label(MetricPrefix prefix, String symbol) {

-    symbolToPrefix.put(symbol, prefix);

-    prefixToSymbol.put(prefix, symbol);

-    converterToPrefix.put(prefix.getConverter(), prefix);

-  }

-

-  /**

-   * Returns the unit for the specified symbol.

-   *

-   * @param symbol

-   *          the symbol.

-   * @return the corresponding unit or <code>null</code> if none.

-   */

-  public Unit<?> getUnit(String symbol) {

-    return symbolToUnit.get(symbol);

-  }

-

-  /**

-   * Returns the symbol (label) for the specified unit.

-   *

-   * @param unit

-   *          the corresponding symbol.

-   * @return the corresponding symbol or <code>null</code> if none.

-   */

-  public String getSymbol(Unit<?> unit) {

-    return unitToSymbol.get(unit);

-  }

-

-  /**

-   * Returns the prefix (if any) for the specified symbol.

-   *

-   * @param symbol

-   *          the unit symbol.

-   * @return the corresponding prefix or <code>null</code> if none.

-   */

-  public MetricPrefix getPrefix(String symbol) {

-	final List<String> list = symbolToPrefix.keySet().stream().collect(Collectors.toList());

-	final Comparator<String> comparator = Comparator.comparing(String::length);

-	Collections.sort(list, comparator.reversed());

-

-	for (String key : list) {

-	    if (symbol.startsWith(key)) {

-		return (MetricPrefix) symbolToPrefix.get(key);

-	    }

-	}

-	return null;

-    }

-

-  /**

-   * Returns the prefix for the specified converter.

-   *

-   * @param converter

-   *          the unit converter.

-   * @return the corresponding prefix or <code>null</code> if none.

-   */

-  public MetricPrefix getPrefix(UnitConverter converter) {

-    return converterToPrefix.get(converter);

-  }

-

-  /**

-   * Returns the symbol for the specified prefix.

-   *

-   * @param prefix

-   *          the prefix.

-   * @return the corresponding symbol or <code>null</code> if none.

-   */

-  public String getSymbol(MetricPrefix prefix) {

-    return prefixToSymbol.get(prefix);

-  }

-

-  @Override

-  public String toString() {

-    StringBuilder sb = new StringBuilder();

-    sb.append("tec.units.indriya.format.SymbolMap: [");

-    sb.append("symbolToUnit: ").append(symbolToUnit).append(',');

-    sb.append("unitToSymbol: ").append(unitToSymbol).append(',');

-    sb.append("symbolToPrefix: ").append(symbolToPrefix).append(',');

-    sb.append("prefixToSymbol: ").append(prefixToSymbol).append(',');

-    sb.append("converterToPrefix: ").append(converterToPrefix).append(',');

-    sb.append("converterToPrefix: ").append(converterToPrefix);

-    sb.append(" ]");

-    return sb.toString();

-  }

-

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/Token.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/Token.java
deleted file mode 100644
index 8436bbd..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/Token.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-/* Generated By:JavaCC: Do not edit this line. Token.java Version 5.0 */

-/* JavaCCOptions:TOKEN_EXTENDS=,KEEP_LINE_COL=null,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */

-package org.eclipse.uomo.units.impl.format;

-

-/**

- * Describes the input token stream.

- */

-

-class Token implements java.io.Serializable {

-

-     /**

-      * The version identifier for this Serializable class.

-      * Increment only if the <i>serialized</i> form of the

-      * class changes.

-      */

-    private static final long serialVersionUID = 2188279658897600591L;

-

-  /**

-   * An integer that describes the kind of this token.  This numbering

-   * system is determined by JavaCCParser, and a table of these numbers is

-   * stored in the file ...Constants.java.

-   */

-  int kind;

-

-  /** The line number of the first character of this Token. */

-  int beginLine;

-  /** The column number of the first character of this Token. */

-  int beginColumn;

-  /** The line number of the last character of this Token. */

-  int endLine;

-  /** The column number of the last character of this Token. */

-  int endColumn;

-

-  /**

-   * The string image of the token.

-   */

-  String image;

-

-  /**

-   * A reference to the next regular (non-special) token from the input

-   * stream.  If this is the last token from the input stream, or if the

-   * token manager has not read tokens beyond this one, this field is

-   * set to null.  This is true only if this token is also a regular

-   * token.  Otherwise, see below for a description of the contents of

-   * this field.

-   */

-  Token next;

-

-  /**

-   * This field is used to access special tokens that occur prior to this

-   * token, but after the immediately preceding regular (non-special) token.

-   * If there are no such special tokens, this field is set to null.

-   * When there are more than one such special token, this field refers

-   * to the last of these special tokens, which in turn refers to the next

-   * previous special token through its specialToken field, and so on

-   * until the first special token (whose specialToken field is null).

-   * The next fields of special tokens refer to other special tokens that

-   * immediately follow it (without an intervening regular token).  If there

-   * is no such token, this field is null.

-   */

-  Token specialToken;

-

-  /**

-   * An optional attribute value of the Token.

-   * Tokens which are not used as syntactic sugar will often contain

-   * meaningful values that will be used later on by the compiler or

-   * interpreter. This attribute value is often different from the image.

-   * Any subclass of Token that actually wants to return a non-null value can

-   * override this method as appropriate.

-   */

-  public Object getValue() {

-    return null;

-  }

-

-  /**

-   * No-argument constructor

-   */

-  public Token() {}

-

-  /**

-   * Constructs a new token for the specified Image.

-   */

-  public Token(int kind)

-  {

-    this(kind, null);

-  }

-

-  /**

-   * Constructs a new token for the specified Image and Kind.

-   */

-  public Token(int kind, String image)

-  {

-    this.kind = kind;

-    this.image = image;

-  }

-

-  /**

-   * Returns the image.

-   */

-  public String toString()

-  {

-    return image;

-  }

-

-  /**

-   * Returns a new Token object, by default. However, if you want, you

-   * can create and return subclass objects based on the value of ofKind.

-   * Simply add the cases to the switch for all those special cases.

-   * For example, if you have a subclass of Token called IDToken that

-   * you want to create if ofKind is ID, simply add something like :

-   *

-   *    case MyParserConstants.ID : return new IDToken(ofKind, image);

-   *

-   * to the following switch statement. Then you can cast matchedToken

-   * variable to the appropriate type and use sit in your lexical actions.

-   */

-  public static Token newToken(int ofKind, String image)

-  {

-    switch(ofKind)

-    {

-      default : return new Token(ofKind, image);

-    }

-  }

-

-  public static Token newToken(int ofKind)

-  {

-    return newToken(ofKind, null);

-  }

-

-}

-/* JavaCC - OriginalChecksum=08d08345e10cca30522247698d4478e6 (do not edit this line) */

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/TokenException.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/TokenException.java
deleted file mode 100644
index 9921d9c..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/TokenException.java
+++ /dev/null
@@ -1,177 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.format;

-

-import javax.measure.MeasurementException;

-

-/**

- * This exception is thrown when token errors are encountered. You can explicitly create objects of this exception type by calling the method

- * raiseTokenException in the generated parser.

- *

- * You can modify this class to customize your error reporting mechanisms so long as you retain the public fields.

- * 

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @version 0.6, Dec 25, 2017

- */

-public class TokenException extends MeasurementException {

-  // TODO try to merge this with ParserException

-  /**

-   * The Serialization identifier for this class. Increment only if the <i>serialized</i> form of the class changes.

-   */

-  private static final long serialVersionUID = 2932151235799168061L;

-

-  /**

-   * This constructor is used by the method "raiseTokenException" in the generated parser. Calling this constructor generates a new object of this

-   * type with the fields "currentToken", "expectedTokenSequences", and "tokenImage" set.

-   */

-  public TokenException(Token currentTokenVal, int[][] expectedTokenSequencesVal, String[] tokenImageVal) {

-    super(initialise(currentTokenVal, expectedTokenSequencesVal, tokenImageVal));

-    currentToken = currentTokenVal;

-    expectedTokenSequences = expectedTokenSequencesVal;

-    tokenImage = tokenImageVal;

-  }

-

-  /**

-   * The following constructors are for use by you for whatever purpose you can think of. Constructing the exception in this manner makes the

-   * exception behave in the normal way - i.e., as documented in the class "Throwable". The fields "errorToken", "expectedTokenSequences", and

-   * "tokenImage" do not contain relevant information. The JavaCC generated code does not use these constructors.

-   */

-

-  public TokenException() {

-    super();

-  }

-

-  /** Constructor with message. */

-  public TokenException(String message) {

-    super(message);

-  }

-

-  /**

-   * This is the last token that has been consumed successfully. If this object has been created due to a parse error, the token followng this token

-   * will (therefore) be the first error token.

-   */

-  public Token currentToken;

-

-  /**

-   * Each entry in this array is an array of integers. Each array of integers represents a sequence of tokens (by their ordinal values) that is

-   * expected at this point of the parse.

-   */

-  public int[][] expectedTokenSequences;

-

-  /**

-   * This is a reference to the "tokenImage" array of the generated parser within which the parse error occurred. This array is defined in the

-   * generated ...Constants interface.

-   */

-  public String[] tokenImage;

-

-  /**

-   * It uses "currentToken" and "expectedTokenSequences" to generate a parse error message and returns it. If this object has been created due to a

-   * parse error, and you do not catch it (it gets thrown from the parser) the correct error message gets displayed.

-   */

-  private static String initialise(Token currentToken, int[][] expectedTokenSequences, String[] tokenImage) {

-    String eol = System.getProperty("line.separator", "\n");

-    StringBuilder expected = new StringBuilder();

-    int maxSize = 0;

-    for (int[] expectedTokenSequence : expectedTokenSequences) {

-      if (maxSize < expectedTokenSequence.length) {

-        maxSize = expectedTokenSequence.length;

-      }

-      for (int anExpectedTokenSequence : expectedTokenSequence) {

-        expected.append(tokenImage[anExpectedTokenSequence]).append(' ');

-      }

-      if (expectedTokenSequence[expectedTokenSequence.length - 1] != 0) {

-        expected.append("...");

-      }

-      expected.append(eol).append("    ");

-    }

-    String retval = "Encountered \"";

-    Token tok = currentToken.next;

-    for (int i = 0; i < maxSize; i++) {

-      if (i != 0)

-        retval += " ";

-      if (tok.kind == 0) {

-        retval += tokenImage[0];

-        break;

-      }

-      retval += " " + tokenImage[tok.kind];

-      retval += " \"";

-      retval += add_escapes(tok.image);

-      retval += " \"";

-      tok = tok.next;

-    }

-    retval += "\" at line " + currentToken.next.beginLine + ", column " + currentToken.next.beginColumn;

-    retval += "." + eol;

-    if (expectedTokenSequences.length == 1) {

-      retval += "Was expecting:" + eol + "    ";

-    } else {

-      retval += "Was expecting one of:" + eol + "    ";

-    }

-    retval += expected.toString();

-    return retval;

-  }

-

-  /**

-   * The end of line string for this machine.

-   */

-  protected String eol = System.getProperty("line.separator", "\n");

-

-  /**

-   * Used to convert raw characters to their escaped version when these raw version cannot be used as part of an ASCII string literal.

-   */

-  static String add_escapes(String str) {

-    StringBuilder retval = new StringBuilder();

-    char ch;

-    for (int i = 0; i < str.length(); i++) {

-      switch (str.charAt(i)) {

-        case 0:

-          continue;

-        case '\b':

-          retval.append("\\b");

-          continue;

-        case '\t':

-          retval.append("\\t");

-          continue;

-        case '\n':

-          retval.append("\\n");

-          continue;

-        case '\f':

-          retval.append("\\f");

-          continue;

-        case '\r':

-          retval.append("\\r");

-          continue;

-        case '\"':

-          retval.append("\\\"");

-          continue;

-        case '\'':

-          retval.append("\\\'");

-          continue;

-        case '\\':

-          retval.append("\\\\");

-          continue;

-        default:

-          if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {

-            String s = "0000" + Integer.toString(ch, 16);

-            retval.append("\\u").append(s.substring(s.length() - 4, s.length()));

-          } else {

-            retval.append(ch);

-          }

-      }

-    }

-    return retval.toString();

-  }

-

-}

-/*

- * JavaCC - OriginalChecksum=c67b0f8ee6c642900399352b33f90efd (do not edit this

- * line)

- */

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/TokenMgrError.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/TokenMgrError.java
deleted file mode 100644
index d48cbb2..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/TokenMgrError.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-/* Generated By:JavaCC: Do not edit this line. TokenMgrError.java Version 5.0 */
-/* JavaCCOptions: */
-package org.eclipse.uomo.units.impl.format;
-
-/** Token Manager Error. */
-class TokenMgrError extends Error
-{
-
-  /**
-   * The version identifier for this Serializable class.
-   * Increment only if the <i>serialized</i> form of the
-   * class changes.
-   */
-    private static final long serialVersionUID = -3348968864772188432L;
-
-  /*
-   * Ordinals for various reasons why an Error of this type can be thrown.
-   */
-
-
-  /**
-   * Lexical error occurred.
-   */
-  static final int LEXICAL_ERROR = 0;
-
-  /**
-   * An attempt was made to create a second instance of a static token manager.
-   */
-  static final int STATIC_LEXER_ERROR = 1;
-
-  /**
-   * Tried to change to an invalid lexical state.
-   */
-  static final int INVALID_LEXICAL_STATE = 2;
-
-  /**
-   * Detected (and bailed out of) an infinite loop in the token manager.
-   */
-  static final int LOOP_DETECTED = 3;
-
-  /**
-   * Indicates the reason why the exception is thrown. It will have
-   * one of the above 4 values.
-   */
-  int errorCode;
-
-  /**
-   * Replaces unprintable characters by their escaped (or unicode escaped)
-   * equivalents in the given string
-   */
-  static final String addEscapes(String str) {
-    StringBuffer retval = new StringBuffer();
-    char ch;
-    for (int i = 0; i < str.length(); i++) {
-      switch (str.charAt(i))
-      {
-        case 0 :
-          continue;
-        case '\b':
-          retval.append("\\b");
-          continue;
-        case '\t':
-          retval.append("\\t");
-          continue;
-        case '\n':
-          retval.append("\\n");
-          continue;
-        case '\f':
-          retval.append("\\f");
-          continue;
-        case '\r':
-          retval.append("\\r");
-          continue;
-        case '\"':
-          retval.append("\\\"");
-          continue;
-        case '\'':
-          retval.append("\\\'");
-          continue;
-        case '\\':
-          retval.append("\\\\");
-          continue;
-        default:
-          if ((ch = str.charAt(i)) < 0x20 || ch > 0x7e) {
-            String s = "0000" + Integer.toString(ch, 16);
-            retval.append("\\u" + s.substring(s.length() - 4, s.length()));
-          } else {
-            retval.append(ch);
-          }
-          continue;
-      }
-    }
-    return retval.toString();
-  }
-
-  /**
-   * Returns a detailed message for the Error when it is thrown by the
-   * token manager to indicate a lexical error.
-   * Parameters :
-   *    EOFSeen     : indicates if EOF caused the lexical error
-   *    curLexState : lexical state in which this error occurred
-   *    errorLine   : line number when the error occurred
-   *    errorColumn : column number when the error occurred
-   *    errorAfter  : prefix that was seen before this error occurred
-   *    curchar     : the offending character
-   * Note: You can customize the lexical error message by modifying this method.
-   */
-  static String lexicalError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar) {
-    return("Lexical error at line " +
-          errorLine + ", column " +
-          errorColumn + ".  Encountered: " +
-          (EOFSeen ? "<EOF> " : ("\"" + addEscapes(String.valueOf(curChar)) + "\"") + " (" + (int)curChar + "), ") +
-          "after : \"" + addEscapes(errorAfter) + "\"");
-  }
-
-  /**
-   * You can also modify the body of this method to customize your error messages.
-   * For example, cases like LOOP_DETECTED and INVALID_LEXICAL_STATE are not
-   * of end-users concern, so you can return something like :
-   *
-   *     "Internal Error : Please file a bug report .... "
-   *
-   * from this method for such cases in the release version of your parser.
-   */
-  public String getMessage() {
-    return super.getMessage();
-  }
-
-  /*
-   * Constructors of various flavors follow.
-   */
-
-  /** No arg constructor. */
-  public TokenMgrError() {
-  }
-
-  /** Constructor with message and reason. */
-  public TokenMgrError(String message, int reason) {
-    super(message);
-    errorCode = reason;
-  }
-
-  /** Full Constructor. */
-  public TokenMgrError(boolean EOFSeen, int lexState, int errorLine, int errorColumn, String errorAfter, char curChar, int reason) {
-    this(lexicalError(EOFSeen, lexState, errorLine, errorColumn, errorAfter, curChar), reason);
-  }
-}
-/* JavaCC - OriginalChecksum=8a6e5be586cca28053ad55584e013006 (do not edit this line) */
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitFormatServiceImpl.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitFormatServiceImpl.java
deleted file mode 100644
index f739724..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitFormatServiceImpl.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Copyright (c) 2005, 2010, Werner Keil, JScience and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.format;
-
-import java.util.Locale;
-
-import org.eclipse.uomo.units.AbstractUnitFormat;
-import javax.measure.service.UnitFormatService;
-import javax.measure.format.UnitFormat;
-
-import com.ibm.icu.util.ULocale;
-
-/**
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 0.5 ($Revision: 308 $), $Date: 2010-11-02 15:56:52 +0000 (Di, 02 Nov 2010) $
- */
-public class UnitFormatServiceImpl implements UnitFormatService {
-
-	@Override
-	public UnitFormat getUnitFormat() {
-		return AbstractUnitFormat.getUnitFormat();
-	}
-
-	@Override
-	public UnitFormat getUnitFormat(String name) {
-		return getUnitFormat();
-	}
-
-	@Override
-	public UnitFormat getUnitFormat(Locale locale) {
-		return AbstractUnitFormat.getUnitFormat(ULocale.forLocale(locale));
-	}
-
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitParser.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitParser.java
deleted file mode 100644
index 165624a..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitParser.java
+++ /dev/null
@@ -1,771 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-/* Generated By:JavaCC: Do not edit this line. UnitParser.java */

-package org.eclipse.uomo.units.impl.format;

-

-import org.eclipse.uomo.units.AbstractUnit;

-import org.eclipse.uomo.units.impl.converter.LogConverter;

-import javax.measure.Unit;

-

-/** */

-class UnitParser implements UnitTokenConstants {

-

-    private static class Exponent {

-        final int pow;

-        final int root;

-        public Exponent (int pow, int root) {

-            this.pow = pow;

-            this.root = root;

-        }

-    }

-

-    private SymbolMapImpl symbols;

-

-    UnitParser (SymbolMapImpl symbols, java.io.Reader in) {

-        this(in);

-        this.symbols = symbols;

-    }

-

-//

-// Parser productions

-//

-    @SuppressWarnings("unused")

-	Unit<?> parseUnit() throws ParseException {

-        Unit<?> result;

-    result = compoundExpr();

-    jj_consume_token(0);

-        {if (true) return result;}

-    throw new Error("Missing return statement in function");

-  }

-

-  @SuppressWarnings("unused")

-Unit<?> compoundExpr() throws ParseException {

-        Unit<?> result = AbstractUnit.ONE;

-        result = addExpr();

-    label_1:

-    while (true) {

-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-      case COLON:

-        ;

-        break;

-      default:

-        jj_la1[0] = jj_gen;

-        break label_1;

-      }

-      jj_consume_token(COLON);

-    }

-      {if (true) return result;}

-    throw new Error("Missing return statement in function");

-  }

-

-  @SuppressWarnings("unused")

-Unit<?> addExpr() throws ParseException {

-        Unit<?> result = AbstractUnit.ONE;

-        Number n1 = null;

-        Token sign1 = null;

-        Number n2 = null;

-        Token sign2 = null;

-    if (jj_2_1(2147483647)) {

-      n1 = numberExpr();

-      sign1 = sign();

-    } else {

-      ;

-    }

-    result = mulExpr();

-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-    case PLUS:

-    case MINUS:

-      sign2 = sign();

-      n2 = numberExpr();

-      break;

-    default:

-      jj_la1[1] = jj_gen;

-      ;

-    }

-        if (n1 != null) {

-            if (sign1.image.equals("-")) {

-                result = result.multiply(-1);

-            }

-            result = result.add(n1.doubleValue());

-        }

-        if (n2 != null) {

-            double offset = n2.doubleValue();

-            if (sign2.image.equals("-")) {

-                offset = -offset;

-            }

-            result = result.add(offset);

-        }

-        {if (true) return result;}

-    throw new Error("Missing return statement in function");

-  }

-

-    Unit<?> mulExpr() throws ParseException {

-        Unit<?> result = AbstractUnit.ONE;

-        Unit<?> temp = AbstractUnit.ONE;

-    result = exponentExpr();

-    label_2:

-    while (true) {

-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-      case ASTERISK:

-      case MIDDLE_DOT:

-      case SOLIDUS:

-        ;

-        break;

-      default:

-        jj_la1[2] = jj_gen;

-        break label_2;

-      }

-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-      case ASTERISK:

-      case MIDDLE_DOT:

-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-        case ASTERISK:

-          jj_consume_token(ASTERISK);

-          break;

-        case MIDDLE_DOT:

-          jj_consume_token(MIDDLE_DOT);

-          break;

-        default:

-          jj_la1[3] = jj_gen;

-          jj_consume_token(-1);

-          throw new ParseException();

-        }

-        temp = exponentExpr();

-                                                          result=result.multiply(temp);

-        break;

-      case SOLIDUS:

-        jj_consume_token(SOLIDUS);

-        temp = exponentExpr();

-                                        result=result.divide(temp);

-        break;

-      default:

-        jj_la1[4] = jj_gen;

-        jj_consume_token(-1);

-        throw new ParseException();

-      }

-    }

-      //{if (true) 

-    	  return result;//}

-//    throw new Error("Missing return statement in function");

-  }

-

-    @SuppressWarnings("unused")

-	Unit<?> exponentExpr() throws ParseException {

-        Unit<?> result = AbstractUnit.ONE;

-        Exponent exponent = null;

-        Token token = null;

-    if (jj_2_2(2147483647)) {

-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-      case INTEGER:

-        token = jj_consume_token(INTEGER);

-        break;

-      case E:

-        token = jj_consume_token(E);

-        break;

-      default:

-        jj_la1[5] = jj_gen;

-        jj_consume_token(-1);

-        throw new ParseException();

-      }

-      jj_consume_token(CARET);

-      result = atomicExpr();

-        double base;

-        if (token.kind == INTEGER) {

-            base = Integer.parseInt(token.image);

-        } else {

-            base = StrictMath.E;

-        }

-        {if (true) return result.transform(new LogConverter(base).inverse());}

-    } else {

-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-      case OPEN_PAREN:

-      case INTEGER:

-      case FLOATING_POINT:

-      case UNIT_IDENTIFIER:

-        result = atomicExpr();

-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-        case CARET:

-        case SUPERSCRIPT_INTEGER:

-          exponent = exp();

-          break;

-        default:

-          jj_la1[6] = jj_gen;

-          ;

-        }

-        if (exponent != null) {

-            if (exponent.pow != 1) {

-                result = result.pow(exponent.pow);

-            }

-            if (exponent.root != 1) {

-                result = result.root(exponent.root);

-            }

-        }

-        {if (true) return result;}

-//        break;

-      case LOG:

-      case NAT_LOG:

-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-        case LOG:

-          jj_consume_token(LOG);

-          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-          case INTEGER:

-            token = jj_consume_token(INTEGER);

-            break;

-          default:

-            jj_la1[7] = jj_gen;

-            ;

-          }

-          break;

-        case NAT_LOG:

-          token = jj_consume_token(NAT_LOG);

-          break;

-        default:

-          jj_la1[8] = jj_gen;

-          jj_consume_token(-1);

-          throw new ParseException();

-        }

-        jj_consume_token(OPEN_PAREN);

-        result = addExpr();

-        jj_consume_token(CLOSE_PAREN);

-        double base = 10;

-        if (token != null) {

-            if (token.kind == INTEGER) {

-                base = Integer.parseInt(token.image);

-            } else if (token.kind == NAT_LOG) {

-                base = StrictMath.E;

-            }

-        }

-        {if (true) return result.transform(new LogConverter(base));}

-      default:

-        jj_la1[9] = jj_gen;

-        jj_consume_token(-1);

-        throw new ParseException();

-      }

-    }

-    throw new Error("Missing return statement in function");

-  }

-

-  Unit<?> atomicExpr() throws ParseException {

-        Unit<?> result = AbstractUnit.ONE;

-//        Unit<?> temp = AbstractUnit.ONE;

-        Number n = null;

-        Token token = null;

-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-    case INTEGER:

-    case FLOATING_POINT:

-      n = numberExpr();

-        if (n instanceof Integer) {

-            {if (true) return result.multiply(n.intValue());}

-        } else {

-            {if (true) return result.multiply(n.doubleValue());}

-        }

-//      break;

-    case UNIT_IDENTIFIER:

-      token = jj_consume_token(UNIT_IDENTIFIER);

-        Unit<?> unit = symbols.getUnit(token.image);

-        if (unit == null) {

-            ParsePrefix prefix = symbols.getPrefix(token.image);

-            if (prefix != null) {

-                String prefixSymbol = symbols.getSymbol(prefix);

-                unit = symbols.getUnit(token.image.substring(prefixSymbol.length()));

-                if (unit != null) {

-                    {if (true) return unit.transform(prefix.getConverter());}

-                }

-            }

-            {if (true) throw new ParseException();}

-        } else {

-            {if (true) return unit;}

-        }

-//      break;

-    case OPEN_PAREN:

-      jj_consume_token(OPEN_PAREN);

-      result = addExpr();

-      jj_consume_token(CLOSE_PAREN);

-        {if (true) return result;}

-//      break;

-    default:

-      jj_la1[10] = jj_gen;

-      jj_consume_token(-1);

-      throw new ParseException();

-    }

-//    throw new Error("Missing return statement in function");

-  }

-

-  @SuppressWarnings("unused")

-Token sign() throws ParseException {

-        Token result = null;

-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-    case PLUS:

-      result = jj_consume_token(PLUS);

-      break;

-    case MINUS:

-      result = jj_consume_token(MINUS);

-      break;

-    default:

-      jj_la1[11] = jj_gen;

-      jj_consume_token(-1);

-      throw new ParseException();

-    }

-        {if (true) return result;}

-    throw new Error("Missing return statement in function");

-  }

-

-  Number numberExpr() throws ParseException {

-        Token token = null;

-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-    case INTEGER:

-      token = jj_consume_token(INTEGER);

-        {if (true) return Long.valueOf(token.image);}

-//      break;

-    case FLOATING_POINT:

-      token = jj_consume_token(FLOATING_POINT);

-        {if (true) return Double.valueOf(token.image);}

-//      break;

-    default:

-      jj_la1[12] = jj_gen;

-      jj_consume_token(-1);

-      throw new ParseException();

-    }

-//    throw new Error("Missing return statement in function");

-  }

-

-  Exponent exp() throws ParseException {

-        Token powSign = null;

-        Token powToken = null;

-        Token rootSign = null;

-        Token rootToken = null;

-    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-    case CARET:

-      jj_consume_token(CARET);

-      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-      case PLUS:

-      case MINUS:

-      case INTEGER:

-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-        case PLUS:

-        case MINUS:

-          powSign = sign();

-          break;

-        default:

-          jj_la1[13] = jj_gen;

-          ;

-        }

-        powToken = jj_consume_token(INTEGER);

-            int pow = Integer.parseInt(powToken.image);

-            if ((powSign != null) && powSign.image.equals("-")) {

-                pow = -pow;

-            }

-            {if (true) return new Exponent(pow, 1);}

-      case OPEN_PAREN:

-        jj_consume_token(OPEN_PAREN);

-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-        case PLUS:

-        case MINUS:

-          powSign = sign();

-          break;

-        default:

-          jj_la1[14] = jj_gen;

-          ;

-        }

-        powToken = jj_consume_token(INTEGER);

-        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-        case SOLIDUS:

-          jj_consume_token(SOLIDUS);

-          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {

-          case PLUS:

-          case MINUS:

-            rootSign = sign();

-            break;

-          default:

-            jj_la1[15] = jj_gen;

-            ;

-          }

-          rootToken = jj_consume_token(INTEGER);

-          break;

-        default:

-          jj_la1[16] = jj_gen;

-          ;

-        }

-        jj_consume_token(CLOSE_PAREN);

-            pow = Integer.parseInt(powToken.image);

-            if ((powSign != null) && powSign.image.equals("-")) {

-                pow = -pow;

-            }

-            int root = 1;

-            if (rootToken != null) {

-                root = Integer.parseInt(rootToken.image);

-                if ((rootSign != null) && rootSign.image.equals("-")) {

-                    root = -root;

-                }

-            }

-            {if (true) return new Exponent(pow, root);}

-      default:

-        jj_la1[17] = jj_gen;

-        jj_consume_token(-1);

-        throw new ParseException();

-      }

-    case SUPERSCRIPT_INTEGER:

-      powToken = jj_consume_token(SUPERSCRIPT_INTEGER);

-        int pow = 0;

-        for (int i = 0; i < powToken.image.length(); i += 1) {

-            pow *= 10;

-            switch (powToken.image.charAt(i)) {

-                case '\u00b9': pow += 1; break;

-                case '\u00b2': pow += 2; break;

-                case '\u00b3': pow += 3; break;

-                case '\u2074': pow += 4; break;

-                case '\u2075': pow += 5; break;

-                case '\u2076': pow += 6; break;

-                case '\u2077': pow += 7; break;

-                case '\u2078': pow += 8; break;

-                case '\u2079': pow += 9; break;

-            }

-        }

-        {if (true) return new Exponent(pow, 1);}

-//      break;

-    default:

-      jj_la1[18] = jj_gen;

-      jj_consume_token(-1);

-      throw new ParseException();

-    }

-//    throw new Error("Missing return statement in function");

-  }

-

-  private boolean jj_2_1(int xla) {

-    jj_la = xla; jj_lastpos = jj_scanpos = token;

-    try { return !jj_3_1(); }

-    catch(LookaheadSuccess ls) { return true; }

-    finally { jj_save(0, xla); }

-  }

-

-  private boolean jj_2_2(int xla) {

-    jj_la = xla; jj_lastpos = jj_scanpos = token;

-    try { return !jj_3_2(); }

-    catch(LookaheadSuccess ls) { return true; }

-    finally { jj_save(1, xla); }

-  }

-

-  private boolean jj_3R_3() {

-    Token xsp;

-    xsp = jj_scanpos;

-    if (jj_3R_5()) {

-    jj_scanpos = xsp;

-    if (jj_3R_6()) return true;

-    }

-    return false;

-  }

-

-  private boolean jj_3R_6() {

-    if (jj_scan_token(FLOATING_POINT)) return true;

-    return false;

-  }

-

-  private boolean jj_3_2() {

-    Token xsp;

-    xsp = jj_scanpos;

-    if (jj_scan_token(14)) {

-    jj_scanpos = xsp;

-    if (jj_scan_token(19)) return true;

-    }

-    if (jj_scan_token(CARET)) return true;

-    return false;

-  }

-

-  private boolean jj_3_1() {

-    if (jj_3R_3()) return true;

-    if (jj_3R_4()) return true;

-    return false;

-  }

-

-  private boolean jj_3R_4() {

-    Token xsp;

-    xsp = jj_scanpos;

-    if (jj_scan_token(5)) {

-    jj_scanpos = xsp;

-    if (jj_scan_token(6)) return true;

-    }

-    return false;

-  }

-

-  private boolean jj_3R_5() {

-    if (jj_scan_token(INTEGER)) return true;

-    return false;

-  }

-

-  /** Generated Token Manager. */

-  private UnitParserTokenManager token_source;

-  private SimpleCharStream jj_input_stream;

-  /** Current token. */

-  private Token token;

-  /** Next token. */

-  private Token jj_nt;

-  private int jj_ntk;

-  private Token jj_scanpos, jj_lastpos;

-  private int jj_la;

-  private int jj_gen;

-  final private int[] jj_la1 = new int[19];

-  static private int[] jj_la1_0;

-  static {

-      jj_la1_init_0();

-   }

-   private static void jj_la1_init_0() {

-      jj_la1_0 = new int[] {0x800,0x60,0x380,0x180,0x380,0x84000,0x8400,0x4000,0x60000,0x175000,0x115000,0x60,0x14000,0x60,0x60,0x60,0x200,0x5060,0x8400,};

-   }

-  final private JJCalls[] jj_2_rtns = new JJCalls[2];

-  private boolean jj_rescan = false;

-  private int jj_gc = 0;

-

-  /** Constructor with InputStream. */

-  UnitParser(java.io.InputStream stream) {

-     this(stream, null);

-  }

-  /** Constructor with InputStream and supplied encoding */

-  UnitParser(java.io.InputStream stream, String encoding) {

-    try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }

-    token_source = new UnitParserTokenManager(jj_input_stream);

-    token = new Token();

-    jj_ntk = -1;

-    jj_gen = 0;

-    for (int i = 0; i < 19; i++) jj_la1[i] = -1;

-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();

-  }

-

-  /** Constructor. */

-  UnitParser(java.io.Reader stream) {

-    jj_input_stream = new SimpleCharStream(stream, 1, 1);

-    token_source = new UnitParserTokenManager(jj_input_stream);

-    token = new Token();

-    jj_ntk = -1;

-    jj_gen = 0;

-    for (int i = 0; i < 19; i++) jj_la1[i] = -1;

-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();

-  }

-

-  /** Reinitialise. */

-//  private void reInit(java.io.Reader stream) {

-//    jj_input_stream.reInit(stream, 1, 1);

-//    token_source.reInit(jj_input_stream);

-//    token = new Token();

-//    jj_ntk = -1;

-//    jj_gen = 0;

-//    for (int i = 0; i < 19; i++) jj_la1[i] = -1;

-//    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();

-//  }

-

-  /** Constructor with generated Token Manager. */

-  UnitParser(UnitParserTokenManager tm) {

-    token_source = tm;

-    token = new Token();

-    jj_ntk = -1;

-    jj_gen = 0;

-    for (int i = 0; i < 19; i++) jj_la1[i] = -1;

-    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();

-  }

-

-  /** Reinitialise. */

-//  private void reInit(UnitParserTokenManager tm) {

-//    token_source = tm;

-//    token = new Token();

-//    jj_ntk = -1;

-//    jj_gen = 0;

-//    for (int i = 0; i < 19; i++) jj_la1[i] = -1;

-//    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();

-//  }

-

-  private Token jj_consume_token(int kind) throws ParseException {

-    Token oldToken;

-    if ((oldToken = token).next != null) token = token.next;

-    else token = token.next = token_source.getNextToken();

-    jj_ntk = -1;

-    if (token.kind == kind) {

-      jj_gen++;

-      if (++jj_gc > 100) {

-        jj_gc = 0;

-        for (int i = 0; i < jj_2_rtns.length; i++) {

-          JJCalls c = jj_2_rtns[i];

-          while (c != null) {

-            if (c.gen < jj_gen) c.first = null;

-            c = c.next;

-          }

-        }

-      }

-      return token;

-    }

-    token = oldToken;

-    jj_kind = kind;

-    throw generateParseException();

-  }

-

-  static private final class LookaheadSuccess extends java.lang.Error {

-

-  /**

-   *

-   */

-  private static final long serialVersionUID = -8192240240676284081L; }

-  final private LookaheadSuccess jj_ls = new LookaheadSuccess();

-  private boolean jj_scan_token(int kind) {

-    if (jj_scanpos == jj_lastpos) {

-      jj_la--;

-      if (jj_scanpos.next == null) {

-        jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();

-      } else {

-        jj_lastpos = jj_scanpos = jj_scanpos.next;

-      }

-    } else {

-      jj_scanpos = jj_scanpos.next;

-    }

-    if (jj_rescan) {

-      int i = 0; Token tok = token;

-      while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }

-      if (tok != null) jj_add_error_token(kind, i);

-    }

-    if (jj_scanpos.kind != kind) return true;

-    if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;

-    return false;

-  }

-

-

-/** Get the next Token. */

-  final Token getNextToken() {

-    if (token.next != null) token = token.next;

-    else token = token.next = token_source.getNextToken();

-    jj_ntk = -1;

-    jj_gen++;

-    return token;

-  }

-

-/** Get the specific Token. */

-  final Token getToken(int index) {

-    Token t = token;

-    for (int i = 0; i < index; i++) {

-      if (t.next != null) t = t.next;

-      else t = t.next = token_source.getNextToken();

-    }

-    return t;

-  }

-

-  private int jj_ntk() {

-    if ((jj_nt=token.next) == null)

-      return (jj_ntk = (token.next=token_source.getNextToken()).kind);

-    else

-      return (jj_ntk = jj_nt.kind);

-  }

-

-  private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();

-  private int[] jj_expentry;

-  private int jj_kind = -1;

-  private int[] jj_lasttokens = new int[100];

-  private int jj_endpos;

-

-  private void jj_add_error_token(int kind, int pos) {

-    if (pos >= 100) return;

-    if (pos == jj_endpos + 1) {

-      jj_lasttokens[jj_endpos++] = kind;

-    } else if (jj_endpos != 0) {

-      jj_expentry = new int[jj_endpos];

-      for (int i = 0; i < jj_endpos; i++) {

-        jj_expentry[i] = jj_lasttokens[i];

-      }

-      jj_entries_loop: for (java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();) {

-        int[] oldentry = (int[])(it.next());

-        if (oldentry.length == jj_expentry.length) {

-          for (int i = 0; i < jj_expentry.length; i++) {

-            if (oldentry[i] != jj_expentry[i]) {

-              continue jj_entries_loop;

-            }

-          }

-          jj_expentries.add(jj_expentry);

-          break jj_entries_loop;

-        }

-      }

-      if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;

-    }

-  }

-

-  /** Generate ParseException. */

-  ParseException generateParseException() {

-    jj_expentries.clear();

-    boolean[] la1tokens = new boolean[21];

-    if (jj_kind >= 0) {

-      la1tokens[jj_kind] = true;

-      jj_kind = -1;

-    }

-    for (int i = 0; i < 19; i++) {

-      if (jj_la1[i] == jj_gen) {

-        for (int j = 0; j < 32; j++) {

-          if ((jj_la1_0[i] & (1<<j)) != 0) {

-            la1tokens[j] = true;

-          }

-        }

-      }

-    }

-    for (int i = 0; i < 21; i++) {

-      if (la1tokens[i]) {

-        jj_expentry = new int[1];

-        jj_expentry[0] = i;

-        jj_expentries.add(jj_expentry);

-      }

-    }

-    jj_endpos = 0;

-    jj_rescan_token();

-    jj_add_error_token(0, 0);

-    int[][] exptokseq = new int[jj_expentries.size()][];

-    for (int i = 0; i < jj_expentries.size(); i++) {

-      exptokseq[i] = jj_expentries.get(i);

-    }

-    return new ParseException(token, exptokseq, tokenImage);

-  }

-

-  /** Enable tracing. */

-  final void enable_tracing() {

-  }

-

-  /** Disable tracing. */

-  final void disable_tracing() {

-  }

-

-  private void jj_rescan_token() {

-    jj_rescan = true;

-    for (int i = 0; i < 2; i++) {

-    try {

-      JJCalls p = jj_2_rtns[i];

-      do {

-        if (p.gen > jj_gen) {

-          jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;

-          switch (i) {

-            case 0: jj_3_1(); break;

-            case 1: jj_3_2(); break;

-          }

-        }

-        p = p.next;

-      } while (p != null);

-      } catch(LookaheadSuccess ls) { }

-    }

-    jj_rescan = false;

-  }

-

-  private void jj_save(int index, int xla) {

-    JJCalls p = jj_2_rtns[index];

-    while (p.gen > jj_gen) {

-      if (p.next == null) { p = p.next = new JJCalls(); break; }

-      p = p.next;

-    }

-    p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;

-  }

-

-  static final class JJCalls {

-    int gen;

-    Token first;

-    int arg;

-    JJCalls next;

-  }

-

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitParserTokenManager.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitParserTokenManager.java
deleted file mode 100644
index c2bf663..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitParserTokenManager.java
+++ /dev/null
@@ -1,482 +0,0 @@
-/**
- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-/* Generated By:JavaCC: Do not edit this line. UnitParserTokenManager.java */
-package org.eclipse.uomo.units.impl.format;
-
-/** Token Manager. */
-class UnitParserTokenManager implements UnitTokenConstants
-{
-
-  /** Debug output. */
-  java.io.PrintStream debugStream = System.out;
-  /** Set debug output. */
-  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
-//private final int jjStopStringLiteralDfa_0(int pos, long active0)
-//{
-//   switch (pos)
-//   {
-//      default :
-//         return -1;
-//   }
-//}
-//private final int jjStartNfa_0(int pos, long active0)
-//{
-//   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
-//}
-private int jjStopAtPos(int pos, int kind)
-{
-   jjmatchedKind = kind;
-   jjmatchedPos = pos;
-   return pos + 1;
-}
-private int jjMoveStringLiteralDfa0_0()
-{
-   switch(curChar)
-   {
-      case 40:
-         return jjStopAtPos(0, 12);
-      case 41:
-         return jjStopAtPos(0, 13);
-      case 42:
-         return jjStopAtPos(0, 7);
-      case 43:
-         return jjStopAtPos(0, 5);
-      case 45:
-         return jjStopAtPos(0, 6);
-      case 47:
-         return jjStopAtPos(0, 9);
-      case 58:
-         return jjStopAtPos(0, 11);
-      case 94:
-         return jjStopAtPos(0, 10);
-      case 101:
-         return jjStartNfaWithStates_0(0, 19, 7);
-      case 183:
-         return jjStopAtPos(0, 8);
-      default :
-         return jjMoveNfa_0(6, 0);
-   }
-}
-private int jjStartNfaWithStates_0(int pos, int kind, int state)
-{
-   jjmatchedKind = kind;
-   jjmatchedPos = pos;
-   try { curChar = input_stream.readChar(); }
-   catch(java.io.IOException e) { return pos + 1; }
-   return jjMoveNfa_0(state, pos + 1);
-}
-static final long[] jjbitVec0 = {
-   0x0L, 0x0L, 0x20c000000000000L, 0x0L
-};
-static final long[] jjbitVec1 = {
-   0x0L, 0x3f1000000000000L, 0x0L, 0x0L
-};
-static final long[] jjbitVec2 = {
-   0xfffffffefffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
-};
-static final long[] jjbitVec4 = {
-   0x0L, 0x0L, 0xfd73ffffffffffffL, 0xffffffffffffffffL
-};
-static final long[] jjbitVec5 = {
-   0xffffffffffffffffL, 0xfc0effffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
-};
-private int jjMoveNfa_0(int startState, int curPos)
-{
-   int startsAt = 0;
-   jjnewStateCnt = 15;
-   int i = 1;
-   jjstateSet[0] = startState;
-   int kind = 0x7fffffff;
-   for (;;)
-   {
-      if (++jjround == 0x7fffffff)
-         ReInitRounds();
-      if (curChar < 64)
-      {
-         long l = 1L << curChar;
-         do
-         {
-            switch(jjstateSet[--i])
-            {
-               case 6:
-                  if ((0xf80010fe00000000L & l) != 0L)
-                  {
-                     if (kind > 20)
-                        kind = 20;
-                     jjCheckNAdd(7);
-                  }
-                  else if ((0x3ff000000000000L & l) != 0L)
-                  {
-                     if (kind > 14)
-                        kind = 14;
-                     jjCheckNAddStates(0, 4);
-                  }
-                  else if (curChar == 46)
-                     jjCheckNAdd(2);
-                  break;
-               case 1:
-                  if (curChar == 46)
-                     jjCheckNAdd(2);
-                  break;
-               case 2:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 16)
-                     kind = 16;
-                  jjCheckNAddTwoStates(2, 3);
-                  break;
-               case 4:
-                  if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(5);
-                  break;
-               case 5:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 16)
-                     kind = 16;
-                  jjCheckNAdd(5);
-                  break;
-               case 7:
-                  if ((0xfbff10fe00000000L & l) == 0L)
-                     break;
-                  if (kind > 20)
-                     kind = 20;
-                  jjCheckNAdd(7);
-                  break;
-               case 8:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 14)
-                     kind = 14;
-                  jjCheckNAddStates(0, 4);
-                  break;
-               case 9:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 14)
-                     kind = 14;
-                  jjCheckNAdd(9);
-                  break;
-               case 10:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 16)
-                     kind = 16;
-                  jjCheckNAddStates(5, 8);
-                  break;
-               default : break;
-            }
-         } while(i != startsAt);
-      }
-      else if (curChar < 128)
-      {
-         long l = 1L << (curChar & 077);
-         do
-         {
-            switch(jjstateSet[--i])
-            {
-               case 6:
-                  if ((0xffffffffbfffffffL & l) != 0L)
-                  {
-                     if (kind > 20)
-                        kind = 20;
-                     jjCheckNAdd(7);
-                  }
-                  if (curChar == 108)
-                     jjAddStates(9, 10);
-                  break;
-               case 3:
-                  if ((0x2000000020L & l) != 0L)
-                     jjAddStates(11, 12);
-                  break;
-               case 7:
-                  if ((0xffffffffbfffffffL & l) == 0L)
-                     break;
-                  if (kind > 20)
-                     kind = 20;
-                  jjCheckNAdd(7);
-                  break;
-               case 11:
-                  if (curChar == 108)
-                     jjAddStates(9, 10);
-                  break;
-               case 12:
-                  if (curChar == 111)
-                     jjstateSet[jjnewStateCnt++] = 13;
-                  break;
-               case 13:
-                  if (curChar == 103 && kind > 17)
-                     kind = 17;
-                  break;
-               case 14:
-                  if (curChar == 110 && kind > 18)
-                     kind = 18;
-                  break;
-               default : break;
-            }
-         } while(i != startsAt);
-      }
-      else
-      {
-         int hiByte = (int)(curChar >> 8);
-         int i1 = hiByte >> 6;
-         long l1 = 1L << (hiByte & 077);
-         int i2 = (curChar & 0xff) >> 6;
-         long l2 = 1L << (curChar & 077);
-         do
-         {
-            switch(jjstateSet[--i])
-            {
-               case 6:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                  {
-                     if (kind > 15)
-                        kind = 15;
-                     jjCheckNAdd(0);
-                  }
-                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
-                  {
-                     if (kind > 20)
-                        kind = 20;
-                     jjCheckNAdd(7);
-                  }
-                  break;
-               case 0:
-                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 15)
-                     kind = 15;
-                  jjCheckNAdd(0);
-                  break;
-               case 7:
-                  if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 20)
-                     kind = 20;
-                  jjCheckNAdd(7);
-                  break;
-               default : break;
-            }
-         } while(i != startsAt);
-      }
-      if (kind != 0x7fffffff)
-      {
-         jjmatchedKind = kind;
-         jjmatchedPos = curPos;
-         kind = 0x7fffffff;
-      }
-      ++curPos;
-      if ((i = jjnewStateCnt) == (startsAt = 15 - (jjnewStateCnt = startsAt)))
-         return curPos;
-      try { curChar = input_stream.readChar(); }
-      catch(java.io.IOException e) { return curPos; }
-   }
-}
-static final int[] jjnextStates = {
-   9, 1, 2, 3, 10, 1, 2, 3, 10, 12, 14, 4, 5,
-};
-private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
-{
-   switch(hiByte)
-   {
-      case 0:
-         return ((jjbitVec0[i2] & l2) != 0L);
-      case 32:
-         return ((jjbitVec1[i2] & l2) != 0L);
-      default :
-         return false;
-   }
-}
-private static final boolean jjCanMove_1(int hiByte, int i1, int i2, long l1, long l2)
-{
-   switch(hiByte)
-   {
-      case 0:
-         return ((jjbitVec4[i2] & l2) != 0L);
-      case 32:
-         return ((jjbitVec5[i2] & l2) != 0L);
-      default :
-         if ((jjbitVec2[i1] & l1) != 0L)
-            return true;
-         return false;
-   }
-}
-
-/** Token literal values. */
-private static final String[] jjstrLiteralImages = {
-"", null, null, null, null, "\53", "\55", "\52", "\267", "\57", "\136", "\72",
-"\50", "\51", null, null, null, null, null, "\145", null, };
-
-/** Lexer state names. */
-//private static final String[] lexStateNames = {
-//   "DEFAULT",
-//};
-protected SimpleCharStream input_stream;
-private final int[] jjrounds = new int[15];
-private final int[] jjstateSet = new int[30];
-protected char curChar;
-/** Constructor. */
-UnitParserTokenManager(SimpleCharStream stream){
-   if (SimpleCharStream.staticFlag)
-      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
-   input_stream = stream;
-}
-
-/** Constructor. */
-UnitParserTokenManager(SimpleCharStream stream, int lexState){
-   this(stream);
-   switchTo(lexState);
-}
-
-/** Reinitialise parser. */
-void reInit(SimpleCharStream stream)
-{
-   jjmatchedPos = jjnewStateCnt = 0;
-   curLexState = defaultLexState;
-   input_stream = stream;
-   ReInitRounds();
-}
-private void ReInitRounds()
-{
-   int i;
-   jjround = 0x80000001;
-   for (i = 15; i-- > 0;)
-      jjrounds[i] = 0x80000000;
-}
-
-/** Reinitialise parser. */
-void reInit(SimpleCharStream stream, int lexState)
-{
-   reInit(stream);
-   switchTo(lexState);
-}
-
-/** Switch to specified lex state. */
-void switchTo(int lexState)
-{
-   if (lexState >= 1 || lexState < 0)
-      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
-   else
-      curLexState = lexState;
-}
-
-protected Token jjFillToken()
-{
-   final Token t;
-   final String curTokenImage;
-   final int beginLine;
-   final int endLine;
-   final int beginColumn;
-   final int endColumn;
-   String im = jjstrLiteralImages[jjmatchedKind];
-   curTokenImage = (im == null) ? input_stream.getImage() : im;
-   beginLine = input_stream.getBeginLine();
-   beginColumn = input_stream.getBeginColumn();
-   endLine = input_stream.getEndLine();
-   endColumn = input_stream.getEndColumn();
-   t = Token.newToken(jjmatchedKind, curTokenImage);
-
-   t.beginLine = beginLine;
-   t.endLine = endLine;
-   t.beginColumn = beginColumn;
-   t.endColumn = endColumn;
-
-   return t;
-}
-
-int curLexState = 0;
-int defaultLexState = 0;
-int jjnewStateCnt;
-int jjround;
-int jjmatchedPos;
-int jjmatchedKind;
-
-/** Get the next Token. */
-Token getNextToken()
-{
-  Token matchedToken;
-  int curPos = 0;
-
-//  EOFLoop :
-  for (;;)
-  {
-   try
-   {
-      curChar = input_stream.beginToken();
-   }
-   catch(java.io.IOException e)
-   {
-      jjmatchedKind = 0;
-      matchedToken = jjFillToken();
-      return matchedToken;
-   }
-
-   jjmatchedKind = 0x7fffffff;
-   jjmatchedPos = 0;
-   curPos = jjMoveStringLiteralDfa0_0();
-   if (jjmatchedKind != 0x7fffffff)
-   {
-      if (jjmatchedPos + 1 < curPos)
-         input_stream.backup(curPos - jjmatchedPos - 1);
-         matchedToken = jjFillToken();
-         return matchedToken;
-   }
-   int error_line = input_stream.getEndLine();
-   int error_column = input_stream.getEndColumn();
-   String error_after = null;
-   boolean EOFSeen = false;
-   try { input_stream.readChar(); input_stream.backup(1); }
-   catch (java.io.IOException e1) {
-      EOFSeen = true;
-      error_after = curPos <= 1 ? "" : input_stream.getImage();
-      if (curChar == '\n' || curChar == '\r') {
-         error_line++;
-         error_column = 0;
-      }
-      else
-         error_column++;
-   }
-   if (!EOFSeen) {
-      input_stream.backup(1);
-      error_after = curPos <= 1 ? "" : input_stream.getImage();
-   }
-   throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
-  }
-}
-
-private void jjCheckNAdd(int state)
-{
-   if (jjrounds[state] != jjround)
-   {
-      jjstateSet[jjnewStateCnt++] = state;
-      jjrounds[state] = jjround;
-   }
-}
-private void jjAddStates(int start, int end)
-{
-   do {
-      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
-   } while (start++ != end);
-}
-private void jjCheckNAddTwoStates(int state1, int state2)
-{
-   jjCheckNAdd(state1);
-   jjCheckNAdd(state2);
-}
-
-private void jjCheckNAddStates(int start, int end)
-{
-   do {
-      jjCheckNAdd(jjnextStates[start]);
-   } while (start++ != end);
-}
-
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitTokenConstants.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitTokenConstants.java
deleted file mode 100644
index 7b14c05..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitTokenConstants.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.format;

-

-/**

- * Token literal values and constants.

- * Generated by org.javacc.parser.OtherFilesGen#start()

- */

-interface UnitTokenConstants {

-

-  /** End of File. */

-  int EOF = 0;

-  /** RegularExpression Id. */

-  int DIGIT = 1;

-  /** RegularExpression Id. */

-  int SUPERSCRIPT_DIGIT = 2;

-  /** RegularExpression Id. */

-  int INITIAL_CHAR = 3;

-  /** RegularExpression Id. */

-  int EXTENDED_CHAR = 4;

-  /** RegularExpression Id. */

-  int PLUS = 5;

-  /** RegularExpression Id. */

-  int MINUS = 6;

-  /** RegularExpression Id. */

-  int ASTERISK = 7;

-  /** RegularExpression Id. */

-  int MIDDLE_DOT = 8;

-  /** RegularExpression Id. */

-  int SOLIDUS = 9;

-  /** RegularExpression Id. */

-  int CARET = 10;

-  /** RegularExpression Id. */

-  int COLON = 11;

-  /** RegularExpression Id. */

-  int OPEN_PAREN = 12;

-  /** RegularExpression Id. */

-  int CLOSE_PAREN = 13;

-  /** RegularExpression Id. */

-  int INTEGER = 14;

-  /** RegularExpression Id. */

-  int SUPERSCRIPT_INTEGER = 15;

-  /** RegularExpression Id. */

-  int FLOATING_POINT = 16;

-  /** RegularExpression Id. */

-  int LOG = 17;

-  /** RegularExpression Id. */

-  int NAT_LOG = 18;

-  /** RegularExpression Id. */

-  int E = 19;

-  /** RegularExpression Id. */

-  int UNIT_IDENTIFIER = 20;

-

-  /** Lexical state. */

-  int DEFAULT = 0;

-

-  /** Literal token values. */

-  String[] tokenImage = {

-    "<EOF>",

-    "<DIGIT>",

-    "<SUPERSCRIPT_DIGIT>",

-    "<INITIAL_CHAR>",

-    "<EXTENDED_CHAR>",

-    "\"+\"",

-    "\"-\"",

-    "\"*\"",

-    "\"\\u00b7\"",

-    "\"/\"",

-    "\"^\"",

-    "\":\"",

-    "\"(\"",

-    "\")\"",

-    "<INTEGER>",

-    "<SUPERSCRIPT_INTEGER>",

-    "<FLOATING_POINT>",

-    "<LOG>",

-    "<NAT_LOG>",

-    "\"e\"",

-    "<UNIT_IDENTIFIER>",

-  };

-

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitTokenManager.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitTokenManager.java
deleted file mode 100644
index eb13510..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/format/UnitTokenManager.java
+++ /dev/null
@@ -1,430 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.format;

-

-/** Token Manager. */

-final class UnitTokenManager {

-

-  /** Debug output. */

-  public java.io.PrintStream debugStream = System.out;

-

-  /** Set debug output. */

-  public void setDebugStream(java.io.PrintStream ds) {

-    debugStream = ds;

-  }

-

-  private int jjStopAtPos(int pos, int kind) {

-    jjmatchedKind = kind;

-    jjmatchedPos = pos;

-    return pos + 1;

-  }

-

-  private int jjMoveStringLiteralDfa0_0() {

-    switch (curChar) {

-      case 40:

-        return jjStopAtPos(0, 12);

-      case 41:

-        return jjStopAtPos(0, 13);

-      case 42:

-        return jjStopAtPos(0, 7);

-      case 43:

-        return jjStopAtPos(0, 5);

-      case 45:

-        return jjStopAtPos(0, 6);

-      case 47:

-        return jjStopAtPos(0, 9);

-      case 58:

-        return jjStopAtPos(0, 11);

-      case 94:

-        return jjStopAtPos(0, 10);

-      case 101:

-        return jjStartNfaWithStates_0(0, 19, 7);

-      case 183:

-        return jjStopAtPos(0, 8);

-      default:

-        return jjMoveNfa_0(6, 0);

-    }

-  }

-

-  private int jjStartNfaWithStates_0(int pos, int kind, int state) {

-    jjmatchedKind = kind;

-    jjmatchedPos = pos;

-    try {

-      curChar = input_stream.readChar();

-    } catch (java.io.IOException e) {

-      return pos + 1;

-    }

-    return jjMoveNfa_0(state, pos + 1);

-  }

-

-  static final long[] jjbitVec0 = { 0x0L, 0x0L, 0x20c000000000000L, 0x0L };

-  static final long[] jjbitVec1 = { 0x0L, 0x3f1000000000000L, 0x0L, 0x0L };

-  static final long[] jjbitVec2 = { 0xfffffffefffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL };

-  static final long[] jjbitVec4 = { 0x0L, 0x0L, 0xfd73ffffffffffffL, 0xffffffffffffffffL };

-  static final long[] jjbitVec5 = { 0xffffffffffffffffL, 0xfc0effffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL };

-

-  private int jjMoveNfa_0(int startState, int curPos) {

-    int startsAt = 0;

-    jjnewStateCnt = 15;

-    int i = 1;

-    jjstateSet[0] = startState;

-    int kind = 0x7fffffff;

-    for (;;) {

-      if (++jjround == 0x7fffffff)

-        ReInitRounds();

-      if (curChar < 64) {

-        long l = 1L << curChar;

-        do {

-          switch (jjstateSet[--i]) {

-            case 6:

-              if ((0xf80010fe00000000L & l) != 0L) {

-                if (kind > 20)

-                  kind = 20;

-                jjCheckNAdd(7);

-              } else if ((0x3ff000000000000L & l) != 0L) {

-                if (kind > 14)

-                  kind = 14;

-                jjCheckNAddStates(0, 4);

-              } else if (curChar == 46)

-                jjCheckNAdd(2);

-              break;

-            case 1:

-              if (curChar == 46)

-                jjCheckNAdd(2);

-              break;

-            case 2:

-              if ((0x3ff000000000000L & l) == 0L)

-                break;

-              if (kind > 16)

-                kind = 16;

-              jjCheckNAddTwoStates(2, 3);

-              break;

-            case 4:

-              if ((0x280000000000L & l) != 0L)

-                jjCheckNAdd(5);

-              break;

-            case 5:

-              if ((0x3ff000000000000L & l) == 0L)

-                break;

-              if (kind > 16)

-                kind = 16;

-              jjCheckNAdd(5);

-              break;

-            case 7:

-              if ((0xfbff10fe00000000L & l) == 0L)

-                break;

-              if (kind > 20)

-                kind = 20;

-              jjCheckNAdd(7);

-              break;

-            case 8:

-              if ((0x3ff000000000000L & l) == 0L)

-                break;

-              if (kind > 14)

-                kind = 14;

-              jjCheckNAddStates(0, 4);

-              break;

-            case 9:

-              if ((0x3ff000000000000L & l) == 0L)

-                break;

-              if (kind > 14)

-                kind = 14;

-              jjCheckNAdd(9);

-              break;

-            case 10:

-              if ((0x3ff000000000000L & l) == 0L)

-                break;

-              if (kind > 16)

-                kind = 16;

-              jjCheckNAddStates(5, 8);

-              break;

-            default:

-              break;

-          }

-        } while (i != startsAt);

-      } else if (curChar < 128) {

-        long l = 1L << (curChar & 63);

-        do {

-          switch (jjstateSet[--i]) {

-            case 6:

-              if ((0xffffffffbfffffffL & l) != 0L) {

-                if (kind > 20)

-                  kind = 20;

-                jjCheckNAdd(7);

-              }

-              if (curChar == 108)

-                jjAddStates(9, 10);

-              break;

-            case 3:

-              if ((0x2000000020L & l) != 0L)

-                jjAddStates(11, 12);

-              break;

-            case 7:

-              if ((0xffffffffbfffffffL & l) == 0L)

-                break;

-              if (kind > 20)

-                kind = 20;

-              jjCheckNAdd(7);

-              break;

-            case 11:

-              if (curChar == 108)

-                jjAddStates(9, 10);

-              break;

-            case 12:

-              if (curChar == 111)

-                jjstateSet[jjnewStateCnt++] = 13;

-              break;

-            case 13:

-              if (curChar == 103 && kind > 17)

-                kind = 17;

-              break;

-            case 14:

-              if (curChar == 110 && kind > 18)

-                kind = 18;

-              break;

-            default:

-              break;

-          }

-        } while (i != startsAt);

-      } else {

-        int hiByte = curChar >> 8;

-        int i1 = hiByte >> 6;

-        long l1 = 1L << (hiByte & 63);

-        int i2 = (curChar & 0xff) >> 6;

-        long l2 = 1L << (curChar & 63);

-        do {

-          switch (jjstateSet[--i]) {

-            case 6:

-              if (jjCanMove_0(hiByte, i2, l2)) {

-                if (kind > 15)

-                  kind = 15;

-                jjCheckNAdd(0);

-              }

-              if (jjCanMove_1(hiByte, i1, i2, l1, l2)) {

-                if (kind > 20)

-                  kind = 20;

-                jjCheckNAdd(7);

-              }

-              break;

-            case 0:

-              if (!jjCanMove_0(hiByte, i2, l2))

-                break;

-              if (kind > 15)

-                kind = 15;

-              jjCheckNAdd(0);

-              break;

-            case 7:

-              if (!jjCanMove_1(hiByte, i1, i2, l1, l2))

-                break;

-              if (kind > 20)

-                kind = 20;

-              jjCheckNAdd(7);

-              break;

-            default:

-              break;

-          }

-        } while (i != startsAt);

-      }

-      if (kind != 0x7fffffff) {

-        jjmatchedKind = kind;

-        jjmatchedPos = curPos;

-        kind = 0x7fffffff;

-      }

-      ++curPos;

-      if ((i = jjnewStateCnt) == (startsAt = 15 - (jjnewStateCnt = startsAt)))

-        return curPos;

-      try {

-        curChar = input_stream.readChar();

-      } catch (java.io.IOException e) {

-        return curPos;

-      }

-    }

-  }

-

-  static final int[] jjnextStates = { 9, 1, 2, 3, 10, 1, 2, 3, 10, 12, 14, 4, 5, };

-

-  private static boolean jjCanMove_0(int hiByte, int i2, long l2) {

-    switch (hiByte) {

-      case 0:

-        return ((jjbitVec0[i2] & l2) != 0L);

-      case 32:

-        return ((jjbitVec1[i2] & l2) != 0L);

-      default:

-        return false;

-    }

-  }

-

-  private static boolean jjCanMove_1(int hiByte, int i1, int i2, long l1, long l2) {

-    switch (hiByte) {

-      case 0:

-        return ((jjbitVec4[i2] & l2) != 0L);

-      case 32:

-        return ((jjbitVec5[i2] & l2) != 0L);

-      default:

-        return (jjbitVec2[i1] & l1) != 0L;

-    }

-  }

-

-  /** Token literal values. */

-  public static final String[] jjstrLiteralImages = { "", null, null, null, null, "\53", "\55", "\52", "\267", "\57", "\136", "\72", "\50", "\51",

-      null, null, null, null, null, "\145", null, };

-

-  /** Lexer state names. */

-  public static final String[] lexStateNames = { "DEFAULT", };

-  protected DefaultCharStream input_stream;

-  private final int[] jjrounds = new int[15];

-  private final int[] jjstateSet = new int[30];

-  protected char curChar;

-

-  /** Constructor. */

-  public UnitTokenManager(DefaultCharStream stream) {

-    if (DefaultCharStream.staticFlag)

-      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");

-    input_stream = stream;

-  }

-  

-  /** Constructor. */

-  public UnitTokenManager(DefaultCharStream stream, int lexState) {

-    this(stream);

-    SwitchTo(lexState);

-  }

-

-  /** Reinitialise parser. */

-  public void ReInit(DefaultCharStream stream) {

-    jjmatchedPos = jjnewStateCnt = 0;

-    curLexState = defaultLexState;

-    input_stream = stream;

-    ReInitRounds();

-  }

-

-  private void ReInitRounds() {

-    int i;

-    jjround = 0x80000001;

-    for (i = 15; i-- > 0;)

-      jjrounds[i] = 0x80000000;

-  }

-

-  /** Reinitialise parser. */

-  public void ReInit(DefaultCharStream stream, int lexState) {

-    ReInit(stream);

-    SwitchTo(lexState);

-  }

-

-  /** Switch to specified lex state. */

-  public void SwitchTo(int lexState) {

-    if (lexState >= 1 || lexState < 0)

-      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);

-    else

-      curLexState = lexState;

-  }

-

-  protected Token jjFillToken() {

-    final Token t;

-    final String curTokenImage;

-    final int beginLine;

-    final int endLine;

-    final int beginColumn;

-    final int endColumn;

-    String im = jjstrLiteralImages[jjmatchedKind];

-    curTokenImage = (im == null) ? input_stream.GetImage() : im;

-    beginLine = input_stream.getBeginLine();

-    beginColumn = input_stream.getBeginColumn();

-    endLine = input_stream.getEndLine();

-    endColumn = input_stream.getEndColumn();

-    t = Token.newToken(jjmatchedKind, curTokenImage);

-

-    t.beginLine = beginLine;

-    t.endLine = endLine;

-    t.beginColumn = beginColumn;

-    t.endColumn = endColumn;

-

-    return t;

-  }

-

-  int curLexState = 0;

-  final int defaultLexState = 0;

-  int jjnewStateCnt;

-  int jjround;

-  int jjmatchedPos;

-  int jjmatchedKind;

-

-  /** Get the next Token. */

-  @SuppressWarnings("unused")

-public Token getNextToken() {

-    Token matchedToken;

-    int curPos = 0;

-

-    EOFLoop: for (;;) {

-      try {

-        curChar = input_stream.BeginToken();

-      } catch (java.io.IOException e) {

-        jjmatchedKind = 0;

-        matchedToken = jjFillToken();

-        return matchedToken;

-      }

-

-      jjmatchedKind = 0x7fffffff;

-      jjmatchedPos = 0;

-      curPos = jjMoveStringLiteralDfa0_0();

-      if (jjmatchedKind != 0x7fffffff) {

-        if (jjmatchedPos + 1 < curPos)

-          input_stream.backup(curPos - jjmatchedPos - 1);

-        matchedToken = jjFillToken();

-        return matchedToken;

-      }

-      int error_line = input_stream.getEndLine();

-      int error_column = input_stream.getEndColumn();

-      String error_after = null;

-      boolean EOFSeen = false;

-      try {

-        input_stream.readChar();

-        input_stream.backup(1);

-      } catch (java.io.IOException e1) {

-        EOFSeen = true;

-        error_after = curPos <= 1 ? "" : input_stream.GetImage();

-        if (curChar == '\n' || curChar == '\r') {

-          error_line++;

-          error_column = 0;

-        } else

-          error_column++;

-      }

-      if (!EOFSeen) {

-        input_stream.backup(1);

-        error_after = curPos <= 1 ? "" : input_stream.GetImage();

-      }

-      throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);

-    }

-  }

-

-  private void jjCheckNAdd(int state) {

-    if (jjrounds[state] != jjround) {

-      jjstateSet[jjnewStateCnt++] = state;

-      jjrounds[state] = jjround;

-    }

-  }

-

-  private void jjAddStates(int start, int end) {

-    do {

-      jjstateSet[jjnewStateCnt++] = jjnextStates[start];

-    } while (start++ != end);

-  }

-

-  private void jjCheckNAddTwoStates(int state1, int state2) {

-    jjCheckNAdd(state1);

-    jjCheckNAdd(state2);

-  }

-

-  private void jjCheckNAddStates(int start, int end) {

-    do {

-      jjCheckNAdd(jjnextStates[start]);

-    } while (start++ != end);

-  }

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/AccelerationAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/AccelerationAmount.java
deleted file mode 100644
index 492e2ab..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/AccelerationAmount.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**

- * Copyright (c) 2005, 2014, Werner Keil, Jean-Marie Dautelle and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.quantity;

-

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import javax.measure.quantity.Acceleration;

-import javax.measure.Unit;

-

-

-/**

- * Represents the rate of change of Speed with respect to time.

- * The metric system unit for this quantity is "m/s²" (metre per square second).

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.5, $Date: 2013-04-28 $

- */

-public final class AccelerationAmount extends BaseQuantity<Acceleration> implements Acceleration {

-	

-	public AccelerationAmount(Number number, Unit<Acceleration> unit) {

-		super(number, unit);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/AngleAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/AngleAmount.java
deleted file mode 100644
index 6c66226..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/AngleAmount.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**

- * Copyright (c) 2005, 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, JScience - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.quantity;

-

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import javax.measure.quantity.Angle;

-import javax.measure.Unit;

-

-

-/**

- * Represents the figure formed by two lines diverging from a common point.

- * The metric system unit for this quantity is "rad" (radian).

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.3.1, $Date: 2013-11-22 $

- */

-public final class AngleAmount extends BaseQuantity<Angle> implements Angle {

-	

-	public AngleAmount(Number number, Unit<Angle> unit) {

-		super(number, unit);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/AreaAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/AreaAmount.java
deleted file mode 100644
index e614e88..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/AreaAmount.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**

- * Copyright (c) 2005, 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, JScience and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.quantity;

-

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import javax.measure.quantity.Area;

-import javax.measure.Unit;

-

-

-/**

- * Represents the extent of a planar region or of the surface of

- * a solid measured in square units.

- * The metric system unit for this quantity is "m²" (square metre).

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.4.1, $Date: 2013-11-22 $

- */

-public final class AreaAmount extends BaseQuantity<Area> implements Area {

-

-	public AreaAmount(Number number, Unit<Area> unit) {

-		super(number, unit);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/CatalyticActivityAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/CatalyticActivityAmount.java
deleted file mode 100644
index ff0f8de..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/CatalyticActivityAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**

- * Copyright (c) 2005, 2014, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.quantity;

-

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import javax.measure.quantity.CatalyticActivity;

-import javax.measure.Unit;

-

-/**

- * Represents a catalytic activity.

- * The metric system unit for this quantity is "kat" (katal).

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.4, $Date: 2014-03-03 $

- */

-public final class CatalyticActivityAmount extends BaseQuantity<CatalyticActivity> implements CatalyticActivity {

-

-	public CatalyticActivityAmount(Number number, Unit<CatalyticActivity> unit) {

-		super(number, unit);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricCapacitanceAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricCapacitanceAmount.java
deleted file mode 100644
index 9c301ea..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricCapacitanceAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil, Ikayzo and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.ElectricCapacitance;
-import javax.measure.Unit;
-
-/**
- * Represents an electric capacitance.
- * The metric system unit for this quantity is "F" (Farad).
- * 
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, $Date: 2013-04-28 $
- */
-public final class ElectricCapacitanceAmount extends BaseQuantity<ElectricCapacitance> {
-
-	public ElectricCapacitanceAmount(Number number, Unit<ElectricCapacitance> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricChargeAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricChargeAmount.java
deleted file mode 100644
index 9195dd3..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricChargeAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil, Ikayzo and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.ElectricCharge;
-import javax.measure.Unit;
-
-/**
- * Represents an electric charge.
- * The metric system unit for this quantity is "C" (Coulomb).
- * 
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, $Date: 2013-04-28 $
- */
-public final class ElectricChargeAmount extends BaseQuantity<ElectricCharge> {
-
-	public ElectricChargeAmount(Number number, Unit<ElectricCharge> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricConductanceAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricConductanceAmount.java
deleted file mode 100644
index bbcd16e..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricConductanceAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.ElectricConductance;
-import javax.measure.Unit;
-
-/**
- * Represents an electric conductance amount.
- * The metric system unit for this quantity "S" (Siemens).
- * 
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, $Date: 2013-05-11 $
- */
-public final class ElectricConductanceAmount extends BaseQuantity<ElectricConductance> {
-
-	public ElectricConductanceAmount(Number number, Unit<ElectricConductance> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricCurrentAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricCurrentAmount.java
deleted file mode 100644
index 023ff46..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricCurrentAmount.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   Werner Keil, Jean-Marie Dautelle - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.ElectricCurrent;
-import javax.measure.Unit;
-
-/**
- * Represents the amount of electric charge flowing past
- * a specified circuit point per unit time.
- * The metric system unit for this quantity is "A" (Ampere).
- * 
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, $Date: 2013-05-12 $
- */
-public final class ElectricCurrentAmount extends BaseQuantity<ElectricCurrent> {
-
-	public ElectricCurrentAmount(Number number, Unit<ElectricCurrent> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricInductanceAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricInductanceAmount.java
deleted file mode 100644
index 6b5edff..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricInductanceAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.ElectricInductance;
-import javax.measure.Unit;
-
-/**
- * Represents an electric inductance.
- * The metric system unit for this quantity is "H" (Henry).
- * 
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $
- */
-public final class ElectricInductanceAmount extends BaseQuantity<ElectricInductance> {
-
-	public ElectricInductanceAmount(Number number, Unit<ElectricInductance> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricPotentialAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricPotentialAmount.java
deleted file mode 100644
index d53b3d0..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricPotentialAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.ElectricPotential;
-import javax.measure.Unit;
-
-/**
- * Represents an amount of electric potential or electromotive force.
- * The metric system unit for this quantity is "V" (Volt).
- * 
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, $Date: 2013-05-13 $
- */
-public final class ElectricPotentialAmount extends BaseQuantity<ElectricPotential> {
-
-	public ElectricPotentialAmount(Number number, Unit<ElectricPotential> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricResistanceAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricResistanceAmount.java
deleted file mode 100644
index 572984d..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ElectricResistanceAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil, and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.ElectricResistance;
-import javax.measure.Unit;
-
-/**
- * Represents an electric resistance.
- * The metric system unit for this quantity is "Ohm" (Ω).
- * 
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, $Date: 2013-05-13 $
- */
-public final class ElectricResistanceAmount extends BaseQuantity<ElectricResistance> {
-
-	public ElectricResistanceAmount(Number number, Unit<ElectricResistance> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/EnergyAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/EnergyAmount.java
deleted file mode 100644
index b1129a3..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/EnergyAmount.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**

- * Copyright (c) 2005, 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.quantity;

-

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import javax.measure.quantity.Energy;

-import javax.measure.Unit;

-

-/**

- * Represents the capacity of a physical system to do work.

- * The metric system unit for this quantity "J" (Joule).

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.3, $Date: 2013-05-20 $

- */

-public final class EnergyAmount extends BaseQuantity<Energy> implements Energy {

-

-	public EnergyAmount(Number number, Unit<Energy> unit) {

-		super(number, unit);

-	}

-

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ForceAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ForceAmount.java
deleted file mode 100644
index ef0f5a4..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/ForceAmount.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.Force;
-import javax.measure.Unit;
-
-/**
- * Represents a quantity that tends to produce an acceleration of a body in the
- * direction of its application. The metric system unit for this quantity is "N"
- * (Newton).
- * 
- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.3, $Date: 2013-05-21 $
- */
-public final class ForceAmount extends BaseQuantity<Force> implements Force {
-
-	public ForceAmount(Number number, Unit<Force> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/FrequencyAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/FrequencyAmount.java
deleted file mode 100644
index ae9c278..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/FrequencyAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**

- * Copyright (c) 2005, 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.quantity;

-

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import javax.measure.quantity.Frequency;

-import javax.measure.Unit;

-

-/**

- * Represents the number of times a specified phenomenon occurs within a specified interval.

- * The metric system unit for this quantity is "Hz" (Hertz).

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.2, $Date: 2013-05-21 $

- */

-public final class FrequencyAmount extends BaseQuantity<Frequency> {

-

-	public FrequencyAmount(Number number, Unit<Frequency> unit) {

-		super(number, unit);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/IlluminanceAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/IlluminanceAmount.java
deleted file mode 100644
index 1a47fc3..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/IlluminanceAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**

- * Copyright (c) 2005, 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.quantity;

-

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import javax.measure.quantity.Illuminance;

-import javax.measure.Unit;

-

-/**

- * Represents an illuminance.

- * The metric system unit for this quantity is "lx" (lux).

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.2, $Date: 2013-05-21 $

- */

-public final class IlluminanceAmount extends BaseQuantity<Illuminance> {

-

-	public IlluminanceAmount(Number number, Unit<Illuminance> unit) {

-		super(number, unit);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/InformationAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/InformationAmount.java
deleted file mode 100644
index b6ce8e5..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/InformationAmount.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.Information;
-import javax.measure.Unit;
-
-/**
- * Represents a measure of data amount. The metric system unit for this quantity
- * is "bit".
- * 
- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.5, $Date: 2013-05-21 $
- */
-public final class InformationAmount extends BaseQuantity<Information> implements
-		Information {
-
-	public InformationAmount(Number number, Unit<Information> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/IonizingRadiationAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/IonizingRadiationAmount.java
deleted file mode 100644
index b11a225..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/IonizingRadiationAmount.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.IonizingRadiation;
-import javax.measure.Unit;
-
-/**
- * Represents the quantity of subatomic particles or electromagnetic waves that
- * are energetic enough to detach electrons from atoms or molecules, ionizing
- * them. The system unit for this quantity is "C/kg ("coulomb per kilogram).
- * 
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.1, $Date: 2013-05-21 $
- */
-public final class IonizingRadiationAmount extends BaseQuantity<IonizingRadiation>
-		implements IonizingRadiation {
-
-	public IonizingRadiationAmount(Number number, Unit<IonizingRadiation> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/LengthAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/LengthAmount.java
deleted file mode 100644
index edb1887..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/LengthAmount.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**

- * Copyright (c) 2005, 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.quantity;

-

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import javax.measure.quantity.Length;

-import javax.measure.Unit;

-

-/**

- * Represents the extent of something along its greatest

- * dimension or the extent of space between two objects or places.

- * The metric system unit for this quantity is "m" (metre).

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.5, $Date: 2013-05-21 $

- */

-public final class LengthAmount extends BaseQuantity<Length> implements Length {

-

-	public LengthAmount(Number number, Unit<Length> unit) {

-		super(number, unit);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/LuminousFluxAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/LuminousFluxAmount.java
deleted file mode 100644
index 48d1eb6..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/LuminousFluxAmount.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.LuminousFlux;
-import javax.measure.Unit;
-
-/**
- * Represents a luminous flux. The metric system unit for this quantity is "lm"
- * (lumen).
- * 
- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, $Date: 2013-05-21 $
- */
-public final class LuminousFluxAmount extends BaseQuantity<LuminousFlux>
-		implements LuminousFlux {
-
-	public LuminousFluxAmount(Number number, Unit<LuminousFlux> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/LuminousIntensityAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/LuminousIntensityAmount.java
deleted file mode 100644
index bbc54c8..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/LuminousIntensityAmount.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.LuminousIntensity;
-import javax.measure.Unit;
-
-/**
- * Represents the luminous flux density per solid angle as measured in a given
- * direction relative to the emitting source. The metric system unit for this
- * quantity is "cd" (candela).
- * 
- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, $Date: 2013-05-21 $
- */
-public final class LuminousIntensityAmount extends
-		BaseQuantity<LuminousIntensity> implements LuminousIntensity {
-
-	public LuminousIntensityAmount(Number number, Unit<LuminousIntensity> unit) {
-		super(number, unit);
-	}
-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/MagneticFluxAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/MagneticFluxAmount.java
deleted file mode 100644
index 2a1998b..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/MagneticFluxAmount.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.MagneticFlux;
-import javax.measure.Unit;
-
-/**
- * Represents a magnetic flux. The metric system unit for this quantity is "Wb"
- * (Weber).
- * 
- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, $Date: 2010-05-21 $
- */
-public class MagneticFluxAmount extends BaseQuantity<MagneticFlux> implements
-		MagneticFlux {
-
-	public MagneticFluxAmount(Number number, Unit<MagneticFlux> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/MagneticFluxDensityAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/MagneticFluxDensityAmount.java
deleted file mode 100644
index fa2648d..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/MagneticFluxDensityAmount.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.MagneticFluxDensity;
-import javax.measure.Unit;
-
-/**
- * Represents a magnetic flux density. The metric system unit for this quantity
- * is "T" (Tesla).
- * 
- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, $Date: 2013-05-21 $
- */
-public class MagneticFluxDensityAmount extends BaseQuantity<MagneticFluxDensity>
-		implements MagneticFluxDensity {
-
-	public MagneticFluxDensityAmount(Number number,
-			Unit<MagneticFluxDensity> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/MagnetomotiveForceAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/MagnetomotiveForceAmount.java
deleted file mode 100644
index ff24ccf..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/MagnetomotiveForceAmount.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * Copyright (c) 2005, 2014, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.MagnetomotiveForce;
-import javax.measure.Unit;
-
-/**
- * Represents an amount of force that produces magnetic flux. The metric system
- * unit for this quantity is "At" (ampere-turn).
- * 
- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.5, $Date: 2013-05-21 $
- * @see <a href="http://en.wikipedia.org/wiki/Magnetomotive_force">Wikipedia's
- *      Magnetomotive Force</a>
- */
-public final class MagnetomotiveForceAmount extends
-		BaseQuantity<MagnetomotiveForce> implements MagnetomotiveForce {
-
-	public MagnetomotiveForceAmount(Number number, Unit<MagnetomotiveForce> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/MassAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/MassAmount.java
deleted file mode 100644
index e3ee733..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/MassAmount.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/**

- * Copyright (c) 2005, 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.quantity;

-

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import javax.measure.quantity.Mass;

-import javax.measure.Unit;

-

-/**

- * Represents the measure of the quantity of matter that a body or an object contains.

- * The mass of the body is not dependent on gravity and therefore is different from but

- * proportional to its weight.

- * The metric system unit for this quantity is "kg" (kilogram).

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.6, $Date: 2013-05-21 $

- */

-public final class MassAmount extends BaseQuantity<Mass> implements Mass {

-	

-	public MassAmount(Number number, Unit<Mass> unit) {

-		super(number, unit);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/PowerAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/PowerAmount.java
deleted file mode 100644
index 20d5a70..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/PowerAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.Power;
-import javax.measure.Unit;
-
-/**
- * Represents the rate at which work is done.
- * The metric system unit for this quantity is "W" (Watt).
- *
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, $Date: 2013-05-21 $
- */
-public final class PowerAmount extends BaseQuantity<Power> implements Power {
-
-	public PowerAmount(Number number,Unit<Power> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/PressureAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/PressureAmount.java
deleted file mode 100644
index 52f4e49..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/PressureAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**

- * Copyright (c) 2005, 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.quantity;

-

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import javax.measure.quantity.Pressure;

-import javax.measure.Unit;

-

-/**

- * Represents a force applied uniformly over a surface.

- * The metric system unit for this quantity is "Pa" (Pascal).

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.1 ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $

- */

-public class PressureAmount extends BaseQuantity<Pressure> {

-

-	public PressureAmount(Number number, Unit<Pressure> unit) {

-		super(number, unit);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/RadiationDoseAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/RadiationDoseAmount.java
deleted file mode 100644
index 7a37439..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/RadiationDoseAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.RadiationDoseAbsorbed;
-import javax.measure.Unit;
-
-/**
- * Represents the amount of energy deposited per unit of mass.
- * The system unit for this quantity is "Gy" (Gray).
- * 
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $
- */
-public class RadiationDoseAmount extends BaseQuantity<RadiationDoseAbsorbed> {
-
-	public RadiationDoseAmount(Number number, Unit<RadiationDoseAbsorbed> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/RadiationDoseEffectiveAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/RadiationDoseEffectiveAmount.java
deleted file mode 100644
index 1caf029..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/RadiationDoseEffectiveAmount.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.RadiationDoseEffective;
-import javax.measure.Unit;
-
-/**
- * Represents the effective (or "equivalent") dose of radiation
- * received by a human or some other living organism.
- * The metric system unit for this quantity is "Sv" (Sievert).
- * 
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.3 ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $
- */
-public class RadiationDoseEffectiveAmount extends BaseQuantity<RadiationDoseEffective> {
-
-	public RadiationDoseEffectiveAmount(Number number, Unit<RadiationDoseEffective> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/RadioactivityAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/RadioactivityAmount.java
deleted file mode 100644
index 9b83c4d..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/RadioactivityAmount.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**
- * Copyright (c) 2005, 2014, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.Radioactivity;
-import javax.measure.Unit;
-
-/**
- * Represents Radioactivity. The metric system unit for this quantity is "Bq"
- * (Becquerel).
- * 
- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, $Date: 2014-03-03 $
- */
-public class RadioactivityAmount extends BaseQuantity<Radioactivity>
-		implements Radioactivity {
-
-	public RadioactivityAmount(Number number, Unit<Radioactivity> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/SolidAngleAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/SolidAngleAmount.java
deleted file mode 100644
index 9f54ad8..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/SolidAngleAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.quantity;

-

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import javax.measure.quantity.SolidAngle;

-import javax.measure.Unit;

-

-/**

- * Represents the angle formed by three or more planes intersecting at a common point.

- * The metric system unit for this quantity is "sr" (steradian).

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.2, $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $

- */

-public class SolidAngleAmount extends BaseQuantity<SolidAngle> {

-

-	public SolidAngleAmount(Number number, Unit<SolidAngle> unit) {

-		super(number, unit);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/SubstanceAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/SubstanceAmount.java
deleted file mode 100644
index abdec12..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/SubstanceAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**
- * Copyright (c) 2005, 2010, Werner Keil, JScience and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import javax.measure.quantity.AmountOfSubstance;
-import javax.measure.Unit;
-
-/**
- * Represents the number of elementary entities (molecules, for example) of a substance.
- * The metric system unit for this quantity is "mol" (mole).
- *
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.4 ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $
- */
-public class SubstanceAmount extends BaseQuantity<AmountOfSubstance> {
-	
-	public SubstanceAmount(Number number, Unit<AmountOfSubstance> unit) {
-		super(number, unit);
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/TemperatureAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/TemperatureAmount.java
deleted file mode 100644
index 07dffaa..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/TemperatureAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**

- * Copyright (c) 2005, 2014, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.quantity;

-

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import javax.measure.quantity.Temperature;

-import javax.measure.Unit;

-

-/**

- * Represents the degree of hotness or coldness of a body or an environment.

- * The metric system unit for this quantity is "K" (Kelvin).

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.3, ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $

- */

-public class TemperatureAmount extends BaseQuantity<Temperature> {

-

-	public TemperatureAmount(Number number, Unit<Temperature> unit) {

-		super(number, unit);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/TimeAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/TimeAmount.java
deleted file mode 100644
index bd1ce4a..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/TimeAmount.java
+++ /dev/null
@@ -1,186 +0,0 @@
-/**
- * Copyright (c) 2005, 2011, Werner Keil, Ikayzo and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.quantity;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.math.MathContext;
-
-import org.eclipse.uomo.units.AbstractConverter;
-import org.eclipse.uomo.units.AbstractUnit;
-import org.eclipse.uomo.units.IMeasure;
-import org.eclipse.uomo.units.impl.BaseQuantity;
-import org.eclipse.uomo.units.impl.converter.RationalConverter;
-import javax.measure.quantity.Time;
-import javax.measure.unit.IncommensurableException;
-import javax.measure.unit.UnconvertibleException;
-import javax.measure.Unit;
-import javax.measure.UnitConverter;
-
-/**
- * Represents a period of existence or persistence. The metric system unit for
- * this quantity is "s" (second).
- * 
- * Due to an incompatible private constructor in ICU4J TimeUnit, this uses BaseUnit.
- * TODO add conversions with ICU4J TimeUnitAmount where necessary
- * 
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.6 ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $
- */
-public final class TimeAmount extends BaseQuantity<Time> implements Time {
-
-	public TimeAmount(Number number, Unit<Time> unit) {
-		super(number, unit);
-	}
-
-	/**
-	 * Get the unit (convenience to avoid cast).
-	 * 
-	 * @draft UOMo 0.5
-	 * @provisional This API might change or be removed in a future release.
-	 */
-	public AbstractUnit<Time> unit() {
-		return (AbstractUnit<Time>) super.unit();
-	}
-
-	/**
-	 * Returns the value of this quantity as <code>double</code> stated in the
-	 * specified unit. This method is recommended over <code>
-	 * q.getUnit().getConverterTo(unit).convert(q.getNumber()).doubleValue()</code>
-	 * 
-	 * @param unit
-	 *            the unit in which the returned value is stated.
-	 * @return the value of this quantity when stated in the specified unit.
-	 */
-	public double doubleValue(Unit<Time> unit) {
-		Unit<Time> myUnit = unit();
-		try {
-			UnitConverter converter = unit.getConverterToAny(myUnit);
-			return converter.convert(getValue().doubleValue());
-		} catch (UnconvertibleException e) {
-			throw e;
-		} catch (IncommensurableException e) {
-			throw new IllegalArgumentException(e.getMessage());
-		}
-	}
-
-	/**
-	 * Returns the value of this quantity as <code>long</code> stated in the
-	 * specified unit. This method is recommended over <code>
-	 * q.getUnit().getConverterTo(unit).convert(q.getNumber()).longValue()</code>
-	 * 
-	 * @param unit
-	 *            the unit in which the returned value is stated.
-	 * @return the value of this quantity when stated in the specified unit.
-	 */
-	public long longValue(Unit<Time> unit) {
-		Unit<Time> myUnit = unit();
-		try {
-			UnitConverter converter = unit.getConverterToAny(myUnit);
-			return (converter.convert(
-					BigDecimal.valueOf(getValue().longValue()),
-					MathContext.DECIMAL128)).longValue();
-		} catch (UnconvertibleException e) {
-			throw e;
-		} catch (IncommensurableException e) {
-			throw new IllegalArgumentException(e.getMessage());
-		}
-	}
-
-	public TimeAmount add(IMeasure<Time> that) {
-		return new TimeAmount(super.getValue().doubleValue()
-				+ ((BaseQuantity<Time>) that).getValue().doubleValue(),
-				that.unit());
-	}
-
-	public TimeAmount subtract(IMeasure<Time> that) {
-		return new TimeAmount(super.getValue().doubleValue()
-				- ((BaseQuantity<Time>) that).getValue().doubleValue(),
-				that.unit());
-	}
-	
-//	public IMeasure<Time> divide(IMeasure<?> that) {
-//		@SuppressWarnings("unchecked")
-//		Unit<Time> unit = (Unit<Time>) unit().divide(that.unit());
-		
-		// FIXME include number division
-//		return new TimeAmount((BigDecimal) getNumber())
-//				.divide((BigDecimal) ((Measure)that).getNumber()), unit);
-//		return new TimeAmount(getNumber(), unit);
-//	}
-
-	@SuppressWarnings({ "unchecked" })
-	public TimeAmount multiply(IMeasure<?> that) {
-		Unit<Time> unit = (Unit<Time>) unit().multiply(that.unit());
-		
-		// FIXME include number division
-//		return new TimeAmount((BigDecimal) getNumber())
-//				.divide((BigDecimal) ((Measure)that).getNumber()), unit);
-		return new TimeAmount(getValue(), unit);
-	}
-
-	/**
-	 * Returns the amount corresponding to the specified value
-	 * and unit.
-	 * 
-	 * @param value
-	 *            the value stated in the specified unit.
-	 * @param unit
-	 *            the unit in which the value is stated.
-	 * @return the corresponding amount.
-	 */
-	public static TimeAmount valueOf(Number value, AbstractUnit<Time> unit) {
-		TimeAmount amount = new TimeAmount(value, unit);
-		return amount;
-	}
-	
-	public TimeAmount to(Unit<Time> unit) {
-		return to(unit, MathContext.DECIMAL32);
-	}
-	
-	public TimeAmount to(Unit<Time> unit, MathContext ctx) {
-        if (this.unit().equals(unit))
-            return this;
-        UnitConverter cvtr = this.unit().getConverterTo(unit);
-        if (cvtr == AbstractConverter.IDENTITY)
-            return (TimeAmount) of(this.getValue().intValue(), unit);
-        return (TimeAmount) of(convert(this.getValue(), cvtr, ctx).intValue(), unit);
-    }
-
-    // Try to convert the specified value.
-    private static Number convert(Number value, UnitConverter cvtr, MathContext ctx) {
-        if (cvtr instanceof RationalConverter) { // Try converting through Field methods.
-            RationalConverter rCvtr = (RationalConverter) cvtr;
-            BigInteger dividend = rCvtr.getDividend();
-            BigInteger divisor = rCvtr.getDivisor();
-            if (dividend.abs().compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0)
-                throw new ArithmeticException("Multiplier overflow");
-            if (divisor.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0)
-                throw new ArithmeticException("Divisor overflow");
-            return (value.longValue() * dividend.longValue()) / (divisor.longValue());
-        } else if (cvtr instanceof AbstractConverter.Compound && cvtr.isLinear()) { // Do it in two parts.
-            AbstractConverter.Compound compound = (AbstractConverter.Compound) cvtr;
-            Number firstConversion = convert(value, compound.getRight(), ctx);
-            Number secondConversion = convert(firstConversion, compound.getLeft(), ctx);
-            return secondConversion;
-        } else { // Try using BigDecimal as intermediate.
-            BigDecimal decimalValue = BigDecimal.valueOf(value.doubleValue());
-            BigDecimal newValue = cvtr.convert(decimalValue, ctx);
-            return newValue;
-//            if (((FieldNumber)value) instanceof Decimal)
-//                return (N)((FieldNumber)Decimal.valueOf(newValue));
-//            if (((FieldNumber)value) instanceof Float64)
-//                return (N)((FieldNumber)Float64.valueOf(newValue.doubleValue()));
-//            throw new ArithmeticException(
-//                    "Generic amount conversion not implemented for amount of type " + value.getClass());
-        }
-    }
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/VelocityAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/VelocityAmount.java
deleted file mode 100644
index 9410125..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/VelocityAmount.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.quantity;

-

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import javax.measure.quantity.Speed;

-import javax.measure.Unit;

-

-/**

- * Represents a distance traveled divided by the time of travel.

- * The metric system unit for this quantity is "m/s" (metre per second).

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.2, ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $

- */

-public class SpeedAmount extends BaseQuantity<Speed> {

-

-	public SpeedAmount(Number number, Unit<Speed> unit) {

-		super(number, unit);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/VolumeAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/VolumeAmount.java
deleted file mode 100644
index 64e7377..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/VolumeAmount.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/**

- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.quantity;

-

-import org.eclipse.uomo.units.impl.BaseQuantity;

-import javax.measure.quantity.Volume;

-import javax.measure.Unit;

-

-

-/**

- * Represents the amount of space occupied by a three-dimensional object or region of space.

- * The metric system unit for this quantity is "m³" (cubic metre).

- *

- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.3, ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $

- */

-public class VolumeAmount extends BaseQuantity<Volume> {

-

-	public VolumeAmount(Number number, Unit<Volume> unit) {

-		super(number, unit);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/package-info.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/package-info.java
deleted file mode 100644
index 34cf351..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/quantity/package-info.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**

- * Copyright (c) 2005, 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Ikayzo and others - initial API and implementation

- */

-/**

- * Provides quantitative properties or attributes of thing such as

- * mass, time, distance, heat, and angular separation.

- * Quantities of different kinds are represented by sub-types of the

- * {@link javax.measure.Quantity} interface, which can be

- * created by a new {@link org.eclipse.uomo.units.impl.BaseAmount} instance or its subclasses.

- *

- * <p> Only quantities defined in the <a href="http://en.wikipedia.org/wiki/International_System_of_Units">International System of Units</a>

- *     are provided here. Users can create their own quantity types by extending the {@link

- *     javax.measure.Quantity Quantity} interface.</p>

- *

- * <p> This package supports <cite>measurable</cite> quantities, which can be

- *     expressed as ({@link java.lang.Number}, {@link javax.measure.Unit}) tuples.

- *     Those tuples are not expected to be used directly in numerically intensive code.

- *     They are more useful as metadata converted to the application internal representation

- *     (for example {@code double} primitive type with the requirement to provide values in

- *     metres) before the computation begin. For this purpose, the {@code Quantity} interface

- *     provides the {@code longValue(Unit<Q>)} and {@code doubleValue(Unit<Q>)} convenience

- *     methods. Example:[code]

- *        TimeAmount calculateTravelTime(Length distance, Speed Speed) {

- *            double seconds = distance.doubleValue(METRE) /

- *                             Speed.doubleValue(METRE_PER_SECOND);

- *            return new TimeAmount(seconds, SECOND);

- *        }

- *     [/code]

- * </p>

- *

- * <p> Quantities sub-types are also used as parameterized type to characterize generic

- *     classes (and provide additional compile time check) as illustrated here.[code]

- *        Sensor<Temperature> sensor ... // Generic sensor.

- *        Temperature temp = sensor.getValue();

- *        MassAmount mass = new MassAmount(180, POUND); // Combination magnitude/precision/unit (measurement)

- *        Vector3D<Speed> aircraftSpeed = new Vector3D(12.0, 34.0, -45.5, METRE_PER_SECOND);

- *     [/code]</p>

- *

- * <p> This package holds only the quantities required by the metric system.</p>

- *

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 2.2, $Date: 2011-01-09 19:56:23 +0100 (So, 09 Jan 2011) $

- */

-package org.eclipse.uomo.units.impl.quantity;

-

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/BinaryPrefix.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/BinaryPrefix.java
deleted file mode 100644
index 4d6d4b8..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/BinaryPrefix.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.system;

-

-import java.math.BigInteger;

-

-import org.eclipse.uomo.units.impl.converter.RationalConverter;

-import javax.measure.Quantity;

-import javax.measure.Unit;

-

-// ///////////////////

-// BINARY PREFIXES  //

-// ///////////////////

-/**

- * Utility class holding binary prefixes.

- * 

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.2, $Date: 2017-12-24 $

- * @see <a href="http://en.wikipedia.org/wiki/Binary_prefix">Wikipedia: Binary

- *      Prefix</a>

- */

-public final class BinaryPrefix {

-

-	private BinaryPrefix() {

-		// Utility class no visible constructor.

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>10</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1024)</code>.

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> KIBI(Unit<?> unit) {

-		return unit.multiply(K);

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>20</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1048576)</code>.

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> MEBI(Unit<?> unit) {

-		return unit.multiply(K2);

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>30</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1073741824)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<?> GIBI(Unit<?> unit) {

-		return unit.multiply(K3);

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>40</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1099511627776L)</code>.

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> TEBI(Unit<?> unit) {

-		return unit.multiply(1099511627776L);

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>50</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1125899906842624L)</code>.

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> PEBI(Unit<?> unit) {

-		return unit.multiply(1125899906842624L);

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>60</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1152921504606846976L)</code>.

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> EXBI(Unit<?> unit) {

-		return unit.multiply(1152921504606846976L);

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>70</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.transform(2<sup>70</sup>)</code>.

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> ZEBI(Unit<?> unit) {

-		return unit.transform(K70);

-	}

-

-	/**

-	 * Returns the specified unit multiplied by the factor

-	 * <code>2<sup>80</sup></code> (binary prefix).

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.transform(2<sup>80</sup>)</code>.

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> YOBI(Unit<?> unit) {

-		return unit.transform(K80);

-	}

-

-	// ///////////////////

-	//  JDEC PREFIXES   //

-	// ///////////////////

-	

-	/**

-	 * <p>

-	 * kilo (K)

-	 * </p>

-	 * This JEDEC prefix is equivalent to <{@link #KIBI}>.

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1024)</code>.

-	 * @see <a

-	 *      href="http://en.wikipedia.org/wiki/JEDEC_memory_standards">Wikipedia:

-	 *      JEDEC memory standards</a>

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> JEDEC_KILO(Unit<?> unit) {

-		return unit.multiply(K);

-	}

-

-	/**

-	 * <p>

-	 * mega (M)

-	 * </p>

-	 * This JEDEC prefix is equal to <{@link #MEBI}>.

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1048576)</code>.

-	 * @see <a

-	 *      href="http://en.wikipedia.org/wiki/JEDEC_memory_standards">Wikipedia:

-	 *      JEDEC memory standards</a>

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> JEDEC_MEGA(Unit<?> unit) {

-		return unit.multiply(K2);

-	}

-

-	/**

-	 * <p>

-	 * giga (G)

-	 * </p>

-	 * This JEDEC prefix is equal to <{@link #GIBI}>.

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1073741824)</code>.

-	 * @see <a

-	 *      href="http://en.wikipedia.org/wiki/JEDEC_memory_standards">Wikipedia:

-	 *      JEDEC memory standards</a>

-	 */

-	public static <Q extends Quantity<Q>> Unit<?> JEDEC_GIGA(Unit<?> unit) {

-		return unit.multiply(K3);

-	}

-

-	// Holds prefix converters (optimization).

-	private static int K = 1024;

-

-	private static int K2 = 1048576;

-

-	private static int K3 = 1073741824;

-

-	private static RationalConverter K70 = new RationalConverter(BigInteger

-			.valueOf(2).pow(70), BigInteger.ONE);

-

-	private static RationalConverter K80 = new RationalConverter(BigInteger

-			.valueOf(2).pow(80), BigInteger.ONE);

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/Imperial.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/Imperial.java
deleted file mode 100644
index 67300ed..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/Imperial.java
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (c) 2005, 2017, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil and others - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.system;
-
-import static org.eclipse.uomo.units.impl.system.SI.*;
-import static org.eclipse.uomo.units.impl.system.MetricPrefix.MICRO;
-import static org.eclipse.uomo.units.internal.NonSI.AVOIRDUPOIS_POUND_DIVIDEND;
-import static org.eclipse.uomo.units.internal.NonSI.AVOIRDUPOIS_POUND_DIVISOR;
-
-import org.eclipse.uomo.units.AbstractSystemOfUnits;
-import javax.measure.quantity.Area;
-import javax.measure.quantity.Length;
-import javax.measure.quantity.Mass;
-import javax.measure.quantity.Temperature;
-import javax.measure.quantity.Time;
-import javax.measure.quantity.Volume;
-import javax.measure.spi.SystemOfUnits;
-import javax.measure.Unit;
-
-/**
- * <p>
- * This class contains units from the Imperial system.
- * </p>
- * <p>
- * 
- * @noextend This class is not intended to be extended by clients.
- * 
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.2, $Date: 2017-12-25 $
- * @see <a
- *      href="http://en.wikipedia.org/wiki/http://en.wikipedia.org/wiki/Imperial_unit">Wikipedia:
- *      Imperial Units</a>
- */
-public final class Imperial extends AbstractSystemOfUnits  {
-
-	/**
-	 * Default constructor (prevents this class from being instantiated).
-	 */
-	private Imperial() {
-	}
-
-	/**
-	 * Returns the unique instance of this class.
-	 * 
-	 * @return the Imperial instance.
-	 */
-	public static SystemOfUnits getInstance() {
-		return INSTANCE;
-	}
-
-	private static final Imperial INSTANCE = new Imperial();
-
-	// //////////
-	// Length //
-	// //////////
-
-	/**
-	 * A unit of length equal to <code>0.0254 m</code> (standard name
-	 * <code>in</code>).
-	 */
-	public static final Unit<Length> INCH = USCustomary.INCH;
-	
-	// ////////
-	// Mass //
-	// ////////
-
-	/**
-	 * A unit of mass equal to <code>453.59237 grams</code> (avoirdupois pound,
-	 * standard name <code>lb</code>).
-	 */
-	static final Unit<Mass> POUND = addUnit(KILOGRAM.multiply(
-			AVOIRDUPOIS_POUND_DIVIDEND).divide(AVOIRDUPOIS_POUND_DIVISOR));
-
-	/**
-	 * A unit of mass equal to <code>1 / 16 {@link #POUND}</code> (standard name
-	 * <code>oz</code>).
-	 */
-	public static final Unit<Mass> OUNCE = addUnit(POUND.divide(16));
-	
-	/**
-	 * A unit of mass equal to <code>2240 {@link #POUND}</code> (long ton,
-	 * standard name <code>ton_uk</code>).
-	 */
-	public static final Unit<Mass> TON_UK = addUnit(POUND.multiply(2240));
-
-	/**
-	 * A unit of mass equal to <code>1000 kg</code> (metric ton, standard name
-	 * <code>t</code>).
-	 */
-	public static final Unit<Mass> METRIC_TON = addUnit(KILOGRAM.multiply(1000));
-
-	// ///////////////
-	// Temperature //
-	// ///////////////
-
-	/**
-	 * A unit of temperature equal to <code>5/9 °K</code> (standard name
-	 * <code>°R</code>).
-	 */
-	static final Unit<Temperature> RANKINE = addUnit(KELVIN.multiply(5)
-			.divide(9));
-
-	/**
-	 * A unit of temperature equal to degree Rankine minus
-	 * <code>459.67 °R</code> (standard name <code>°F</code>).
-	 * 
-	 * @see #RANKINE
-	 */
-	static final Unit<Temperature> FAHRENHEIT = addUnit(RANKINE
-			.shift(459.67));
-
-	// /////////
-	// Angle //
-	// /////////
-
-	
-	// ////////////
-	// TimeUnit //
-	// ////////////
-	/**
-	 * A unit of time equal to <code>60 s</code> (standard name <code>min</code>
-	 * ).
-	 */
-	static final Unit<Time> MINUTE = addUnit(SECOND.multiply(60));
-
-	/**
-	 * A unit of duration equal to <code>60 {@link #MINUTE}</code> (standard
-	 * name <code>h</code>).
-	 */
-	static final Unit<Time> HOUR = addUnit(MINUTE.multiply(60));
-
-	// ////////////
-	// Speed //
-	// ////////////
-
-
-	// ////////
-	// Area //
-	// ////////
-
-	/**
-	 * A unit of area (standard name <code>sft</code>
-	 * ).
-	 */
-	public static final Unit<Area> SQUARE_FOOT = USCustomary.SQUARE_FOOT;
-	
-	/**
-	 * One acre is 43,560 <code>square feet</code> (standard name <code>a</code>
-	 * ).
-	 */
-	public static final Unit<Area> ACRE = addUnit(SQUARE_FOOT.multiply(43560));
-
-	// ///////////////
-	// Data Amount //
-	// ///////////////
-	
-
-	// //////////
-	// Energy //
-	// //////////
-
-
-	// //////////
-	// Volume //
-	// //////////
-	/**
-	 * A unit of volume equal to one cubic decimeter (default label
-	 * <code>L</code>, also recognized <code>µL, mL, cL, dL</code>).
-	 */
-	static final Unit<Volume> LITRE = addUnit(CUBIC_METRE.divide(1000));
-
-	/**
-	 * A unit of volume equal to one cubic inch (<code>in³</code>).
-	 */
-	static final Unit<Volume> CUBIC_INCH = addUnit(INCH.pow(3).asType(
-			Volume.class));
-
-	/**
-	 * A unit of volume equal to <code>4.546 09 {@link #LITRE}</code> (standard
-	 * name <code>gal_uk</code>).
-	 */
-	public static final Unit<Volume> GALLON_UK = addUnit(LITRE.multiply(454609)
-			.divide(100000));
-
-	/**
-	 * A unit of volume equal to one UK gallon, Liquid Unit.
-	 */
-	public static final Unit<Volume> GALLON_LIQUID = addUnit(CUBIC_INCH
-			.multiply(277.42));
-	
-	/**
-	 * A unit of volume equal to <code>1 / 160 {@link #GALLON_UK}</code>
-	 * (standard name <code>oz_fl_uk</code>).
-	 */
-	static final Unit<Volume> OUNCE_LIQUID_UK = addUnit(GALLON_UK
-			.divide(160));
-	
-	/**
-	 * A unit of volume equal to <code>1 / 160 {@link #GALLON_LIQUID}</code>
-	 * (standard name <code>oz_fl</code>).
-	 */
-	public static final Unit<Volume> OUNCE_LIQUID = OUNCE_LIQUID_UK;
-
-	/**
-	 * A unit of volume equal to <code>5 {@link #OUNCE_LIQUID}</code> (standard name
-	 * <code>gi</code>).
-	 */
-	public static final Unit<Volume> GILL = addUnit(OUNCE_LIQUID.multiply(5));
-
-	/**
-	 * A unit of volume equal to <code>20 {@link #OUNCE_LIQUID}</code> (standard name
-	 * <code>pt</code>).
-	 */
-	public static final Unit<Volume> PINT = addUnit(OUNCE_LIQUID.multiply(20));
-
-	/**
-	 * A unit of volume equal to <code>40 {@link #OUNCE_LIQUID}</code> (standard name
-	 * <code>qt</code>).
-	 */
-	public static final Unit<Volume> QUART = addUnit(OUNCE_LIQUID.multiply(40));
-	
-	/**
-	 * A unit of volume <code>~ 1 drop or 0.95 grain of water </code> (standard
-	 * name <code>min</code>).
-	 */
-	public static final Unit<Volume> MINIM = addUnit(MICRO(LITRE).multiply(
-			59.1938802d));
-
-	/**
-	 * A unit of volume equal to <code>20 {@link #MINIM}</code> (standard name
-	 * <code>fl scr</code>).
-	 */
-	public static final Unit<Volume> FLUID_SCRUPLE = addUnit(MINIM.multiply(60));
-
-	/**
-	 * A unit of volume equal to <code>3 {@link #FLUID_SCRUPLE}</code> (standard name
-	 * <code>fl drc</code>).
-	 */
-	public static final Unit<Volume> FLUID_DRACHM = addUnit(FLUID_SCRUPLE.multiply(3));
-
-
-	public String getName() {
-		return getClass().getSimpleName();
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/IndianPrefix.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/IndianPrefix.java
deleted file mode 100644
index c516a33..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/IndianPrefix.java
+++ /dev/null
@@ -1,248 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.system;

-

-import java.math.BigInteger;

-

-import org.eclipse.uomo.units.impl.converter.RationalConverter;

-import javax.measure.Quantity;

-import javax.measure.Unit;

-

-/**

- * Utility class holding prefixes used today in India, Pakistan, Bangladesh, Nepal

- * and Myanmar (Burma); based on grouping by two decimal places, rather than the

- * three decimal places common in most parts of the world. [code] import static

- * org.eclipse.uomo.units.IndianPrefix.*; // Static import. ... Unit<Pressure>

- * LAKH_PASCAL = LAKH(PASCAL);

- * Unit<Length>CRORE_METER = CRORE(METER); [/code]

- * 

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.5 ($Revision: 212 $), $Date: 2010-09-13 23:50:44 +0200 (Mo, 13 Sep 2010) $

- * @see <a

- *      href="http://en.wikipedia.org/wiki/Indian_numbering_system">Wikipedia: Indian numbering system</a>

- */

-public abstract class IndianPrefix {

-

-	/**

-	 * <p>

-	 * एक (Ek)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor <code>1</code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> EK(Unit<Q> unit) {

-		return unit;

-	}

-

-	/**

-	 * <p>

-	 * दस (Das)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>1</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(10)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> DAS(Unit<Q> unit) {

-		return unit.transform(E1);

-	}

-

-	/**

-	 * <p>

-	 * सौ (Sau)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>2</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(100)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> SAU(Unit<Q> unit) {

-		return unit.transform(E2);

-	}

-

-	/**

-	 * <p>

-	 * सहस्र (Sahasr)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>3</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e3)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> SAHASR(Unit<Q> unit) {

-		return unit.transform(E3);

-	}

-

-	/**

-	 * <p>

-	 * हजार (Hazaar)

-	 * </p>

-	 * Equivalent to {@link #SAHASR}.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> HAZAAR(Unit<Q> unit) {

-		return SAHASR(unit);

-	}

-

-	/**

-	 * <p>

-	 * लाख (Lakh)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>5</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e5)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> LAKH(Unit<Q> unit) {

-		return unit.transform(E5);

-	}

-

-	static final RationalConverter E5 = new RationalConverter(

-			BigInteger.TEN.pow(5), BigInteger.ONE);

-

-	/**

-	 * <p>

-	 * करोड़ (Crore)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>7</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e7)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> CRORE(Unit<Q> unit) {

-		return unit.transform(E7);

-	}

-

-	static final RationalConverter E7 = new RationalConverter(

-			BigInteger.TEN.pow(7), BigInteger.ONE);

-

-	/**

-	 * <p>

-	 * अरब (Arawb)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>9</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e9)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> ARAWB(Unit<Q> unit) {

-		return unit.transform(E9);

-	}

-

-	/**

-	 * <p>

-	 * खरब (Kharawb)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>11</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e11)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> KHARAWB(Unit<Q> unit) {

-		return unit.transform(E11);

-	}

-

-	/**

-	 * <p>

-	 * नील (Neel)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>13</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e13)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> NEEL(Unit<Q> unit) {

-		return unit.transform(E13);

-	}

-

-	/**

-	 * <p>

-	 * पद्म (Padma)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>15</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e15)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> PADMA(Unit<Q> unit) {

-		return unit.transform(E15);

-	}

-

-	/**

-	 * <p>

-	 * शंख (Shankh)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>17</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e17)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> SHANKH(Unit<Q> unit) {

-		return unit.transform(E17);

-	}

-

-	/**

-	 * <p>

-	 * महाशंख (Mahashankh)

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>19</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e19)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> MAHASHANKH(Unit<Q> unit) {

-		return unit.transform(E19);

-	}

-

-	// Holds prefix converters (optimization).

-	private static RationalConverter E19 = new RationalConverter(

-			BigInteger.TEN.pow(19), BigInteger.ONE);

-	private static RationalConverter E17 = new RationalConverter(

-			BigInteger.TEN.pow(17), BigInteger.ONE);

-	private static RationalConverter E15 = new RationalConverter(

-			BigInteger.TEN.pow(15), BigInteger.ONE);

-	private static RationalConverter E13 = new RationalConverter(

-			BigInteger.TEN.pow(13), BigInteger.ONE);

-	private static RationalConverter E11 = new RationalConverter(

-			BigInteger.TEN.pow(11), BigInteger.ONE);

-	private static RationalConverter E9 = new RationalConverter(

-			BigInteger.TEN.pow(9), BigInteger.ONE);

-	private static RationalConverter E3 = new RationalConverter(

-			BigInteger.TEN.pow(3), BigInteger.ONE);

-	private static RationalConverter E2 = new RationalConverter(

-			BigInteger.TEN.pow(2), BigInteger.ONE);

-	private static RationalConverter E1 = new RationalConverter(

-			BigInteger.TEN.pow(1), BigInteger.ONE);

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/MetricPrefix.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/MetricPrefix.java
deleted file mode 100644
index de8a38a..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/MetricPrefix.java
+++ /dev/null
@@ -1,365 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.system;

-

-import org.eclipse.uomo.units.impl.converter.RationalConverter;

-import tec.uom.lib.common.function.SymbolSupplier;

-import tec.uom.lib.common.function.UnitConverterSupplier;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-import javax.measure.UnitConverter;

-

-import java.math.BigInteger;

-

-/**

- * <p>

- * This class provides support for the 20 prefixes used in the metric system (decimal multiples and submultiples of units). For example:

- * 

- * <pre>

- * <code>
- *     import static tec.units.indriya.unit.Units.*;  // Static import.
- *     import static tec.units.indriya.unit.MetricPrefix.*; // Static import.
- *     import javax.measure.*;
- *     import javax.measure.quantity.*;
- *     ...
- *     Unit<Pressure> HECTOPASCAL = HECTO(PASCAL);
- *     Unit<Length> KILOMETRE = KILO(METRE);
- *     </code>

- * </pre>

- * 

- * </p>

- *

- * @see <a href="http://en.wikipedia.org/wiki/Metric_prefix">Wikipedia: Metric Prefix</a>

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @version 1.0, 2017-12-24

- */

-public enum MetricPrefix implements SymbolSupplier, UnitConverterSupplier {

-  YOTTA("Y", new RationalConverter(BigInteger.TEN.pow(24), BigInteger.ONE)), ZETTA("Z", new RationalConverter(BigInteger.TEN.pow(21), BigInteger.ONE)), EXA(

-      "E", new RationalConverter(BigInteger.TEN.pow(18), BigInteger.ONE)), PETA("P", new RationalConverter(BigInteger.TEN.pow(15), BigInteger.ONE)), TERA(

-      "T", new RationalConverter(BigInteger.TEN.pow(12), BigInteger.ONE)), GIGA("G", new RationalConverter(BigInteger.TEN.pow(9), BigInteger.ONE)), MEGA(

-      "M", new RationalConverter(BigInteger.TEN.pow(6), BigInteger.ONE)), KILO("k", new RationalConverter(BigInteger.TEN.pow(3), BigInteger.ONE)), HECTO(

-      "h", new RationalConverter(BigInteger.TEN.pow(2), BigInteger.ONE)), DEKA("da", new RationalConverter(BigInteger.TEN.pow(1), BigInteger.ONE)), DECI(

-      "d", new RationalConverter(BigInteger.ONE, BigInteger.TEN.pow(1))), CENTI("c", new RationalConverter(BigInteger.ONE, BigInteger.TEN.pow(2))), MILLI(

-      "m", new RationalConverter(BigInteger.ONE, BigInteger.TEN.pow(3))), MICRO("µ", new RationalConverter(BigInteger.ONE, BigInteger.TEN.pow(6))), NANO(

-      "n", new RationalConverter(BigInteger.ONE, BigInteger.TEN.pow(9))), PICO("p", new RationalConverter(BigInteger.ONE, BigInteger.TEN.pow(12))), FEMTO(

-      "f", new RationalConverter(BigInteger.ONE, BigInteger.TEN.pow(15))), ATTO("a", new RationalConverter(BigInteger.ONE, BigInteger.TEN.pow(18))), ZEPTO(

-      "z", new RationalConverter(BigInteger.ONE, BigInteger.TEN.pow(21))), YOCTO("y", new RationalConverter(BigInteger.ONE, BigInteger.TEN.pow(24)));

-

-  /**

-   * The symbol of this prefix, as returned by {@link #getSymbol}.

-   *

-   * @serial

-   * @see #getSymbol()

-   */

-  private final String symbol;

-

-  /**

-   * The <code>UnitConverter</code> of this prefix, as returned by {@link #getConverter}.

-   *

-   * @serial

-   * @see #getConverter()

-   * @see {@link UnitConverter}

-   */

-  private final UnitConverter converter;

-

-  /**

-   * Creates a new prefix.

-   *

-   * @param symbol

-   *          the symbol of this prefix.

-   * @param converter

-   *          the associated unit converter.

-   */

-  MetricPrefix(String symbol, RationalConverter converter) {

-    this.symbol = symbol;

-    this.converter = converter;

-  }

-

-  /**

-   * Returns the symbol of this prefix.

-   *

-   * @return this prefix symbol, not {@code null}.

-   */

-  public String getSymbol() {

-    return symbol;

-  }

-

-  /**

-   * Returns the corresponding unit converter.

-   *

-   * @return the unit converter.

-   */

-  public UnitConverter getConverter() {

-    return converter;

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>24</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e24)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> YOTTA(Unit<Q> unit) {

-    return unit.transform(YOTTA.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>21</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e21)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> ZETTA(Unit<Q> unit) {

-    return unit.transform(ZETTA.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>18</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e18)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> EXA(Unit<Q> unit) {

-    return unit.transform(EXA.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>15</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e15)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> PETA(Unit<Q> unit) {

-    return unit.transform(PETA.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>12</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e12)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> TERA(Unit<Q> unit) {

-    return unit.transform(TERA.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>9</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e9)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> GIGA(Unit<Q> unit) {

-    return unit.transform(GIGA.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>6</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e6)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> MEGA(Unit<Q> unit) {

-    return unit.transform(MEGA.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>3</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e3)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> KILO(Unit<Q> unit) {

-    return unit.transform(KILO.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>2</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e2)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> HECTO(Unit<Q> unit) {

-    return unit.transform(HECTO.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>1</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e1)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> DEKA(Unit<Q> unit) {

-    return unit.transform(DEKA.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>-1</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e-1)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> DECI(Unit<Q> unit) {

-    return unit.transform(DECI.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>-2</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e-2)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> CENTI(Unit<Q> unit) {

-    return unit.transform(CENTI.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>-3</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e-3)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> MILLI(Unit<Q> unit) {

-    return unit.transform(MILLI.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>-6</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e-6)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> MICRO(Unit<Q> unit) {

-    return unit.transform(MICRO.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>-9</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e-9)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> NANO(Unit<Q> unit) {

-    return unit.transform(NANO.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>-12</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e-12)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> PICO(Unit<Q> unit) {

-    return unit.transform(PICO.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>-15</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e-15)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> FEMTO(Unit<Q> unit) {

-    return unit.transform(FEMTO.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>-18</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e-18)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> ATTO(Unit<Q> unit) {

-    return unit.transform(ATTO.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>-21</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e-21)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> ZEPTO(Unit<Q> unit) {

-    return unit.transform(ZEPTO.getConverter());

-  }

-

-  /**

-   * Returns the specified unit multiplied by the factor <code>10<sup>-24</sup></code>

-   *

-   * @param <Q>

-   *          The type of the quantity measured by the unit.

-   * @param unit

-   *          any unit.

-   * @return <code>unit.times(1e-24)</code>.

-   */

-  public static <Q extends Quantity<Q>> Unit<Q> YOCTO(Unit<Q> unit) {

-    return unit.transform(YOCTO.getConverter());

-  }

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/SI.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/SI.java
deleted file mode 100644
index f084f04..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/SI.java
+++ /dev/null
@@ -1,392 +0,0 @@
-/**

- * Copyright (c) 2005, 2011, Werner Keil, JScience and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.system;

-

-import static org.eclipse.uomo.units.AbstractUnit.ONE;

-

-import java.math.BigInteger;

-import org.eclipse.uomo.units.Messages;

-import org.eclipse.uomo.units.impl.AlternateUnit;

-import org.eclipse.uomo.units.impl.BaseUnit;

-import org.eclipse.uomo.units.impl.ProductUnit;

-import org.eclipse.uomo.units.impl.TransformedUnit;

-import org.eclipse.uomo.units.impl.converter.RationalConverter;

-import javax.measure.spi.SystemOfUnits;

-import javax.measure.Unit;

-import javax.measure.quantity.*;

-

-/**

- * <p>

- * This class contains SI (Système International d'Unités) base units, and

- * derived units.

- * </p>

- * 

- * <p>

- * It also defines an inner class for the 20 SI prefixes used to form decimal

- * multiples and submultiples of SI units. For example:[code] import static

- * org.eclipse.uomo.units.SI.*; // Static import. ... Unit<Pressure> HECTOPASCAL

- * = HECTO(PASCAL); Unit<Length> KILOMETRE = KILO(METRE); [/code]

- * </p>

- * 

- * @noextend This class is not intended to be extended by clients.

- * 

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @version 1.32 ($Revision: 232 $), $Date: 2011-09-11 14:50:08 +0200 $

- * @see <a

- *      href="http://en.wikipedia.org/wiki/International_System_of_Units">Wikipedia:

- *      International System of Units</a>

- */

-public final class SI extends AbstractSystemOfUnits {

-

-	/**

-	 * The singleton instance of {@code SI}.

-	 */

-	private static final SI INSTANCE = new SI();

-

-	/**

-	 * Returns the singleton instance of this class.

-	 * 

-	 * @return the SI (metric) system instance.

-	 */

-	public static final SystemOfUnits getInstance() {

-		return INSTANCE;

-	}

-

-	// //////////////

-	// BASE UNITS //

-	// //////////////

-	/**

-	 * The base unit for electric current quantities (<code>A</code>). The

-	 * Ampere is that constant current which, if maintained in two straight

-	 * parallel conductors of infinite length, of negligible circular

-	 * cross-section, and placed 1 meter apart in vacuum, would produce between

-	 * these conductors a force equal to 2 * 10-7 newton per meter of length. It

-	 * is named after the French physicist Andre Ampere (1775-1836).

-	 */

-	public static final Unit<ElectricCurrent> AMPERE = addUnit(new BaseUnit<ElectricCurrent>(

-			Messages.SI_A));

-

-	/**

-	 * The base unit for luminous intensity quantities (<code>cd</code>). The

-	 * candela is the luminous intensity, in a given direction, of a source that

-	 * emits monochromatic radiation of frequency 540 * 1012 hertz and that has

-	 * a radiant intensity in that direction of 1/683 watt per steradian

-	 * 

-	 * @see <a href="http://en.wikipedia.org/wiki/Candela"> Wikipedia:

-	 *      Candela</a>

-	 */

-	public static final Unit<LuminousIntensity> CANDELA = addUnit(new BaseUnit<LuminousIntensity>(

-			Messages.SI_cd));

-

-	/**

-	 * The base unit for thermodynamic temperature quantities (<code>K</code>).

-	 * The kelvin is the 1/273.16th of the thermodynamic temperature of the

-	 * triple point of water. It is named after the Scottish mathematician and

-	 * physicist William Thomson 1st Lord Kelvin (1824-1907)

-	 */

-	public static final Unit<Temperature> KELVIN = addUnit(new BaseUnit<Temperature>(

-			Messages.SI_K));

-

-	/**

-	 * The base unit for mass quantities (<code>kg</code>). It is the only SI

-	 * unit with a prefix as part of its name and symbol. The kilogram is equal

-	 * to the mass of an international prototype in the form of a

-	 * platinum-iridium cylinder kept at Sevres in France.

-	 * 

-	 * @see #GRAM

-	 */

-	public static final Unit<Mass> KILOGRAM = addUnit(new BaseUnit<Mass>(

-			Messages.SI_kg, Messages.SI_kg_name));

-

-	/**

-	 * The base unit for length quantities (<code>m</code>). One metre was

-	 * redefined in 1983 as the distance traveled by light in a vacuum in

-	 * 1/299,792,458 of a second.

-	 */

-	public static final Unit<Length> METRE = addUnit(new BaseUnit<Length>(

-			Messages.SI_m, Messages.SI_m_name));

-

-	/**

-	 * The base unit for amount of substance quantities (<code>mol</code>). The

-	 * mole is the amount of substance of a system which contains as many

-	 * elementary entities as there are atoms in 0.012 kilogram of carbon 12.

-	 */

-	public static final Unit<AmountOfSubstance> MOLE = addUnit(new BaseUnit<AmountOfSubstance>(

-			Messages.SI_mol));

-

-	/**

-	 * The base unit for time quantities (<code>s</code>). It is defined as the

-	 * duration of 9,192,631,770 cycles of radiation corresponding to the

-	 * transition between two hyperfine levels of the ground state of cesium

-	 * (1967 Standard).

-	 * 

-	 * FIXME this is not aligned with TimeUnit from ICU4J due to TimeUnit so far cannot be extended 

-	 */

-	public static final Unit<Time> SECOND = addUnit(new BaseUnit<Time>(

-			Messages.SI_s));

-	// //////////////////////////////

-	// SI DERIVED ALTERNATE UNITS //

-	// //////////////////////////////

-

-	/**

-	 * The unit for magnetomotive force (<code>At</code>).

-	 */

-	public static final Unit<MagnetomotiveForce> AMPERE_TURN = addUnit(new AlternateUnit<MagnetomotiveForce>(

-			Messages.SI_At, (AbstractUnit<?>) SI.AMPERE));

-

-	/**

-	 * The derived unit for mass quantities (<code>g</code>). The base unit for

-	 * mass quantity is {@link #KILOGRAM}.

-	 */

-	public static final Unit<Mass> GRAM = KILOGRAM.divide(1000);

-

-	/**

-	 * The unit for plane angle quantities (<code>rad</code>). One radian is the

-	 * angle between two radii of a circle such that the length of the arc

-	 * between them is equal to the radius.

-	 */

-	public static final Unit<Angle> RADIAN = addUnit(new AlternateUnit<Angle>(

-			Messages.SI_rad, AbstractUnit.ONE));

-

-	/**

-	 * The unit for solid angle quantities (<code>sr</code>). One steradian is

-	 * the solid angle subtended at the center of a sphere by an area on the

-	 * surface of the sphere that is equal to the radius squared. The total

-	 * solid angle of a sphere is 4*Pi steradians.

-	 */

-	public static final Unit<SolidAngle> STERADIAN = addUnit(new AlternateUnit<SolidAngle>(

-			Messages.SI_sr, AbstractUnit.ONE));

-

-	/**

-	 * The derived unit for frequency (<code>Hz</code>). A unit of frequency

-	 * equal to one cycle per second. After Heinrich Rudolf Hertz (1857-1894),

-	 * German physicist who was the first to produce radio waves artificially.

-	 */

-	public static final Unit<Frequency> HERTZ = addUnit(new AlternateUnit<Frequency>(

-			Messages.SI_Hz,

-			(AbstractUnit<?>) AbstractUnit.ONE.divide(SECOND)));

-

-	/**

-	 * The derived unit for force (<code>N</code>). One newton is the force

-	 * required to give a mass of 1 kilogram an Force of 1 metre per second per

-	 * second. It is named after the English mathematician and physicist Sir

-	 * Isaac Newton (1642-1727).

-	 */

-	public static final Unit<Force> NEWTON = addUnit(new AlternateUnit<Force>(

-			Messages.SI_N, (AbstractUnit<?>) METRE.multiply(KILOGRAM)

-					.divide(SECOND.pow(2))));

-

-	/**

-	 * The derived unit for pressure, stress (<code>Pa</code>). One pascal is

-	 * equal to one newton per square meter. It is named after the French

-	 * philosopher and mathematician Blaise Pascal (1623-1662).

-	 */

-	public static final Unit<Pressure> PASCAL = addUnit(new AlternateUnit<Pressure>(

-			Messages.SI_Pa, (AbstractUnit<?>) NEWTON.divide(METRE.pow(2))));

-

-	/**

-	 * The derived unit for energy, work, quantity of heat (<code>J</code>). One

-	 * joule is the amount of work done when an applied force of 1 newton moves

-	 * through a distance of 1 metre in the direction of the force. It is named

-	 * after the English physicist James Prescott Joule (1818-1889).

-	 */

-	public static final Unit<Energy> JOULE = addUnit(new AlternateUnit<Energy>(

-			Messages.SI_J, (AbstractUnit<?>) NEWTON.multiply(METRE)));

-

-	/**

-	 * The derived unit for power, radiant, flux (<code>W</code>). One watt is

-	 * equal to one joule per second. It is named after the British scientist

-	 * James Watt (1736-1819).

-	 */

-	public static final Unit<Power> WATT = addUnit(new AlternateUnit<Power>(

-			Messages.SI_W, (AbstractUnit<?>) JOULE.divide(SECOND)));

-

-	/**

-	 * The derived unit for electric charge, quantity of electricity (

-	 * <code>C</code>). One Coulomb is equal to the quantity of charge

-	 * transferred in one second by a steady current of one ampere. It is named

-	 * after the French physicist Charles Augustin de Coulomb (1736-1806).

-	 */

-	public static final Unit<ElectricCharge> COULOMB = addUnit(new AlternateUnit<ElectricCharge>(

-			Messages.SI_C, (AbstractUnit<?>) SECOND.multiply(AMPERE)));

-

-	/**

-	 * The derived unit for electric potential difference, electromotive force (

-	 * <code>V</code>). One Volt is equal to the difference of electric

-	 * potential between two points on a conducting wire carrying a constant

-	 * current of one ampere when the power dissipated between the points is one

-	 * watt. It is named after the Italian physicist Count Alessandro Volta

-	 * (1745-1827).

-	 */

-	public static final Unit<ElectricPotential> VOLT = addUnit(new AlternateUnit<ElectricPotential>(

-			Messages.SI_V, (AbstractUnit<?>) WATT.divide(AMPERE)));

-

-	/**

-	 * The derived unit for capacitance (<code>F</code>). One Farad is equal to

-	 * the capacitance of a capacitor having an equal and opposite charge of 1

-	 * coulomb on each plate and a potential difference of 1 volt between the

-	 * plates. It is named after the British physicist and chemist Michael

-	 * Faraday (1791-1867).

-	 */

-	public static final Unit<ElectricCapacitance> FARAD = addUnit(new AlternateUnit<ElectricCapacitance>(

-			Messages.SI_F, (AbstractUnit<?>) COULOMB.divide(VOLT)));

-

-	/**

-	 * The derived unit for electric resistance (<code>Ohm</code>). One Ohm is

-	 * equal to the resistance of a conductor in which a current of one ampere

-	 * is produced by a potential of one volt across its terminals. It is named

-	 * after the German physicist Georg Simon Ohm (1789-1854).

-	 */

-	public static final Unit<ElectricResistance> OHM = addUnit(new AlternateUnit<ElectricResistance>(

-			Messages.SI_OhmS, (AbstractUnit<?>) VOLT.divide(AMPERE)));

-

-	/**

-	 * The derived unit for electric conductance (<code>S</code>). One Siemens

-	 * is equal to one ampere per volt. It is named after the German engineer

-	 * Ernst Werner von Siemens (1816-1892).

-	 */

-	public static final Unit<ElectricConductance> SIEMENS = addUnit(new AlternateUnit<ElectricConductance>(

-			Messages.SI_S, (AbstractUnit<?>) AMPERE.divide(VOLT)));

-

-	/**

-	 * The derived unit for magnetic flux (<code>Wb</code>). One Weber is equal

-	 * to the magnetic flux that in linking a circuit of one turn produces in it

-	 * an electromotive force of one volt as it is uniformly reduced to zero

-	 * within one second. It is named after the German physicist Wilhelm Eduard

-	 * Weber (1804-1891).

-	 */

-	public static final Unit<MagneticFlux> WEBER = addUnit(new AlternateUnit<MagneticFlux>(

-			Messages.SI_Wb, (AbstractUnit<?>) VOLT.multiply(SECOND)));

-

-	/**

-	 * The derived unit for magnetic flux density (<code>T</code>). One Tesla is

-	 * equal equal to one weber per square metre. It is named after the

-	 * Serbian-born American electrical engineer and physicist Nikola Tesla

-	 * (1856-1943).

-	 */

-	public static final Unit<MagneticFluxDensity> TESLA = addUnit(new AlternateUnit<MagneticFluxDensity>(

-			Messages.SI_T, (AbstractUnit<?>) WEBER.divide(METRE.pow(2))));

-

-	/**

-	 * The derived unit for inductance (<code>H</code>). One Henry is equal to

-	 * the inductance for which an induced electromotive force of one volt is

-	 * produced when the current is varied at the rate of one ampere per second.

-	 * It is named after the American physicist Joseph Henry (1791-1878).

-	 */

-	public static final Unit<ElectricInductance> HENRY = addUnit(new AlternateUnit<ElectricInductance>(

-			Messages.SI_H, (AbstractUnit<?>) WEBER.divide(AMPERE)));

-

-	/**

-	 * The derived unit for Celsius temperature (<code>Cel</code>). This is a

-	 * unit of temperature such as the freezing point of water (at one

-	 * atmosphere of pressure) is 0 Cel, while the boiling point is 100 Cel.

-	 */

-	public static final Unit<Temperature> CELSIUS = addUnit(KELVIN.add(273.15));

-

-	/**

-	 * The derived unit for luminous flux (<code>lm</code>). One Lumen is equal

-	 * to the amount of light given out through a solid angle by a source of one

-	 * candela intensity radiating equally in all directions.

-	 */

-	public static final Unit<LuminousFlux> LUMEN = addUnit(new AlternateUnit<LuminousFlux>(

-			Messages.SI_lm, (AbstractUnit<?>) CANDELA.multiply(STERADIAN)));

-

-	/**

-	 * The derived unit for illuminance (<code>lx</code>). One Lux is equal to

-	 * one lumen per square metre.

-	 */

-	public static final Unit<Illuminance> LUX = addUnit(new AlternateUnit<Illuminance>(

-			Messages.SI_lx, (AbstractUnit<?>) LUMEN.divide(METRE.pow(2))));

-

-	/**

-	 * The derived unit for activity of a radionuclide (<code>Bq</code>). One

-	 * becquerel is the radiation caused by one disintegration per second. It is

-	 * named after the French physicist, Antoine-Henri Becquerel (1852-1908).

-	 */

-	public static final Unit<Radioactivity> BECQUEREL = addUnit(new AlternateUnit<Radioactivity>(

-			Messages.SI_Bq,

-			(AbstractUnit<?>) AbstractUnit.ONE.divide(SECOND)));

-

-	/**

-	 * The derived unit for absorbed dose, specific energy (imparted), kerma (

-	 * <code>Gy</code>). One gray is equal to the dose of one joule of energy

-	 * absorbed per one kilogram of matter. It is named after the British

-	 * physician L. H. Gray (1905-1965).

-	 */

-	public static final Unit<RadiationDoseAbsorbed> GRAY = addUnit(new AlternateUnit<RadiationDoseAbsorbed>(

-			Messages.SI_Gy, (AbstractUnit<?>) JOULE.divide(KILOGRAM)));

-

-	/**

-	 * The derived unit for dose equivalent (<code>Sv</code>). One Sievert is

-	 * equal is equal to the actual dose, in grays, multiplied by a

-	 * "quality factor" which is larger for more dangerous forms of radiation.

-	 * It is named after the Swedish physicist Rolf Sievert (1898-1966).

-	 */

-	public static final Unit<RadiationDoseEffective> SIEVERT = addUnit(new AlternateUnit<RadiationDoseEffective>(

-			Messages.SI_Sv, (AbstractUnit<?>) JOULE.divide(KILOGRAM)));

-

-	/**

-	 * The derived unit for catalytic activity (<code>kat</code>).

-	 */

-	public static final Unit<CatalyticActivity> KATAL = addUnit(new AlternateUnit<CatalyticActivity>(

-			Messages.SI_kat, (AbstractUnit<?>) MOLE.divide(SECOND)));

-	// ////////////////////////////

-	// SI DERIVED PRODUCT UNITS //

-	// ////////////////////////////

-

-	/**

-	 * The metric unit for Speed quantities (<code>m/s</code>).

-	 * 

-	 */

-	public static final Unit<Speed> METRES_PER_SECOND = addUnit(new ProductUnit<Speed>(

-			(AbstractUnit<?>) METRE.divide(SECOND)));

-

-	/**

-	 * The metric unit for acceleration quantities (<code>m/s2</code>).

-	 */

-	public static final Unit<Acceleration> METRES_PER_SQUARE_SECOND = addUnit(new ProductUnit<Acceleration>(

-			(AbstractUnit<?>) METRES_PER_SECOND.divide(SECOND)));

-

-	/**

-	 * The metric unit for area quantities (<code>m2</code>).

-	 */

-	public static final Unit<Area> SQUARE_METRE = addUnit(new ProductUnit<Area>(

-			(AbstractUnit<?>) METRE.multiply(METRE)));

-

-	/**

-	 * The metric unit for volume quantities (<code>m3</code>).

-	 */

-	public static final Unit<Volume> CUBIC_METRE = addUnit(new ProductUnit<Volume>(

-			(AbstractUnit<?>) SQUARE_METRE.multiply(METRE)));

-

-    /////////////////////////////////////////////////////////////////

-	// Units outside the SI that are accepted for use with the SI. //

-	/////////////////////////////////////////////////////////////////

-

-	/**

-	* A dimensionless unit accepted for use with SI units (standard name <code>%</code>).

-	*/

-	public static final TransformedUnit<Dimensionless> PERCENT

-	= new TransformedUnit<Dimensionless>(ONE, new RationalConverter(1, 100));

-	

-	// //////////

-	// Others //

-	// //////////

-	/**

-	 * A unit used to measure the ionizing ability of radiation (standard name

-	 * <code>Roentgen</code>).

-	 */

-	@SuppressWarnings("unchecked")

-	public static final Unit<IonizingRadiation> ROENTGEN = (Unit<IonizingRadiation>) addUnit(COULOMB.divide(KILOGRAM)

-			.multiply(2.58e-4), Messages.NonSI_R_name);

-	

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/SystemOfUnitsServiceImpl.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/SystemOfUnitsServiceImpl.java
deleted file mode 100644
index 5f330f5..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/SystemOfUnitsServiceImpl.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**

- * Copyright (c) 2005, 2013, Werner Keil, JScience and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.system;

-

-import java.util.Collection;

-import java.util.HashMap;

-import java.util.Map;

-

-import org.eclipse.uomo.units.SI;

-import javax.measure.service.SystemOfUnitsService;

-import javax.measure.spi.SystemOfUnits;

-

-/**

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @version 0.6.1, $Date$

- */

-public class SystemOfUnitsServiceImpl implements SystemOfUnitsService {

-	

-	final Map<String, SystemOfUnits> souMap = new HashMap<String, SystemOfUnits>();

-

-	public SystemOfUnitsServiceImpl() {

-		souMap.put(SI.class.getSimpleName(), SI.getInstance());

-		souMap.put(Units.class.getSimpleName(), Units.getInstance());

-		souMap.put(USCustomary.class.getSimpleName(), USCustomary.getInstance());

-	}

-	

-	public Collection<SystemOfUnits> getSystemsOfUnits() {

-		return souMap.values();

-	}

-	

-	@Override

-	public SystemOfUnits getSystemOfUnits() {

-		return getSystemOfUnits(SI.class.getSimpleName());

-	}

-

-	@Override

-	public SystemOfUnits getSystemOfUnits(String name) {

-		return souMap.get(name);

-	}

-

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/TamilPrefix.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/TamilPrefix.java
deleted file mode 100644
index 2ce7939..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/TamilPrefix.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.system;

-

-import java.math.BigInteger;

-

-import org.eclipse.uomo.units.impl.converter.RationalConverter;

-import javax.measure.Quantity;

-import javax.measure.Unit;

-

-

-/**

- * Utility class holding prefixes used today in parts of India and Sri Lanka;

- * based on grouping by two decimal places, rather than the

- * three decimal places common in most parts of the world.</br><code> import static

- * org.eclipse.uomo.units.TamilPrefix.*; // Static import. ... Unit<Pressure>

- * ONDRU_PASCAL = ONDRU(PASCAL); 

- * Unit<Length> PATHU_METER = PATHU(METER); </code>

- * 

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.3 ($Revision$), $Date: 2017-12-24 $

- * @see <a

- *      href="http://en.wikipedia.org/wiki/Tamil_units_of_measurement#Whole_numbers">Wikipedia:

- *      Tamil units of measurement - Whole numbers</a>

- */

-public abstract class TamilPrefix  {

-

-	/**

-	 * <p>

-	 * onRu

-	 * </p>

-	 * Returns the specified unit multiplied by the factor <code>1</code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> onRu(Unit<Q> unit) {

-		return unit;

-	}

-	

-	/**

-	 * <p>

-	 * patthu

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>1</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(10)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> patthu(Unit<Q> unit) {

-		return unit.transform(E1);

-	}

-

-	/**

-	 * <p>

-	 * nooRu

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>2</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(100)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> nooRu(Unit<Q> unit) {

-		return unit.transform(E2);

-	}

-

-	/**

-	 * <p>

-	 * aayiram

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>3</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e3)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> aayiram(Unit<Q> unit) {

-		return unit.transform(E3);

-	}

-

-	/**

-	 * <p>

-	 * nooRaayiram

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>5</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e5)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> nooRaayiram(Unit<Q> unit) {

-		return unit.transform(E5);

-	}

-

-	static final RationalConverter E5 = new RationalConverter(

-			BigInteger.TEN.pow(5), BigInteger.ONE);

-

-	/**

-	 * <p>

-	 * thoLLunn

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>9</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e9)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> thoLLunn(Unit<Q> unit) {

-		return unit.transform(E9);

-	}

-

-	/**

-	 * <p>

-	 * eegiyam

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>12</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e12)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> eegiyam(Unit<Q> unit) {

-		return unit.transform(E12);

-	}

-

-	/**

-	 * <p>

-	 * neLai

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>15</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e15)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> neLai(Unit<Q> unit) {

-		return unit.transform(E15);

-	}

-

-	/**

-	 * <p>

-	 * iLanji

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>18</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e18)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> iLanji(Unit<Q> unit) {

-		return unit.transform(E18);

-	}

-

-	/**

-	 * <p>

-	 * veLLam

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>20</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e20)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> veLLam(Unit<Q> unit) {

-		return unit.transform(E20);

-	}

-	

-	/**

-	 * <p>

-	 * aambal

-	 * </p>

-	 * Returns the specified unit multiplied by the factor

-	 * <code>10<sup>21</sup></code>

-	 * 

-	 * @param unit

-	 *            any unit.

-	 * @return <code>unit.times(1e21)</code>.

-	 */

-	public static final <Q extends Quantity<Q>> Unit<Q> aambal(Unit<Q> unit) {

-		return unit.transform(E21);

-	}

-	

-	public static final class Sanskrit {

-		/**

-		 * <p>

-		 * ONDRU -one

-		 * </p>

-		 * Sanskrit translation for {@link #onRu}.

-		 */

-		public static final <Q extends Quantity<Q>> Unit<Q> ONDRU (Unit<Q> unit) {

-			return onRu(unit);

-		}

-		

-		/**

-		 * <p>

-		 * PATHU -ten

-		 * </p>

-		 * Sanskrit translation for {@link #patthu}.

-		 */

-		public static final <Q extends Quantity<Q>> Unit<Q> PATHU(Unit<Q> unit) {

-			return patthu(unit);

-		}

-	}

-

-	// Holds prefix converters (optimization).

-	private static RationalConverter E21 = new RationalConverter(

-			BigInteger.TEN.pow(21), BigInteger.ONE);

-	private static RationalConverter E20 = new RationalConverter(

-			BigInteger.TEN.pow(20), BigInteger.ONE);

-	private static RationalConverter E18 = new RationalConverter(

-			BigInteger.TEN.pow(18), BigInteger.ONE);

-	private static RationalConverter E15 = new RationalConverter(

-			BigInteger.TEN.pow(15), BigInteger.ONE);

-	private static RationalConverter E12 = new RationalConverter(

-			BigInteger.TEN.pow(12), BigInteger.ONE);

-	private static RationalConverter E9 = new RationalConverter(

-			BigInteger.TEN.pow(9), BigInteger.ONE);

-	private static RationalConverter E3 = new RationalConverter(

-			BigInteger.TEN.pow(3), BigInteger.ONE);

-	private static RationalConverter E2 = new RationalConverter(

-			BigInteger.TEN.pow(2), BigInteger.ONE);

-	private static RationalConverter E1 = new RationalConverter(

-			BigInteger.TEN.pow(1), BigInteger.ONE);

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/USCustomary.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/USCustomary.java
deleted file mode 100644
index 972bd1b..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/USCustomary.java
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
- * Copyright (c) 2005, 2017, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil - initial API and implementation
- */
-package org.eclipse.uomo.units.impl.system;
-
-import static org.eclipse.uomo.units.SI.*;
-import static org.eclipse.uomo.units.impl.system.MetricPrefix.MICRO;
-
-import org.eclipse.uomo.units.AbstractSystemOfUnits;
-import org.eclipse.uomo.units.AbstractUnit;
-import org.eclipse.uomo.units.Messages;
-import org.eclipse.uomo.units.SI;
-import org.eclipse.uomo.units.impl.AlternateUnit;
-import org.eclipse.uomo.units.impl.ProductUnit;
-import javax.measure.quantity.Angle;
-import javax.measure.quantity.Area;
-import javax.measure.quantity.Energy;
-import javax.measure.quantity.Length;
-import javax.measure.quantity.Mass;
-import javax.measure.quantity.Power;
-import javax.measure.quantity.Temperature;
-import javax.measure.quantity.Time;
-import javax.measure.quantity.Speed;
-import javax.measure.quantity.Volume;
-import javax.measure.spi.SystemOfUnits;
-import javax.measure.Unit;
-import systems.uom.quantity.Information;
-
-/**
- * <p>
- * This class contains units from the United States customary system.
- * </p>
- * <p>
- * 
- * @noextend This class is not intended to be extended by clients.
- * 
- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.16, $Date: 2017-12-25 $
- * @see <a
- *      href="http://en.wikipedia.org/wiki/United_States_customary_units">Wikipedia:
- *      United State Customary Units</a>
- */
-public final class USCustomary extends AbstractSystemOfUnits {
-
-	/**
-	 * Default constructor (prevents this class from being instantiated).
-	 */
-	private USCustomary() {
-	}
-
-	/**
-	 * Returns the unique instance of this class.
-	 * 
-	 * @return the USCustomary instance.
-	 */
-	public static SystemOfUnits getInstance() {
-		return INSTANCE;
-	}
-
-	private static final USCustomary INSTANCE = new USCustomary();
-
-	// //////////
-	// Length //
-	// //////////
-	/**
-	 * US name for {@link SI#METRE}.
-	 */
-	public static final Unit<Length> METER = METRE;
-
-	/**
-	 * A unit of length equal to <code>0.3048 m</code> (standard name
-	 * <code>ft</code>).
-	 */
-	public static final Unit<Length> FOOT = addUnit(METER.multiply(3048)
-			.divide(10000));
-
-	/**
-	 * A unit of length equal to <code>1200/3937 m</code> (standard name
-	 * <code>foot_survey_us</code>). See also: <a
-	 * href="http://www.sizes.com/units/foot.htm">foot</a>
-	 */
-	public static final Unit<Length> FOOT_SURVEY = addUnit(METER.multiply(1200)
-			.divide(3937));
-
-	/**
-	 * A unit of length equal to <code>0.9144 m</code> (standard name
-	 * <code>yd</code>).
-	 */
-	public static final Unit<Length> YARD = addUnit(FOOT.multiply(3));
-
-	/**
-	 * A unit of length equal to <code>0.0254 m</code> (standard name
-	 * <code>in</code>).
-	 */
-	public static final Unit<Length> INCH = addUnit(FOOT.divide(12));
-
-	/**
-	 * A unit of length equal to <code>1609.344 m</code> (standard name
-	 * <code>mi</code>).
-	 */
-	public static final Unit<Length> MILE = addUnit(METER.multiply(1609344)
-			.divide(1000));
-
-	/**
-	 * A unit of length equal to the distance that light travels in one year
-	 * through a vacuum (standard name <code>ly</code>).
-	 */
-	public static final Unit<Length> LIGHT_YEAR = addUnit(METRE
-			.multiply(9.460528405e15));
-	
-	/**
-	 * A unit of length equal to <code>1852.0 m</code> (standard name
-	 * <code>nmi</code>).
-	 */
-	public static final Unit<Length> NAUTICAL_MILE = addUnit(METER
-			.multiply(1852));
-
-	// ////////
-	// Mass //
-	// ////////
-
-	/**
-	 * A unit of mass equal to <code>453.59237 grams</code> (avoirdupois pound,
-	 * standard name <code>lb</code>).
-	 */
-	public static final Unit<Mass> POUND = addUnit(KILOGRAM.multiply(45359237)
-			.divide(100000000), Messages.US_lb_name);
-
-	/**
-	 * A unit of mass equal to <code>1 / 16 {@link #POUND}</code> (standard name
-	 * <code>oz</code>).
-	 */
-	public static final Unit<Mass> OUNCE = addUnit(POUND.divide(16));
-
-	/**
-	 * A unit of mass equal to <code>2000 {@link #POUND}</code> (short ton,
-	 * standard name <code>ton</code>).
-	 */
-	public static final Unit<Mass> TON = addUnit(POUND.multiply(2000));
-
-	// ///////////////
-	// Temperature //
-	// ///////////////
-
-	/**
-	 * A unit of temperature equal to <code>5/9 °K</code> (standard name
-	 * <code>°R</code>).
-	 */
-	public static final Unit<Temperature> RANKINE = addUnit(KELVIN.multiply(5)
-			.divide(9));
-
-	/**
-	 * A unit of temperature equal to degree Rankine minus
-	 * <code>459.67 °R</code> (standard name <code>°F</code>).
-	 * 
-	 * @see #RANKINE
-	 */
-	public static final Unit<Temperature> FAHRENHEIT = addUnit(RANKINE
-			.shift(459.67));
-
-	// /////////
-	// Angle //
-	// /////////
-
-	/**
-	 * A unit of angle equal to a full circle or <code>2<i>&pi;</i>
-	 * {@link SI#RADIAN}</code> (standard name <code>rev</code>).
-	 */
-	public static final Unit<Angle> REVOLUTION = addUnit(RADIAN.multiply(2)
-			.multiply(Math.PI).asType(Angle.class));
-
-	/**
-	 * A unit of angle equal to <code>1/360 {@link #REVOLUTION}</code> (standard
-	 * name <code>deg</code>).
-	 */
-	public static final Unit<Angle> DEGREE_ANGLE = addUnit(REVOLUTION
-			.divide(360));
-
-	/**
-	 * A unit of angle equal to <code>1/60 {@link #DEGREE_ANGLE}</code>
-	 * (standard name <code>'</code>).
-	 */
-	public static final Unit<Angle> MINUTE_ANGLE = addUnit(DEGREE_ANGLE
-			.divide(60));
-
-	/**
-	 * A unit of angle equal to <code>1/60 {@link #MINUTE_ANGLE}</code>
-	 * (standard name <code>"</code>).
-	 */
-	public static final Unit<Angle> SECOND_ANGLE = addUnit(MINUTE_ANGLE
-			.divide(60));
-
-	/**
-	 * A unit of angle equal to <code>0.01 {@link SI#RADIAN}</code> (standard
-	 * name <code>centiradian</code>).
-	 */
-	public static final Unit<Angle> CENTIRADIAN = addUnit(RADIAN.divide(100));
-
-	/**
-	 * A unit of angle measure equal to <code>1/400 {@link #REVOLUTION}</code>
-	 * (standard name <code>grade</code> ).
-	 */
-	public static final Unit<Angle> GRADE = addUnit(REVOLUTION.divide(400));
-	
-	// ////////////
-	// TimeUnit //
-	// ////////////
-	/**
-	 * A unit of time equal to <code>60 s</code> (standard name <code>min</code>
-	 * ).
-	 */
-	public static final Unit<Time> MINUTE = addUnit(SECOND.multiply(60));
-
-	/**
-	 * A unit of duration equal to <code>60 {@link #MINUTE}</code> (standard
-	 * name <code>h</code>).
-	 */
-	public static final Unit<Time> HOUR = addUnit(MINUTE.multiply(60));
-
-	// ////////////
-	// Speed //
-	// ////////////
-	/**
-	 * A unit of Speed expressing the number of {@link #FOOT feet} per
-	 * {@link SI#SECOND second}.
-	 */
-	public static final Unit<Speed> FEET_PER_SECOND = addUnit(
-			FOOT.divide(SECOND)).asType(Speed.class);
-
-	/**
-	 * A unit of Speed expressing the number of international {@link #MILE
-	 * miles} per {@link #HOUR hour} (abbreviation <code>mph</code>).
-	 */
-	public static final Unit<Speed> MILES_PER_HOUR = addUnit(
-			MILE.divide(HOUR)).asType(Speed.class);
-
-	/**
-	 * A unit of Speed expressing the number of {@link #NAUTICAL_MILE
-	 * nautical miles} per {@link #HOUR hour} (abbreviation <code>kn</code>).
-	 */
-	public static final Unit<Speed> KNOT = addUnit(
-			NAUTICAL_MILE.divide(HOUR)).asType(Speed.class);
-
-	// ////////
-	// Area //
-	// ////////
-
-	/**
-	 * A unit of area (standard name <code>sft</code>
-	 * ).
-	 */
-	public static final Unit<Area> SQUARE_FOOT = addUnit(new ProductUnit<Area>(
-			(AbstractUnit<?>) FOOT.multiply(FOOT)));
-
-	/**
-	 * A unit of area equal to <code>100 m²</code> (standard name <code>a</code>
-	 * ).
-	 */
-	public static final Unit<Area> ARE = addUnit(SQUARE_METRE.multiply(100));
-	
-	/**
-	 * A unit of area equal to <code>100 {@link #ARE}</code> (standard name
-	 * <code>ha</code>).
-	 */
-	static final Unit<Area> HECTARE = addUnit(ARE.multiply(100)); // Exact.
-	
-	// ///////////////
-	// Data Amount //
-	// ///////////////
-	/**
-	 * The unit for binary information (<code>bit</code>).
-	 */
-	public static final Unit<Information> BIT = addUnit(new AlternateUnit<Information>(
-			 AbstractUnit.ONE, Messages.SI_bit));
-
-	/**
-	 * A unit of data amount equal to <code>8 {@link SI#BIT}</code> (BinarY
-	 * TErm, standard name <code>byte</code>).
-	 */
-	public static final Unit<Information> BYTE = addUnit(BIT.multiply(8));
-
-	/**
-	 * Equivalent {@link #BYTE}
-	 */
-	public static final Unit<Information> OCTET = BYTE;
-
-	// //////////
-	// Energy //
-	// //////////
-
-	/**
-	 * A unit of energy equal to one electron-volt (standard name
-	 * <code>eV</code>, also recognized <code>keV, MeV, GeV</code>).
-	 */
-	public static final Unit<Energy> ELECTRON_VOLT = addUnit(JOULE
-			.multiply(1.602176462e-19));
-	
-	// //////////
-	// Power   //
-	// //////////
-	
-	/**
-	 * Horsepower (HP) is the name of several units of measurement of power.
-	 * The most common definitions equal between 735.5 and 750 watts.
-	 * Horsepower was originally defined to compare the output of steam engines with the power of draft horses. 
-	 * The unit was widely adopted to measure the output of piston engines, turbines, electric motors, and other machinery. The definition of the unit varied between geographical regions. Most countries now use the SI unit watt for measurement of power. With the implementation of the EU Directive 80/181/EEC on January 1, 2010, the use of horsepower in the EU is only permitted as supplementary unit.
-	 */
-	public static final Unit<Power> HORSEPOWER = addUnit(WATT.multiply(735.499));
-
-	// //////////
-	// Volume //
-	// //////////
-	/**
-	 * A unit of volume equal to one cubic decimeter (default label
-	 * <code>L</code>, also recognized <code>µL, mL, cL, dL</code>).
-	 */
-	public static final Unit<Volume> LITER = addUnit(CUBIC_METRE.divide(1000));
-
-	/**
-	 * A unit of volume equal to one cubic inch (<code>in³</code>).
-	 */
-	public static final Unit<Volume> CUBIC_INCH = addUnit(INCH.pow(3).asType(
-			Volume.class));
-
-	/**
-	 * A unit of volume equal to one US dry gallon. (standard name
-	 * <code>gallon_dry_us</code>).
-	 */
-	public static final Unit<Volume> GALLON_DRY = addUnit(CUBIC_INCH.multiply(
-			2688025).divide(10000));
-
-	/**
-	 * A unit of volume equal to one US gallon, Liquid Unit. The U.S. liquid
-	 * gallon is based on the Queen Anne or Wine gallon occupying 231 cubic
-	 * inches (standard name <code>gal</code>).
-	 */
-	public static final Unit<Volume> GALLON_LIQUID = addUnit(CUBIC_INCH
-			.multiply(231));
-
-	/**
-	 * A unit of volume equal to <code>1 / 128 {@link #GALLON_LIQUID}</code>
-	 * (standard name <code>oz_fl</code>).
-	 */
-	public static final Unit<Volume> OUNCE_LIQUID = addUnit(GALLON_LIQUID
-			.divide(128));
-
-	/**
-	 * A unit of volume <code>~ 1 drop or 0.95 grain of water </code> (standard
-	 * name <code>min</code>).
-	 */
-	public static final Unit<Volume> MINIM = addUnit(MICRO(LITER).multiply(
-			61.61152d));
-
-	/**
-	 * A unit of volume equal to <code>60 {@link #MINIM}</code> (standard name
-	 * <code>fl dr</code>).
-	 */
-	public static final Unit<Volume> FLUID_DRAM = addUnit(MINIM.multiply(60));
-
-	/**
-	 * A unit of volume equal to <code>80 {@link #MINIM}</code> (standard name
-	 * <code>tsp</code>).
-	 */
-	public static final Unit<Volume> TEASPOON = addUnit(MINIM.multiply(80));
-
-	/**
-	 * A unit of volume equal to <code>3 {@link #TEASPOON}</code> (standard name
-	 * <code>Tbsp</code>).
-	 */
-	public static final Unit<Volume> TABLESPOON = addUnit(TEASPOON.multiply(3));
-
-	/**
-	 * A unit of volume equal to <code>238.4810 {@link #LITER}</code> (standard
-	 * name <code>bbl</code>).
-	 */
-	public static final Unit<Volume> OIL_BARREL = addUnit(LITER
-			.multiply(238.4810d));
-
-	/**
-	 * Holds the international foot: 0.3048 m exact.
-	 */
-	// private static final int INTERNATIONAL_FOOT_DIVIDEND = 3048;
-
-	// private static final int INTERNATIONAL_FOOT_DIViSOR = 10000;
-
-
-
-	@Override
-	public String getName() {
-		return getClass().getSimpleName();
-	}
-}
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/Units.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/Units.java
deleted file mode 100644
index 8037edd..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/impl/system/Units.java
+++ /dev/null
@@ -1,459 +0,0 @@
-/**

- * Copyright (c) 2005, 2017, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.impl.system;

-

-import javax.measure.Quantity;

-import javax.measure.Unit;

-import javax.measure.quantity.Acceleration;

-import javax.measure.quantity.AmountOfSubstance;

-import javax.measure.quantity.Angle;

-import javax.measure.quantity.Area;

-import javax.measure.quantity.CatalyticActivity;

-import javax.measure.quantity.Dimensionless;

-import javax.measure.quantity.ElectricCapacitance;

-import javax.measure.quantity.ElectricCharge;

-import javax.measure.quantity.ElectricConductance;

-import javax.measure.quantity.ElectricCurrent;

-import javax.measure.quantity.ElectricInductance;

-import javax.measure.quantity.ElectricPotential;

-import javax.measure.quantity.ElectricResistance;

-import javax.measure.quantity.Energy;

-import javax.measure.quantity.Force;

-import javax.measure.quantity.Frequency;

-import javax.measure.quantity.Illuminance;

-import javax.measure.quantity.Length;

-import javax.measure.quantity.LuminousFlux;

-import javax.measure.quantity.LuminousIntensity;

-import javax.measure.quantity.MagneticFlux;

-import javax.measure.quantity.MagneticFluxDensity;

-import javax.measure.quantity.Mass;

-import javax.measure.quantity.Power;

-import javax.measure.quantity.Pressure;

-import javax.measure.quantity.RadiationDoseAbsorbed;

-import javax.measure.quantity.RadiationDoseEffective;

-import javax.measure.quantity.Radioactivity;

-import javax.measure.quantity.SolidAngle;

-import javax.measure.quantity.Speed;

-import javax.measure.quantity.Temperature;

-import javax.measure.quantity.Time;

-import javax.measure.quantity.Volume;

-import javax.measure.spi.SystemOfUnits;

-

-import org.eclipse.uomo.units.AbstractSystemOfUnits;

-import org.eclipse.uomo.units.AbstractUnit;

-import org.eclipse.uomo.units.impl.AlternateUnit;

-import org.eclipse.uomo.units.impl.BaseUnit;

-import org.eclipse.uomo.units.impl.ProductUnit;

-import org.eclipse.uomo.units.impl.QuantityDimension;

-import org.eclipse.uomo.units.impl.TransformedUnit;

-import org.eclipse.uomo.units.impl.converter.AddConverter;

-import org.eclipse.uomo.units.impl.converter.RationalConverter;

-

-import tec.uom.lib.common.function.Nameable;

-

-/**

- * <p>

- * This class defines commonly used units.

- *

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @version 1.0.4, July 30, 2017

- * @since 1.0

- */

-public class Units extends AbstractSystemOfUnits implements Nameable {

-

-  public static final String SYSTEM_NAME = "Units"; // This is for ME

-

-  // compatibility, since

-  // Class.getSimpleName()

-  // isn't available.

-

-  protected Units() {

-  }

-

-  private static final Units INSTANCE = new Units();

-

-  // //////////////

-  // BASE UNITS //

-  // //////////////

-

-  /**

-   * The SI base unit for electric current quantities (standard name <code>A</code>). The Ampere is that constant current which, if maintained in two

-   * straight parallel conductors of infinite length, of negligible circular cross-section, and placed 1 meter apart in vacuum, would produce between

-   * these conductors a force equal to 2 * 10-7 newton per meter of length. It is named after the French physicist Andre Ampere (1775-1836).

-   */

-  public static final Unit<ElectricCurrent> AMPERE = addUnit(new BaseUnit<ElectricCurrent>("A", QuantityDimension.ELECTRIC_CURRENT),

-      ElectricCurrent.class);

-

-  /**

-   * The SI base unit for luminous intensity quantities (standard name <code>cd</code>). The candela is the luminous intensity, in a given direction,

-   * of a source that emits monochromatic radiation of frequency 540 * 1012 hertz and that has a radiant intensity in that direction of 1/683 watt per

-   * steradian

-   * 

-   * @see <a href="http://en.wikipedia.org/wiki/Candela"> Wikipedia: Candela</a>

-   */

-  public static final Unit<LuminousIntensity> CANDELA = addUnit(new BaseUnit<LuminousIntensity>("cd", QuantityDimension.LUMINOUS_INTENSITY),

-      LuminousIntensity.class);

-

-  /**

-   * The SI base unit for thermodynamic temperature quantities (standard name <code>K</code>). The kelvin is the 1/273.16th of the thermodynamic

-   * temperature of the triple point of water. It is named after the Scottish mathematician and physicist William Thomson 1st Lord Kelvin (1824-1907)

-   */

-  public static final Unit<Temperature> KELVIN = addUnit(new BaseUnit<Temperature>("K", QuantityDimension.TEMPERATURE), Temperature.class);

-

-  /**

-   * The SI base unit for mass quantities (standard name <code>kg</code>). It is the only SI unit with a prefix as part of its name and symbol. The

-   * kilogram is equal to the mass of an international prototype in the form of a platinum-iridium cylinder kept at Sevres in France.

-   * 

-   * @see #GRAM

-   */

-  public static final Unit<Mass> KILOGRAM = addUnit(new BaseUnit<Mass>("kg", QuantityDimension.MASS), Mass.class);

-

-  /**

-   * The SI base unit for length quantities (standard name <code>m</code>). One metre was redefined in 1983 as the distance traveled by light in a

-   * vacuum in 1/299,792,458 of a second.

-   */

-  public static final Unit<Length> METRE = addUnit(new BaseUnit<Length>("m", QuantityDimension.LENGTH), Length.class);

-

-  /**

-   * The SI base unit for amount of substance quantities (standard name <code>mol</code>). The mole is the amount of substance of a system which

-   * contains as many elementary entities as there are atoms in 0.012 kilogram of carbon 12.

-   */

-  public static final Unit<AmountOfSubstance> MOLE = addUnit(new BaseUnit<AmountOfSubstance>("mol", QuantityDimension.AMOUNT_OF_SUBSTANCE),

-      AmountOfSubstance.class);

-

-  /**

-   * The SI base unit for duration quantities (standard name <code>s</code>). It is defined as the duration of 9,192,631,770 cycles of radiation

-   * corresponding to the transition between two hyperfine levels of the ground state of cesium (1967 Standard).

-   */

-  public static final Unit<Time> SECOND = addUnit(new BaseUnit<Time>("s", QuantityDimension.TIME), Time.class);

-

-  // //////////////////////////////

-  // SI DERIVED ALTERNATE UNITS //

-  // //////////////////////////////

-

-  /**

-   * The SI derived unit for mass quantities (standard name <code>g</code>). The base unit for mass quantity is {@link #KILOGRAM}.

-   */

-  public static final Unit<Mass> GRAM = addUnit(KILOGRAM.divide(1000));

-

-  /**

-   * The SI unit for plane angle quantities (standard name <code>rad</code>). One radian is the angle between two radii of a circle such that the

-   * length of the arc between them is equal to the radius.

-   */

-  public static final Unit<Angle> RADIAN = addUnit(new AlternateUnit<Angle>(AbstractUnit.ONE, "rad"), Angle.class);

-

-  /**

-   * The SI unit for solid angle quantities (standard name <code>sr</code>). One steradian is the solid angle subtended at the center of a sphere by

-   * an area on the surface of the sphere that is equal to the radius squared. The total solid angle of a sphere is 4*Pi steradians.

-   */

-  public static final Unit<SolidAngle> STERADIAN = addUnit(new AlternateUnit<SolidAngle>(AbstractUnit.ONE, "sr"), SolidAngle.class);

-

-  /**

-   * The SI unit for frequency (standard name <code>Hz</code>). A unit of frequency equal to one cycle per second. After Heinrich Rudolf Hertz

-   * (1857-1894), German physicist who was the first to produce radio waves artificially.

-   */

-  public static final Unit<Frequency> HERTZ = addUnit(new AlternateUnit<Frequency>(AbstractUnit.ONE.divide(SECOND), "Hz"), Frequency.class);

-

-  /**

-   * The SI unit for force (standard name <code>N</code>). One newton is the force required to give a mass of 1 kilogram an Force of 1 metre per

-   * second per second. It is named after the English mathematician and physicist Sir Isaac Newton (1642-1727).

-   */

-  public static final Unit<Force> NEWTON = addUnit(new AlternateUnit<Force>(METRE.multiply(KILOGRAM).divide(SECOND.pow(2)), "N"), Force.class);

-

-  /**

-   * The SI unit for pressure, stress (standard name <code>Pa</code>). One pascal is equal to one newton per square meter. It is named after the

-   * French philosopher and mathematician Blaise Pascal (1623-1662).

-   */

-  public static final Unit<Pressure> PASCAL = addUnit(new AlternateUnit<Pressure>(NEWTON.divide(METRE.pow(2)), "Pa"), Pressure.class);

-

-  /**

-   * The SI unit for energy, work, quantity of heat (<code>J</code>). One joule is the amount of work done when an applied force of 1 newton moves

-   * through a distance of 1 metre in the direction of the force. It is named after the English physicist James Prescott Joule (1818-1889).

-   */

-  public static final Unit<Energy> JOULE = addUnit(new AlternateUnit<Energy>(NEWTON.multiply(METRE), "J"), Energy.class);

-

-  /**

-   * The SI unit for power, radiant, flux (standard name <code>W</code>). One watt is equal to one joule per second. It is named after the British

-   * scientist James Watt (1736-1819).

-   */

-  public static final Unit<Power> WATT = addUnit(new AlternateUnit<Power>(JOULE.divide(SECOND), "W"), Power.class);

-

-  /**

-   * The SI unit for electric charge, quantity of electricity (standard name <code>C</code>). One Coulomb is equal to the quantity of charge

-   * transferred in one second by a steady current of one ampere. It is named after the French physicist Charles Augustin de Coulomb (1736-1806).

-   */

-  public static final Unit<ElectricCharge> COULOMB = addUnit(new AlternateUnit<ElectricCharge>(SECOND.multiply(AMPERE), "C"), ElectricCharge.class);

-

-  /**

-   * The SI unit for electric potential difference, electromotive force (standard name <code>V</code>). One Volt is equal to the difference of

-   * electric potential between two points on a conducting wire carrying a constant current of one ampere when the power dissipated between the points

-   * is one watt. It is named after the Italian physicist Count Alessandro Volta (1745-1827).

-   */

-  public static final Unit<ElectricPotential> VOLT = addUnit(new AlternateUnit<ElectricPotential>(WATT.divide(AMPERE), "V"), ElectricPotential.class);

-

-  /**

-   * The SI unit for capacitance (standard name <code>F</code>). One Farad is equal to the capacitance of a capacitor having an equal and opposite

-   * charge of 1 coulomb on each plate and a potential difference of 1 volt between the plates. It is named after the British physicist and chemist

-   * Michael Faraday (1791-1867).

-   */

-  public static final Unit<ElectricCapacitance> FARAD = addUnit(new AlternateUnit<ElectricCapacitance>(COULOMB.divide(VOLT), "F"),

-      ElectricCapacitance.class);

-

-  /**

-   * The SI unit for electric resistance (standard name <code>Ohm</code>). One Ohm is equal to the resistance of a conductor in which a current of one

-   * ampere is produced by a potential of one volt across its terminals. It is named after the German physicist Georg Simon Ohm (1789-1854).

-   */

-  public static final Unit<ElectricResistance> OHM = addUnit(new AlternateUnit<ElectricResistance>(VOLT.divide(AMPERE), "Ω"),

-      ElectricResistance.class);

-

-  /**

-   * The SI unit for electric conductance (standard name <code>S</code>). One Siemens is equal to one ampere per volt. It is named after the German

-   * engineer Ernst Werner von Siemens (1816-1892).

-   */

-  public static final Unit<ElectricConductance> SIEMENS = addUnit(new AlternateUnit<ElectricConductance>(AMPERE.divide(VOLT), "S"),

-      ElectricConductance.class);

-

-  /**

-   * The SI unit for magnetic flux (standard name <code>Wb</code>). One Weber is equal to the magnetic flux that in linking a circuit of one turn

-   * produces in it an electromotive force of one volt as it is uniformly reduced to zero within one second. It is named after the German physicist

-   * Wilhelm Eduard Weber (1804-1891).

-   */

-  public static final Unit<MagneticFlux> WEBER = addUnit(new AlternateUnit<MagneticFlux>(VOLT.multiply(SECOND), "Wb"), MagneticFlux.class);

-

-  /**

-   * The alternate unit for magnetic flux density (standard name <code>T</code>). One Tesla is equal equal to one weber per square metre. It is named

-   * after the Serbian-born American electrical engineer and physicist Nikola Tesla (1856-1943).

-   */

-  public static final Unit<MagneticFluxDensity> TESLA = addUnit(new AlternateUnit<MagneticFluxDensity>(WEBER.divide(METRE.pow(2)), "T"),

-      MagneticFluxDensity.class);

-

-  /**

-   * The alternate unit for inductance (standard name <code>H</code>). One Henry is equal to the inductance for which an induced electromotive force

-   * of one volt is produced when the current is varied at the rate of one ampere per second. It is named after the American physicist Joseph Henry

-   * (1791-1878).

-   */

-  public static final Unit<ElectricInductance> HENRY = addUnit(new AlternateUnit<ElectricInductance>(WEBER.divide(AMPERE), "H"),

-      ElectricInductance.class);

-

-  /**

-   * The SI unit for Celsius temperature (standard name <code>Cel</code>). This is a unit of temperature such as the freezing point of water (at one

-   * atmosphere of pressure) is 0 Cel, while the boiling point is 100 Cel.

-   */

-  public static final Unit<Temperature> CELSIUS = addUnit(new TransformedUnit<Temperature>(KELVIN, new AddConverter(273.15)));

-  // Not mapping to Temperature since temperature is mapped to Kelvin.

-

-  /**

-   * The SI unit for activity of a radionuclide (standard name <code>Bq</code> ). One becquerel is the radiation caused by one disintegration per

-   * second. It is named after the French physicist, Antoine-Henri Becquerel (1852-1908).

-   */

-  public static final Unit<Radioactivity> BECQUEREL = addUnit(new AlternateUnit<Radioactivity>(AbstractUnit.ONE.divide(SECOND), "Bq"),

-      Radioactivity.class);

-

-  /**

-   * The SI unit for absorbed dose, specific energy (imparted), kerma (standard name <code>Gy</code>). One gray is equal to the dose of one joule of

-   * energy absorbed per one kilogram of matter. It is named after the British physician L. H. Gray (1905-1965).

-   */

-  public static final Unit<RadiationDoseAbsorbed> GRAY = addUnit(new AlternateUnit<RadiationDoseAbsorbed>(JOULE.divide(KILOGRAM), "Gy"),

-      RadiationDoseAbsorbed.class);

-

-  /**

-   * The SI unit for dose equivalent (standard name <code>Sv</code>). One Sievert is equal is equal to the actual dose, in grays, multiplied by a

-   * "quality factor" which is larger for more dangerous forms of radiation. It is named after the Swedish physicist Rolf Sievert (1898-1966).

-   */

-  public static final Unit<RadiationDoseEffective> SIEVERT = addUnit(new AlternateUnit<RadiationDoseEffective>(JOULE.divide(KILOGRAM), "Sv"),

-      RadiationDoseEffective.class);

-

-  /**

-   * The SI unit for catalytic activity (standard name <code>kat</code>).

-   */

-  public static final Unit<CatalyticActivity> KATAL = addUnit(new AlternateUnit<CatalyticActivity>(MOLE.divide(SECOND), "kat"),

-      CatalyticActivity.class);

-

-  // ////////////////////////////

-  // SI DERIVED PRODUCT UNITS //

-  // ////////////////////////////

-

-  /**

-   * The SI unit for speed quantities (standard name <code>m/s</code>).

-   */

-  public static final Unit<Speed> METRE_PER_SECOND = addUnit(new ProductUnit<Speed>(METRE.divide(SECOND)), Speed.class);

-

-  /**

-   * The SI unit for acceleration quantities (standard name <code>m/s2</code> ).

-   */

-  public static final Unit<Acceleration> METRE_PER_SQUARE_SECOND = addUnit(new ProductUnit<Acceleration>(METRE_PER_SECOND.divide(SECOND)),

-      Acceleration.class);

-

-  /**

-   * The SI unit for area quantities (standard name <code>m2</code>).

-   */

-  public static final Unit<Area> SQUARE_METRE = addUnit(new ProductUnit<Area>(METRE.multiply(METRE)), Area.class);

-

-  /**

-   * The SI unit for volume quantities (standard name <code>m3</code>).

-   */

-  public static final Unit<Volume> CUBIC_METRE = addUnit(new ProductUnit<Volume>(SQUARE_METRE.multiply(METRE)), Volume.class);

-

-  /**

-   * A unit of Speed expressing the number of international {@link #KILOMETRE kilometres} per {@link #HOUR hour} (abbreviation <code>km/h</code>).

-   */

-  public static final Unit<Speed> KILOMETRE_PER_HOUR = addUnit(METRE_PER_SECOND.multiply(0.277778d)).asType(Speed.class);

-

-  /**

-   * The SI unit for luminous flux (standard name <code>lm</code>). One Lumen is equal to the amount of light given out through a solid angle by a

-   * source of one candela intensity radiating equally in all directions.

-   */

-  public static final Unit<LuminousFlux> LUMEN = addUnit(new AlternateUnit<LuminousFlux>(CANDELA.multiply(STERADIAN), "lm"), LuminousFlux.class);

-

-  /**

-   * The SI unit for illuminance (standard name <code>lx</code>). One Lux is equal to one lumen per square metre.

-   */

-  public static final Unit<Illuminance> LUX = addUnit(new AlternateUnit<Illuminance>(LUMEN.divide(METRE.pow(2)), "lx"), Illuminance.class);

-

-  // ///////////////////////////////////////////////////////////////

-  // Units outside the SI that are accepted for use with the SI. //

-  // ///////////////////////////////////////////////////////////////

-

-  /**

-   * A dimensionless unit accepted for use with SI units (standard name <code>%</code>).

-   */

-  public static final Unit<Dimensionless> PERCENT = new TransformedUnit<Dimensionless>(AbstractUnit.ONE, new RationalConverter(1, 100));

-

-  /**

-   * A volume unit accepted for use with SI units (standard name <code>l</code>).

-   * 

-   * @see <a href="https://en.wikipedia.org/wiki/Litre"> Wikipedia: Litre</a>

-   */

-  public static final Unit<Volume> LITRE = AbstractSystemOfUnits.Helper.addUnit(INSTANCE.UNITS, new TransformedUnit<Volume>(CUBIC_METRE,

-      new RationalConverter(1, 1000)), "Litre", "l");

-

-  // ////////

-  // Time //

-  // ////////

-

-  /**

-   * A time unit accepted for use with SI units (standard name <code>min</code>).

-   */

-  public static final Unit<Time> MINUTE = new TransformedUnit<Time>(SECOND, RationalConverter.of(60, 1), "min");

-

-  /**

-   * A time unit accepted for use with SI units (standard name <code>h</code> ).

-   */

-  public static final Unit<Time> HOUR = new TransformedUnit<Time>(SECOND, RationalConverter.of(60 * 60, 1), "h");

-

-  /**

-   * A time unit accepted for use with SI units (standard name <code>d</code> ).

-   */

-  public static final Unit<Time> DAY = new TransformedUnit<Time>(SECOND, RationalConverter.of(24 * 60 * 60, 1), "d");

-

-  /**

-   * A unit of duration equal to 7 {@link #DAY} (standard name <code>week</code>).

-   */

-  public static final Unit<Time> WEEK = addUnit(DAY.multiply(7));

-

-  /**

-   * A time unit accepted for use with SI units (standard name <code>y</code> ).

-   */

-  public static final Unit<Time> YEAR = addUnit(Units.DAY.multiply(365.2525));

-  // using Gregorian year instead of Julian (365.25)

-

-  static {

-    // have to add AbstractUnit.ONE as Dimensionless, too

-    addUnit(AbstractUnit.ONE);

-    INSTANCE.quantityToUnit.put(Dimensionless.class, AbstractUnit.ONE);

-  }

-

-  // ///////////////////

-  // Collection View //

-  // ///////////////////

-

-  @Override

-  public String getName() {

-    return SYSTEM_NAME;

-  }

-

-  /**

-   * Returns the unique instance of this class.

-   * 

-   * @return the Imperial instance.

-   */

-  public static SystemOfUnits getInstance() {

-    return INSTANCE;

-  }

-

-  /**

-   * Adds a new unit not mapped to any specified quantity type.

-   *

-   * @param unit

-   *          the unit being added.

-   * @return <code>unit</code>.

-   */

-  protected static <U extends Unit<?>> U addUnit(U unit) {

-    INSTANCE.UNITS.add(unit);

-    return unit;

-  }

-

-  /**

-   * Adds a new unit and maps it to the specified quantity type.

-   *

-   * @param unit

-   *          the unit being added.

-   * @param type

-   *          the quantity type.

-   * @return <code>unit</code>.

-   */

-  private static <U extends AbstractUnit<?>> U addUnit(U unit, Class<? extends Quantity<?>> type) {

-    INSTANCE.UNITS.add(unit);

-    INSTANCE.quantityToUnit.put(type, unit);

-    return unit;

-  }

-

-  /**

-   * Adds a new unit not mapped to any specified quantity type and puts a text as symbol or label.

-   *

-   * @param unit

-   *          the unit being added.

-   * @param name

-   *          the string to use as name

-   * @param text

-   *          the string to use as label or symbol

-   * @param isLabel

-   *          if the string should be used as a label or not

-   * @return <code>unit</code>.

-   */

-  /*

-  private static <U extends Unit<?>> U addUnit(U unit, String name, String text, boolean isLabel) {

-    if (isLabel) {

-      SimpleUnitFormat.getInstance().label(unit, text);

-    }

-    if (name != null && unit instanceof AbstractUnit) {

-      return Helper.addUnit(INSTANCE.units, unit, name);

-    } else {

-      INSTANCE.units.add(unit);

-    }

-    return unit;

-  }

-  */

-  /**

-   * Adds a new unit not mapped to any specified quantity type and puts a text as symbol or label.

-   *

-   * @param unit

-   *          the unit being added.

-   * @param text

-   *          the string to use as label or symbol

-   * @param isLabel

-   *          if the string should be used as a label or not

-   * @return <code>unit</code>.

-   */

-  // private static <U extends Unit<?>> U addUnit(U unit, String text) {

-  // return addUnit(unit, null, text, true);

-  // }

-}
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/internal/MeasureAmount.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/internal/MeasureAmount.java
deleted file mode 100644
index 8807532..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/internal/MeasureAmount.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**

- * Copyright (c) 2005, 2014, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.units.internal;

-

-import com.ibm.icu.util.Measure;

-import com.ibm.icu.util.MeasureUnit;

-

-/**

- * Wrapper for ICU4J Measure type

- * @author Werner Keil

- *

- */

-public class MeasureAmount extends Measure {

-

-	protected MeasureAmount(Number number, MeasureUnit unit) {

-		super(number, unit);

-	}

-	

-	/**

-	 * Returns a new <type>MeasureAmount</type> with the given number and unit.

-	 * @param number the given number

-	 * @param unit the given unit

-	 * @return a new instance of <type>MeasureAmount</type>

-	 */

-	public static Measure of(Number number, MeasureUnit unit) {

-		return new MeasureAmount(number, unit);

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/internal/NonSI.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/internal/NonSI.java
deleted file mode 100644
index 23c8efd..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/internal/NonSI.java
+++ /dev/null
@@ -1,602 +0,0 @@
-/**

- * Copyright (c) 2005, 2013, Werner Keil, JScience and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Jean-Marie Dautelle - initial API and implementation

- */

-package org.eclipse.uomo.units.internal;

-

-import static org.eclipse.uomo.units.SI.AMPERE;

-import static org.eclipse.uomo.units.SI.BECQUEREL;

-import static org.eclipse.uomo.units.SI.BIT;

-import static org.eclipse.uomo.units.SI.COULOMB;

-import static org.eclipse.uomo.units.SI.GRAM;

-import static org.eclipse.uomo.units.SI.GRAY;

-import static org.eclipse.uomo.units.SI.JOULE;

-import static org.eclipse.uomo.units.SI.KELVIN;

-import static org.eclipse.uomo.units.SI.KILOGRAM;

-import static org.eclipse.uomo.units.SI.LUX;

-import static org.eclipse.uomo.units.SI.METRE;

-import static org.eclipse.uomo.units.SI.METRES_PER_SECOND;

-import static org.eclipse.uomo.units.SI.METRES_PER_SQUARE_SECOND;

-import static org.eclipse.uomo.units.SI.MOLE;

-import static org.eclipse.uomo.units.SI.NEWTON;

-import static org.eclipse.uomo.units.SI.PASCAL;

-import static org.eclipse.uomo.units.SI.RADIAN;

-import static org.eclipse.uomo.units.SI.SECOND;

-import static org.eclipse.uomo.units.SI.SIEVERT;

-import static org.eclipse.uomo.units.SI.SQUARE_METRE;

-import static org.eclipse.uomo.units.SI.STERADIAN;

-import static org.eclipse.uomo.units.SI.TESLA;

-import static org.eclipse.uomo.units.SI.WATT;

-import static org.eclipse.uomo.units.SI.WEBER;

-import static org.eclipse.uomo.units.SI.Prefix.*;

-

-import java.math.BigInteger;

-

-import org.eclipse.uomo.units.AbstractSystemOfUnits;

-import org.eclipse.uomo.units.AbstractUnit;

-import org.eclipse.uomo.units.SI;

-import org.eclipse.uomo.units.impl.converter.LogConverter;

-import org.eclipse.uomo.units.impl.converter.RationalConverter;

-import javax.measure.quantity.*;

-import javax.measure.Unit;

-

-/**

- * <p>

- * This class contains units that are not part of the International System of

- * Units, that is, they are outside the SI, but are important and widely used.

- * </p>

- * 

- * <p>

- * This is an internal collection of otherwise unassigned units used by

- * <b>UCUM</b> or similar systems.

- * </p>

- * <p>

- * This class is not intended to be implemented by clients.

- * </p>

- * 

- * @noimplement This class is not intended to be implemented by clients.

- * @noextend This class is not intended to be extended by clients.

- * 

- * @author <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>

- * @author <a href="mailto:units@catmedia.us">Werner Keil</a>

- * @version 1.17 ($Revision: 231 $), $Date: 2011-09-11 14:57:59 +0200 (So, 11 Sep

- *          2011) $

- */

-public final class NonSI extends AbstractSystemOfUnits {

-

-	/**

-	 * Holds the standard gravity constant: 9.80665 m/s² exact.

-	 */

-	private static final int STANDARD_GRAVITY_DIVIDEND = 980665;

-

-	private static final int STANDARD_GRAVITY_DIVISOR = 100000;

-

-	/**

-	 * Holds the avoirdupois pound: 0.45359237 kg exact

-	 */

-	public static final int AVOIRDUPOIS_POUND_DIVIDEND = 45359237;

-

-	public static final int AVOIRDUPOIS_POUND_DIVISOR = 100000000;

-

-	/**

-	 * Holds the Avogadro constant.

-	 */

-	private static final double AVOGADRO_CONSTANT = 6.02214199e23; // (1/mol).

-

-	/**

-	 * Holds the electric charge of one electron.

-	 */

-	private static final double ELEMENTARY_CHARGE = 1.602176462e-19; // (C).

-

-	/**

-	 * Default constructor (prevents this class from being instantiated).

-	 */

-	private NonSI() {

-	}

-

-	/**

-	 * Returns the unique instance of this class.

-	 * 

-	 * @return the NonSI instance.

-	 */

-	static NonSI getInstance() {

-		return INSTANCE;

-	}

-

-	private static final NonSI INSTANCE = new NonSI();

-

-	// /////////////////

-	// Dimensionless //

-	// /////////////////

-	/**

-	 * A dimensionless unit equals to <code>pi</code> (standard name

-	 * <code>Ï€</code>).

-	 */

-	static final Unit<Dimensionless> PI = addUnit(AbstractUnit.ONE

-			.multiply(StrictMath.PI));

-

-	/**

-	 * A dimensionless unit equals to <code>0.01</code> (standard name

-	 * <code>%</code>).

-	 */

-	static final Unit<Dimensionless> PERCENT = addUnit(AbstractUnit.ONE

-			.divide(100));

-

-	/**

-	 * A logarithmic unit used to describe a ratio (standard name

-	 * <code>dB</code>).

-	 */

-	static final Unit<Dimensionless> DECIBEL = addUnit(AbstractUnit.ONE

-			.transform(new LogConverter(10).inverse().concatenate(

-					new RationalConverter(BigInteger.ONE, BigInteger.TEN))));

-

-	// ///////////////////////

-	// Amount of substance //

-	// ///////////////////////

-	/**

-	 * A unit of amount of substance equals to one atom (standard name

-	 * <code>atom</code>).

-	 */

-	static final Unit<AmountOfSubstance> ATOM = addUnit(MOLE

-			.divide(AVOGADRO_CONSTANT));

-

-	// //////////

-	// Length //

-	// //////////

-

-	/**

-	 * A unit of length equal to <code>0.3048 m</code> (standard name

-	 * <code>ft</code>).

-	 */

-	static final Unit<Length> FOOT = addUnit(METRE.multiply(3048)

-			.divide(10000));

-	

-	/**

-	 * A unit of length equal to <code>0.0254 m</code> (standard name

-	 * <code>in</code>).

-	 */

-	static final Unit<Length> INCH = addUnit(FOOT.divide(12));

-	

-	/**

-	 * A unit of length equal to <code>1E-10 m</code> (standard name

-	 * <code>\u00C5ngstr\u00F6m</code>).

-	 */

-	static final Unit<Length> ANGSTROM = addUnit(METRE

-			.divide(10000000000L));

-

-	/**

-	 * A unit of length equal to the average distance from the center of the

-	 * Earth to the center of the Sun (standard name <code>ua</code>).

-	 */

-	static final Unit<Length> ASTRONOMICAL_UNIT = addUnit(METRE

-			.multiply(149597870691.0));

-

-	/**

-	 * A unit of length equal to the distance that light travels in one year

-	 * through a vacuum (standard name <code>ly</code>).

-	 */

-	static final Unit<Length> LIGHT_YEAR = addUnit(METRE

-			.multiply(9.460528405e15));

-

-	/**

-	 * A unit of length equal to the distance at which a star would appear to

-	 * shift its position by one arcsecond over the course the time (about 3

-	 * months) in which the Earth moves a distance of {@link #ASTRONOMICAL_UNIT}

-	 * in the direction perpendicular to the direction to the star (standard

-	 * name <code>pc</code>).

-	 */

-	static final Unit<Length> PARSEC = addUnit(METRE

-			.multiply(30856770e9));

-

-	/**

-	 * A unit of length equal to <code>0.013837 {@link #INCH}</code> exactly

-	 * (standard name <code>pt</code>).

-	 * 

-	 * @see #PIXEL

-	 */

-	static final Unit<Length> POINT = addUnit(INCH.multiply(13837)

-			.divide(1000000));

-

-	/**

-	 * A unit of length equal to <code>1/72 {@link #INCH}</code> (standard name

-	 * <code>pixel</code>). It is the American point rounded to an even 1/72

-	 * inch.

-	 * 

-	 * @see #POINT

-	 */

-	static final Unit<Length> PIXEL = addUnit(INCH.divide(72));

-

-	/**

-	 * Equivalent {@link #PIXEL}

-	 */

-	static final Unit<Length> COMPUTER_POINT = PIXEL;

-

-	// ////////////

-	// Duration //

-	// ////////////

-	/**

-	 * A unit of duration equal to <code>60 s</code> (standard name

-	 * <code>min</code>).

-	 */

-	static final Unit<Time> MINUTE = addUnit(SECOND.multiply(60));

-

-	/**

-	 * A unit of duration equal to <code>60 {@link #MINUTE}</code> (standard

-	 * name <code>h</code>).

-	 */

-	static final Unit<Time> HOUR = addUnit(MINUTE.multiply(60));

-

-	/**

-	 * A unit of duration equal to <code>24 {@link #HOUR}</code> (standard name

-	 * <code>d</code>).

-	 */

-	static final Unit<Time> DAY = addUnit(HOUR.multiply(24));

-

-	/**

-	 * A unit of duration equal to the time required for a complete rotation of

-	 * the earth in reference to any star or to the vernal equinox at the

-	 * meridian, equal to 23 hours, 56 minutes, 4.09 seconds (standard name

-	 * <code>day_sidereal</code>).

-	 */

-	static final Unit<Time> DAY_SIDEREAL = addUnit(SECOND

-			.multiply(86164.09));

-

-	/**

-	 * A unit of duration equal to 7 {@link #DAY} (standard name

-	 * <code>week</code>).

-	 */

-	static final Unit<Time> WEEK = addUnit(DAY.multiply(7));

-

-	/**

-	 * A unit of duration equal to 365 {@link #DAY} (standard name

-	 * <code>year</code>).

-	 */

-	static final Unit<Time> YEAR_CALENDAR = addUnit(DAY.multiply(365));

-

-	/**

-	 * A unit of duration equal to one complete revolution of the earth about

-	 * the sun, relative to the fixed stars, or 365 days, 6 hours, 9 minutes,

-	 * 9.54 seconds (standard name <code>year_sidereal</code>).

-	 */

-	static final Unit<Time> YEAR_SIDEREAL = addUnit(SECOND

-			.multiply(31558149.54));

-

-	/**

-	 * The Julian year, as used in astronomy and other sciences, is a time unit

-	 * defined as exactly 365.25 days. This is the normal meaning of the unit

-	 * "year" (symbol "a" from the Latin annus, annata) used in various

-	 * scientific contexts.

-	 */

-	static final Unit<Time> YEAR_JULIEN = addUnit(SECOND

-			.multiply(31557600));

-

-	// ////////

-	// Mass //

-	// ////////

-	/**

-	 * A unit of mass equal to 1/12 the mass of the carbon-12 atom (standard

-	 * name <code>u</code>).

-	 */

-	static final Unit<Mass> ATOMIC_MASS = addUnit(KILOGRAM

-			.multiply(1e-3 / AVOGADRO_CONSTANT));

-

-	/**

-	 * A unit of mass equal to the mass of the electron (standard name

-	 * <code>me</code>).

-	 */

-	static final Unit<Mass> ELECTRON_MASS = addUnit(KILOGRAM

-			.multiply(9.10938188e-31));

-

-	/**

-	 * A unit of mass equal to <code>453.59237 grams</code> (avoirdupois pound,

-	 * standard name <code>lb</code>).

-	 */

-	static final Unit<Mass> POUND = addUnit(KILOGRAM.multiply(

-			AVOIRDUPOIS_POUND_DIVIDEND).divide(AVOIRDUPOIS_POUND_DIVISOR));

-

-	// ///////////////////

-	// Electric charge //

-	// ///////////////////

-	/**

-	 * A unit of electric charge equal to the charge on one electron (standard

-	 * name <code>e</code>).

-	 */

-	static final Unit<ElectricCharge> E = addUnit(COULOMB

-			.multiply(ELEMENTARY_CHARGE));

-

-	/**

-	 * A unit of electric charge equal to equal to the product of Avogadro's

-	 * number (see {@link SI#MOLE}) and the charge (1 e) on a single electron

-	 * (standard name <code>Fd</code>).

-	 */

-	static final Unit<ElectricCharge> FARADAY = addUnit(COULOMB

-			.multiply(ELEMENTARY_CHARGE * AVOGADRO_CONSTANT)); // e/mol

-

-	/**

-	 * A unit of electric charge which exerts a force of one dyne on an equal

-	 * charge at a distance of one centimeter (standard name <code>Fr</code>).

-	 */

-	static final Unit<ElectricCharge> FRANKLIN = addUnit(COULOMB

-			.multiply(3.3356e-10));

-

-	// ///////////////

-	// Temperature //

-	// ///////////////

-	/**

-	 * A unit of temperature equal to <code>5/9 °K</code> (standard name

-	 * <code>°R</code>).

-	 */

-	static final Unit<Temperature> RANKINE = addUnit(KELVIN.multiply(5)

-			.divide(9));

-

-	// /////////

-	// Angle //

-	// /////////

-

-	/**

-	 * A unit of angle equal to a full circle or <code>2<i>&pi;</i>

-	 * {@link SI#RADIAN}</code> (standard name <code>rev</code>).

-	 */

-	static final Unit<Angle> REVOLUTION = addUnit(RADIAN.multiply(2)

-			.multiply(Math.PI).asType(Angle.class));

-	

-	// ////////////

-	// Speed //

-	// ////////////

-	/**

-	 * A unit of Speed relative to the speed of light (standard name

-	 * <code>c</code>).

-	 */

-	static final Unit<Speed> C = addUnit(METRES_PER_SECOND

-			.multiply(299792458));

-

-	// ////////////////

-	// Acceleration //

-	// ////////////////

-	/**

-	 * A unit of acceleration equal to the gravity at the earth's surface

-	 * (standard name <code>grav</code>).

-	 */

-	static final Unit<Acceleration> G = addUnit(METRES_PER_SQUARE_SECOND

-			.multiply(STANDARD_GRAVITY_DIVIDEND).divide(

-					STANDARD_GRAVITY_DIVISOR));

-

-	// ////////

-	// Area //

-	// ////////

-	/**

-	 * A unit of area equal to <code>100 m²</code> (standard name <code>a</code>

-	 * ).

-	 */

-	static final Unit<Area> ARE = addUnit(SQUARE_METRE.multiply(100));

-

-	// ///////////////

-	// Data Amount //

-	// ///////////////

-	/**

-	 * A unit of data amount equal to <code>8 {@link SI#BIT}</code> (BinarY

-	 * TErm, standard name <code>byte</code>).

-	 */

-	static final Unit<Information> BYTE = addUnit(BIT.multiply(8));

-

-	/**

-	 * Equivalent {@link #BYTE}

-	 */

-	static final Unit<Information> OCTET = BYTE;

-

-	// ////////////////////

-	// Electric current //

-	// ////////////////////

-	/**

-	 * A unit of electric charge equal to the centimeter-gram-second

-	 * electromagnetic unit of magnetomotive force, equal to <code>10/4

-	 * &pi;ampere-turn</code> (standard name <code>Gi</code>).

-	 */

-	static final Unit<ElectricCurrent> GILBERT = addUnit(AMPERE

-			.multiply(10).divide(4).multiply(PI).asType(ElectricCurrent.class));

-

-	// //////////

-	// Energy //

-	// //////////

-	/**

-	 * A unit of energy equal to <code>1E-7 J</code> (standard name

-	 * <code>erg</code>).

-	 */

-	static final Unit<Energy> ERG = addUnit(JOULE.divide(10000000));

-

-	/**

-	 * A unit of energy equal to one electron-volt (standard name

-	 * <code>eV</code>, also recognized <code>keV, MeV, GeV</code>).

-	 */

-	static final Unit<Energy> ELECTRON_VOLT = addUnit(JOULE

-			.multiply(ELEMENTARY_CHARGE));

-

-	// ///////////////

-	// Illuminance //

-	// ///////////////

-	/**

-	 * A unit of illuminance equal to <code>1E4 Lx</code> (standard name

-	 * <code>La</code>).

-	 */

-	static final Unit<Illuminance> LAMBERT = addUnit(LUX.multiply(10000));

-

-	// /////////////////

-	// Magnetic Flux //

-	// /////////////////

-	/**

-	 * A unit of magnetic flux equal <code>1E-8 Wb</code> (standard name

-	 * <code>Mx</code>).

-	 */

-	static final Unit<MagneticFlux> MAXWELL = addUnit(WEBER

-			.divide(100000000));

-

-	// /////////////////////////

-	// Magnetic Flux Density //

-	// /////////////////////////

-	/**

-	 * A unit of magnetic flux density equal <code>1000 A/m</code> (standard

-	 * name <code>G</code>).

-	 */

-	static final Unit<MagneticFluxDensity> GAUSS = addUnit(TESLA

-			.divide(10000));

-

-	// /////////

-	// Force //

-	// /////////

-	/**

-	 * A unit of force equal to <code>1E-5 N</code> (standard name

-	 * <code>dyn</code>).

-	 */

-	static final Unit<Force> DYNE = addUnit(NEWTON.divide(100000));

-

-	/**

-	 * A unit of force equal to <code>9.80665 N</code> (standard name

-	 * <code>kgf</code>).

-	 */

-	static final Unit<Force> KILOGRAM_FORCE = addUnit(NEWTON.multiply(

-			STANDARD_GRAVITY_DIVIDEND).divide(STANDARD_GRAVITY_DIVISOR));

-

-	/**

-	 * A unit of force equal to <code>{@link #POUND}·{@link #G}</code>

-	 * (standard name <code>lbf</code>).

-	 */

-	static final Unit<Force> POUND_FORCE = addUnit(NEWTON.multiply(

-			1L * AVOIRDUPOIS_POUND_DIVIDEND * STANDARD_GRAVITY_DIVIDEND)

-			.divide(1L * AVOIRDUPOIS_POUND_DIVISOR * STANDARD_GRAVITY_DIVISOR));

-

-	// /////////

-	// Power //

-	// /////////

-	/**

-	 * A unit of power equal to the power required to raise a mass of 75

-	 * kilograms at a Speed of 1 meter per second (metric, standard name

-	 * <code>hp</code>).

-	 */

-	static final Unit<Power> HORSEPOWER = addUnit(WATT.multiply(735.499));

-

-	// ////////////

-	// Pressure //

-	// ////////////

-	/**

-	 * A unit of pressure equal to the average pressure of the Earth's

-	 * atmosphere at sea level (standard name <code>atm</code>).

-	 */

-	static final Unit<Pressure> ATMOSPHERE = addUnit(PASCAL

-			.multiply(101325));

-

-	/**

-	 * A unit of pressure equal to <code>100 kPa</code> (standard name

-	 * <code>bar</code>).

-	 */

-	static final Unit<Pressure> BAR = addUnit(PASCAL.multiply(100000));

-

-	/**

-	 * A unit of pressure equal to the pressure exerted at the Earth's surface

-	 * by a column of mercury 1 millimeter high (standard name <code>mmHg</code>

-	 * ).

-	 */

-	static final Unit<Pressure> MILLIMETRE_OF_MERCURY = addUnit(PASCAL

-			.multiply(133.322));

-

-	/**

-	 * A unit of pressure equal to the pressure exerted at the Earth's surface

-	 * by a column of mercury 1 inch high (standard name <code>inHg</code>).

-	 */

-	static final Unit<Pressure> INCH_OF_MERCURY = addUnit(PASCAL

-			.multiply(3386.388));

-

-	// ///////////////////////////

-	// Radiation dose absorbed //

-	// ///////////////////////////

-	/**

-	 * A unit of radiation dose absorbed equal to a dose of 0.01 joule of energy

-	 * per kilogram of mass (J/kg) (standard name <code>rd</code>).

-	 */

-	static final Unit<RadiationDoseAbsorbed> RAD = addUnit(GRAY

-			.divide(100));

-

-	/**

-	 * A unit of radiation dose effective equal to <code>0.01 Sv</code>

-	 * (standard name <code>rem</code>).

-	 */

-	static final Unit<RadiationDoseEffective> REM = addUnit(SIEVERT

-			.divide(100));

-

-	// ////////////////////////

-	// Radioactive activity //

-	// ////////////////////////

-	/**

-	 * A unit of radioctive activity equal to the activity of a gram of radium

-	 * (standard name <code>Ci</code>).

-	 */

-	static final Unit<Radioactivity> CURIE = addUnit(BECQUEREL

-			.multiply(37000000000L));

-

-	/**

-	 * A unit of radioctive activity equal to 1 million radioactive

-	 * disintegrations per second (standard name <code>Rd</code>).

-	 */

-	static final Unit<Radioactivity> RUTHERFORD = addUnit(BECQUEREL

-			.multiply(1000000));

-

-	// ///////////////

-	// Solid angle //

-	// ///////////////

-	/**

-	 * A unit of solid angle equal to <code>4 <i>&pi;</i> steradians</code>

-	 * (standard name <code>sphere</code>).

-	 */

-	static final Unit<SolidAngle> SPHERE = addUnit(STERADIAN.multiply(4)

-			.multiply(PI).asType(SolidAngle.class));

-

-	// //////////

-	// Volume //

-	// //////////

-

-

-	// /////////////

-	// Viscosity //

-	// /////////////

-	/**

-	 * A unit of dynamic viscosity equal to <code>1 g/(cm·s)</code> (cgs unit).

-	 */

-	static final Unit<DynamicViscosity> POISE = addUnit(

-			GRAM.divide(CENTI(METRE).multiply(SECOND))).asType(

-			DynamicViscosity.class);

-

-	/**

-	 * A unit of kinematic viscosity equal to <code>1 cm²/s</code> (cgs unit).

-	 */

-	static final Unit<KinematicViscosity> STOKE = addUnit(

-			CENTI(METRE).pow(2).divide(SECOND))

-			.asType(KinematicViscosity.class);

-

-	// /////////////

-	// Frequency //

-	// /////////////

-	/**

-	 * A unit used to measure the frequency (rate) at which an imaging device

-	 * produces unique consecutive images (standard name <code>fps</code>).

-	 */

-	static final Unit<Frequency> FRAMES_PER_SECOND = addUnit(

-			AbstractUnit.ONE.divide(SECOND)).asType(Frequency.class);

-

-	// //////////

-	// Others //

-	// //////////

-	/**

-	 * A unit used to measure the ionizing ability of radiation (standard name

-	 * <code>Roentgen</code>).

-	 */

-	static final Unit<IonizingRadiation> ROENTGEN = SI.ROENTGEN;

-

-	public String getName() {

-		return getClass().getSimpleName();

-	}

-}

diff --git a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/package-info.java b/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/package-info.java
deleted file mode 100644
index 2929189..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/java/org/eclipse/uomo/units/package-info.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil, Ikayzo and others - initial API and implementation
- */
-/**
- * Provides support for programatic unit handling.
- *
- * <h3> Standard/NonStandard Units</h3>
- *      Standard units and prefixes are provided by the
- *      {@link org.eclipse.uomo.units.SI} class (Système International d'Unités) and
- *      about 50 non-standard units are available through the
- *      {@link org.eclipse.uomo.units.impl.system.USCustomary} class.
- *
- * <h3>Usage examples:</h3>
- * [code]
- *
- * import static org.eclipse.uomo.units.SI.*;
- * import static org.eclipse.uomo.units.impl.system.USCustomary.*;
-
- * public class Main {
- *     public void main(String[] args) {
- *
- *         // Conversion between units (explicit way).
- *         Unit<Length> sourceUnit = KILO(METRE);
- *         Unit<Length> targetUnit = MILE;
- *         UnitConverter uc = sourceUnit.getConverterTo(targetUnit);
- *         System.out.println(uc.convert(10)); // Converts 10 km to miles.
- *
- *         // Same conversion than above, packed in one line.
- *         System.out.println(KILO(METRE).getConverterTo(MILE).convert(10));
- *
- *         // Retrieval of the system unit (identifies the measurement type).
- *         System.out.println(REVOLUTION.divide(MINUTE).toMetric());
- *
- *         // Dimension checking (allows/disallows conversions)
- *         System.out.println(ELECTRON_VOLT.isCompatible(WATT.times(HOUR)));
- *
- *         // Retrieval of the unit dimension (depends upon the current model).
- *         System.out.println(ELECTRON_VOLT.getDimension());
- *     }
- * }
- *
- * > 6.2137119223733395
- * > 6.2137119223733395
- * > rad/s
- * > true
- * > [L]²·[M]/[T]²
- * [/code]
- *
- * <h3>Unit Parameterization</h3>
- *
- *     Units are parameterized (e.g. &lt;Time extends {@link org.unitsofmeasure.Quantity Quantity}>) to
- *     enforce compile-time checks of units/measures consistency, for example:[code]
- *
- *     Unit<Time> MINUTE = SECOND.times(60); // Ok.
- *     Unit<Time> MINUTE = METRE.times(60); // Compile error.
- *
- *     Unit<Pressure> HECTOPASCAL = HECTO(PASCAL); // Ok.
- *     Unit<Pressure> HECTOPASCAL = HECTO(NEWTON); // Compile error.
- *
- *     TimeAmount duration = new TimeAmount(2, MINUTE); // Ok.
- *     TimeAmount duration = new TimeAmount(2, CELSIUS); // Compile error.
- *
- *     long milliseconds = duration.longValue(MILLI(SECOND)); // Ok.
- *     long milliseconds = duration.longValue(POUND); // Compile error.
- *     [/code]
- *
- *     Runtime checks of dimension consistency can be done for more complex cases.
- *
- *     [code]
- *     Unit<Area> SQUARE_FOOT = FOOT.times(FOOT).asType(Area.class); // Ok.
- *     Unit<Area> SQUARE_FOOT = FOOT.times(KELVIN).asType(Area.class); // Runtime error.
- *
- *     Unit<Temperature> KELVIN = Unit.valueOf("K").asType(Temperature.class); // Ok.
- *     Unit<Temperature> KELVIN = Unit.valueOf("kg").asType(Temperature.class); // Runtime error.
- *     [/code]
- *     </p>
- *
- * @author  <a href="mailto:jean-marie@dautelle.com">Jean-Marie Dautelle</a>
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 0.5.1, $Date: 2010-08-10 07:04:41 +0100 (Di, 10 Aug 2010) $
- */
-package org.eclipse.uomo.units;
diff --git a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages.properties b/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages.properties
deleted file mode 100644
index 6e96c98..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages.properties
+++ /dev/null
@@ -1,90 +0,0 @@
-#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
-#
-# Copyright (c) 2005, 2011, Werner Keil, Ikayzo and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#    Werner Keil, Ikayzo and others - initial API and implementation
-#
-
-# Imperial Units
-org.eclipse.uomo.units.impl.system.Imperial.GALLON_UK            = gal_uk
-# SI Units
-org.eclipse.uomo.units.SI.AMPERE                     = A
-org.eclipse.uomo.units.SI.AMPERE_TURN                = At
-org.eclipse.uomo.units.SI.BECQUEREL                  = Bq
-org.eclipse.uomo.units.SI.CANDELA                    = cd
-org.eclipse.uomo.units.SI.CELSIUS                    = \u00B0C
-org.eclipse.uomo.units.SI.CELSIUS.1                  = \u2103
-org.eclipse.uomo.units.SI.CELSIUS.2                  = Celsius
-org.eclipse.uomo.units.SI.COULOMB                    = C
-org.eclipse.uomo.units.SI.FARAD                      = F
-org.eclipse.uomo.units.SI.GRAM                       = g
-org.eclipse.uomo.units.SI.GRAY                       = Gy
-org.eclipse.uomo.units.SI.HENRY                      = H
-org.eclipse.uomo.units.SI.HERTZ                      = Hz
-org.eclipse.uomo.units.SI.HERTZ.2                    = hertz
-org.eclipse.uomo.units.SI.JOULE                      = J
-org.eclipse.uomo.units.SI.KATAL                      = kat
-org.eclipse.uomo.units.SI.KELVIN                     = K
-org.eclipse.uomo.units.SI.KILOGRAM                   = kg
-org.eclipse.uomo.units.SI.KILOGRAM.1                 = kilogram
-org.eclipse.uomo.units.SI.LUMEN                      = lm
-org.eclipse.uomo.units.SI.LUX                        = lx
-org.eclipse.uomo.units.SI.METRE                      = m
-org.eclipse.uomo.units.SI.MOLE                       = mol
-org.eclipse.uomo.units.SI.NEWTON                     = N
-org.eclipse.uomo.units.SI.OHM                        = \u03A9
-org.eclipse.uomo.units.SI.PASCAL                     = Pa
-org.eclipse.uomo.units.SI.RADIAN                     = rad
-org.eclipse.uomo.units.SI.ROENTGEN                   = R
-org.eclipse.uomo.units.SI.SECOND                     = s
-org.eclipse.uomo.units.SI.SIEMENS                    = S
-org.eclipse.uomo.units.SI.SIEVERT                    = Sv
-org.eclipse.uomo.units.SI.STERADIAN                  = sr
-org.eclipse.uomo.units.SI.TESLA                      = T
-org.eclipse.uomo.units.SI.VOLT                       = V
-org.eclipse.uomo.units.SI.WATT                       = W
-org.eclipse.uomo.units.SI.WEBER                      = Wb
-
-# US Units
-org.eclipse.uomo.units.impl.system.USCustomary.FAHRENHEIT 		 = \u00B0F
-org.eclipse.uomo.units.impl.system.USCustomary.FAHRENHEIT.1      = \u2109
-org.eclipse.uomo.units.impl.system.USCustomary.FOOT              = ft
-org.eclipse.uomo.units.impl.system.USCustomary.HORSEPOWER        = hp
-org.eclipse.uomo.units.impl.system.USCustomary.GALLON_LIQUID 	 = gal
-org.eclipse.uomo.units.impl.system.USCustomary.GALLON_DRY 	     = gal_dry
-org.eclipse.uomo.units.impl.system.USCustomary.INCH              = in
-org.eclipse.uomo.units.impl.system.USCustomary.KNOT              = kn
-org.eclipse.uomo.units.impl.system.USCustomary.LITER             = l
-org.eclipse.uomo.units.impl.system.USCustomary.MILE    			 = mi
-org.eclipse.uomo.units.impl.system.USCustomary.MILES_PER_HOUR    = mph
-org.eclipse.uomo.units.impl.system.USCustomary.POUND			 = lb
-# SI Prefixes
-org.eclipse.uomo.units.impl.format.ParsePrefix.ATTO  = a
-org.eclipse.uomo.units.impl.format.ParsePrefix.CENTI = c
-org.eclipse.uomo.units.impl.format.ParsePrefix.DECI  = d
-org.eclipse.uomo.units.impl.format.ParsePrefix.DEKA  = da
-org.eclipse.uomo.units.impl.format.ParsePrefix.EXA   = E
-org.eclipse.uomo.units.impl.format.ParsePrefix.FEMTO = f
-org.eclipse.uomo.units.impl.format.ParsePrefix.GIGA  = G
-org.eclipse.uomo.units.impl.format.ParsePrefix.HECTO = h
-org.eclipse.uomo.units.impl.format.ParsePrefix.KILO  = k
-org.eclipse.uomo.units.impl.format.ParsePrefix.MEGA  = M
-org.eclipse.uomo.units.impl.format.ParsePrefix.MICRO = \u00B5
-org.eclipse.uomo.units.impl.format.ParsePrefix.MILLI = m
-org.eclipse.uomo.units.impl.format.ParsePrefix.NANO  = n
-org.eclipse.uomo.units.impl.format.ParsePrefix.PETA  = P
-org.eclipse.uomo.units.impl.format.ParsePrefix.PICO  = p
-org.eclipse.uomo.units.impl.format.ParsePrefix.TERA  = T
-org.eclipse.uomo.units.impl.format.ParsePrefix.YOCTO = y
-org.eclipse.uomo.units.impl.format.ParsePrefix.YOTTA = Y
-org.eclipse.uomo.units.impl.format.ParsePrefix.ZEPTO = z
-org.eclipse.uomo.units.impl.format.ParsePrefix.ZETTA = Z
-
-org.eclipse.uomo.units.impl.system.Imperial.PINT=pt
-
-org.eclipse.uomo.units.impl.system.CommonUnits.KILOMETRES_PER_HOUR=kph
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_cn.properties b/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_cn.properties
deleted file mode 100644
index 9a66e4a..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_cn.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-org.eclipse.uomo.units.SI.CELSIUS.2                  = \u6442\u6C0F\u6E29\u5EA6

-org.eclipse.uomo.units.SI.GRAM                       = \u514B

-org.eclipse.uomo.units.SI.HERTZ.2                    = \u30D8\u30EB\u30C4

-org.eclipse.uomo.units.SI.METRE                      = \u7C73

-org.eclipse.uomo.units.SI.ROENTGEN                   = \u306E

-org.eclipse.uomo.units.SI.SECOND                     = \u79D2

-org.eclipse.uomo.units.impl.system.USCustomary.LITER             = \u5347

-org.eclipse.uomo.units.impl.system.USCustomary.METER             = \u7C73

-org.eclipse.uomo.units.impl.system.USCustomary.TON               = \u30C8\u30F3

-org.eclipse.uomo.units.impl.format.ParsePrefix.CENTI = \u5398

-org.eclipse.uomo.units.impl.format.ParsePrefix.DECI  = \u5206

-org.eclipse.uomo.units.impl.format.ParsePrefix.DEKA  = \u5341

-org.eclipse.uomo.units.impl.format.ParsePrefix.HECTO = \u767E

-org.eclipse.uomo.units.impl.format.ParsePrefix.KILO  = \u5343

-org.eclipse.uomo.units.impl.format.ParsePrefix.MEGA  = M

-org.eclipse.uomo.units.impl.format.ParsePrefix.MICRO = \u5FAE

-org.eclipse.uomo.units.impl.format.ParsePrefix.MILLI = \u6BEB

diff --git a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_de.properties b/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_de.properties
deleted file mode 100644
index cc9d687..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_de.properties
+++ /dev/null
@@ -1,45 +0,0 @@
-#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)

-#

-# Copyright (c) 2005, 2011, Werner Keil, Ikayzo and others.

-# All rights reserved. This program and the accompanying materials

-# are made available under the terms of the Eclipse Public License v1.0

-# which accompanies this distribution, and is available at

-# http://www.eclipse.org/legal/epl-v10.html

-#

-# Contributors:

-#    Werner Keil, Ikayzo and others - initial API and implementation

-#

-#$Id: messages_de.properties 180 2011-11-13 18:11:17Z keilw $

-

-org.eclipse.uomo.units.impl.system.Imperial.GALLON_UK         = gallone_uk

-org.eclipse.uomo.units.impl.system.Imperial.OUNCE_LIQUID      = fl uz UK

-org.eclipse.uomo.units.impl.system.Imperial.TON_UK            = tonne_uk

-##org.eclipse.uomo.units.impl.system.NonSI.DAY                  = tag

-##org.eclipse.uomo.units.impl.system.NonSI.DAY_SIDEREAL         = tag_sidereal

-##org.eclipse.uomo.units.impl.system.NonSI.POINT                = pkt

-##org.eclipse.uomo.units.impl.system.NonSI.ROENTGEN.1           = R\u00F6ntgen

-org.eclipse.uomo.units.SI.KILOGRAM.1              = kilogramm

-org.eclipse.uomo.units.impl.system.USCustomary.FOOT           = fu\u00DF

-org.eclipse.uomo.units.impl.system.USCustomary.FOOT_SURVEY    = fu\u00DF_survey_us

-org.eclipse.uomo.units.impl.system.USCustomary.GALLON_DRY     = gallone_trocken_us

-org.eclipse.uomo.units.impl.system.USCustomary.GRADE          = grad

-org.eclipse.uomo.units.impl.system.USCustomary.HORSEPOWER     = ps

-org.eclipse.uomo.units.impl.system.USCustomary.HOUR           = st

-org.eclipse.uomo.units.impl.system.USCustomary.INCH           = zoll

-org.eclipse.uomo.units.impl.system.USCustomary.LIGHT_YEAR     = lj

-org.eclipse.uomo.units.impl.system.USCustomary.MILE.1         = Meile

-org.eclipse.uomo.units.impl.system.USCustomary.MILES_PER_HOUR = mpst

-org.eclipse.uomo.units.impl.system.USCustomary.OIL_BARREL     = \u00F6lfa\u00DF

-org.eclipse.uomo.units.impl.system.USCustomary.OUNCE          = uz

-org.eclipse.uomo.units.impl.system.USCustomary.OUNCE_LIQUID   = fl uz US

-##org.eclipse.uomo.units.impl.system.USCustomary.SPHERE         = sph\u00E4re

-org.eclipse.uomo.units.impl.system.USCustomary.TABLESPOON     = Essl

-##org.eclipse.uomo.units.impl.system.USCustomary.TABLESPOON.1   = E\u00DFl\u00F6ffel

-org.eclipse.uomo.units.impl.system.USCustomary.TEASPOON       = teel

-##org.eclipse.uomo.units.impl.system.USCustomary.TEASPOON.1     = Teel\u00F6ffel

-org.eclipse.uomo.units.impl.system.USCustomary.TON            = tonne_us

-##org.eclipse.uomo.units.impl.system.USCustomary.WEEK           = woche

-##org.eclipse.uomo.units.impl.system.USCustomary.YEAR_CALENDAR  = jahr

-##org.eclipse.uomo.units.impl.system.USCustomary.YEAR_SIDEREAL  = jahr_sidereal

-

-org.eclipse.uomo.units.impl.system.CommonUnits.KILOMETRES_PER_HOUR=kmh
\ No newline at end of file
diff --git a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_en_GB.properties b/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_en_GB.properties
deleted file mode 100644
index 45c31eb..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_en_GB.properties
+++ /dev/null
@@ -1,19 +0,0 @@
-#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
-# Copyright (c) 2005, 2011, Werner Keil, Ikayzo and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#    Werner Keil, Ikayzo and others - initial API and implementation
-#
-
-org.eclipse.uomo.units.impl.system.Imperial.GALLON_UK        = gal
-org.eclipse.uomo.units.impl.system.Imperial.OUNCE_LIQUID     = fl oz
-org.eclipse.uomo.units.impl.system.Imperial.TON_UK           = ton
-org.eclipse.uomo.units.impl.system.USCustomary.FOOT_SURVEY   = ft_survey_us
-org.eclipse.uomo.units.impl.system.USCustomary.GALLON_DRY    = gallon_dry_us
-org.eclipse.uomo.units.impl.system.USCustomary.GALLON_LIQUID = gal_us
-org.eclipse.uomo.units.impl.system.USCustomary.OUNCE_LIQUID  = fl oz US
-org.eclipse.uomo.units.impl.system.USCustomary.TON           = ton_us
diff --git a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_en_US.properties b/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_en_US.properties
deleted file mode 100644
index bf8349f..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_en_US.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
-#
-# Copyright (c) 2005, 2011, Werner Keil, Ikayzo and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#    Werner Keil, Ikayzo and others - initial API and implementation
-#
-
-org.eclipse.uomo.units.impl.system.USCustomary.ELECTRON_VOLT = eV
-org.eclipse.uomo.units.impl.system.USCustomary.GALLON_DRY    = gallon_dry
-org.eclipse.uomo.units.impl.system.USCustomary.GALLON_LIQUID = gal
-org.eclipse.uomo.units.impl.system.USCustomary.OUNCE_LIQUID  = fl oz
-org.eclipse.uomo.units.impl.system.USCustomary.TON           = ton
diff --git a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_fr.properties b/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_fr.properties
deleted file mode 100644
index 4b79570..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_fr.properties
+++ /dev/null
@@ -1,37 +0,0 @@
-#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
-#
-# Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#    Werner Keil, Ikayzo and others - initial API and implementation
-#
-# Contributors:
-#    Werner Keil, Ikayzo and others - initial API and implementation
-#
-#  See LICENSE.txt for full License
-#
-#  See LICENSE.txt for full License
-#
-#  See LICENSE.txt for full License
-#
-#  See LICENSE.txt for full License
-#
-#  See LICENSE.txt for full License
-#
-#  See LICENSE.txt for full License
-#
-#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)
-#
-#  Copyright (c) 2005-2010, Jean-Marie Dautelle, Werner Keil
-#  All rights reserved.
-#
-#  See LICENSE.txt for the Specification License
-#
-# NOTE: as a Java properties file, this file must use the
-# ISO 8859-1 encoding, so all non-ASCII Unicode characters 
-# must be escaped using the \uXXXX syntax.
-# See http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html#encoding
diff --git a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_fr_CA.properties b/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_fr_CA.properties
deleted file mode 100644
index cc41635..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_fr_CA.properties
+++ /dev/null
@@ -1,18 +0,0 @@
-#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)

-#

-# Copyright (c) 2005, 2011, Werner Keil, Ikayzo and others.

-# All rights reserved. This program and the accompanying materials

-# are made available under the terms of the Eclipse Public License v1.0

-# which accompanies this distribution, and is available at

-# http://www.eclipse.org/legal/epl-v10.html

-#

-# Contributors:

-#    Werner Keil, Ikayzo and others - initial API and implementation

-#

-# NOTE: as a Java properties file, this file must use the

-# ISO 8859-1 encoding, so all non-ASCII Unicode characters 

-# must be escaped using the \uXXXX syntax.

-# See http://java.sun.com/j2se/1.5.0/docs/api/java/util/Properties.html#encoding

-

-org.eclipse.uomo.units.impl.system.USCustomary.FOOT         = pi

-org.eclipse.uomo.units.impl.system.USCustomary.OUNCE_LIQUID = oz liq

diff --git a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_ja.properties b/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_ja.properties
deleted file mode 100644
index 0e67995..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_ja.properties
+++ /dev/null
@@ -1,16 +0,0 @@
-org.eclipse.uomo.units.SI.CELSIUS.2                  = \u6442\u6C0F\u6E29\u5EA6

-org.eclipse.uomo.units.USCustomary.FAHRENHEIT.1=\u83EF\u6C0F

-org.eclipse.uomo.units.SI.HERTZ.2                    = \u30D8\u30EB\u30C4

-org.eclipse.uomo.units.SI.METRE                      = \u7C73

-org.eclipse.uomo.units.SI.ROENTGEN                   = \u306E

-org.eclipse.uomo.units.SI.SECOND                     = \u79D2

-org.eclipse.uomo.units.impl.system.USCustomary.LITER             = \u5347

-org.eclipse.uomo.units.impl.system.USCustomary.METER             = \u7C73

-org.eclipse.uomo.units.impl.system.USCustomary.TON               = \u30C8\u30F3

-org.eclipse.uomo.units.impl.format.ParsePrefix.CENTI = \u5398

-org.eclipse.uomo.units.impl.format.ParsePrefix.DECI  = \u5206

-org.eclipse.uomo.units.impl.format.ParsePrefix.DEKA  = \u5341

-org.eclipse.uomo.units.impl.format.ParsePrefix.HECTO = \u767E

-org.eclipse.uomo.units.impl.format.ParsePrefix.KILO  = \u5343

-org.eclipse.uomo.units.impl.format.ParsePrefix.MICRO = \u5FAE 

-org.eclipse.uomo.units.impl.format.ParsePrefix.MILLI = \u6BDB

diff --git a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_pt.properties b/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_pt.properties
deleted file mode 100644
index cb726a3..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_pt.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)

-#

-# Copyright (c) 2005, 2011, Werner Keil, Ikayzo and others.

-# All rights reserved. This program and the accompanying materials

-# are made available under the terms of the Eclipse Public License v1.0

-# which accompanies this distribution, and is available at

-# http://www.eclipse.org/legal/epl-v10.html

-#

-# Contributors:

-#    Werner Keil, Ikayzo and others - initial API and implementation

-#

-

-org.eclipse.uomo.units.impl.system.USCustomary.MINIM             = minim

-##org.eclipse.uomo.units.impl.system.USCustomary.TABLESPOON.1      = Colher de sopa

-##org.eclipse.uomo.units.impl.system.USCustomary.TEASPOON.1        = Colher de ch\u00E1

-org.eclipse.uomo.units.impl.system.USCustomary.TON               = t

-org.eclipse.uomo.units.impl.format.ParsePrefix.MICRO = mu

diff --git a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_ru.properties b/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_ru.properties
deleted file mode 100644
index d1deaea..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/impl/format/messages_ru.properties
+++ /dev/null
@@ -1,78 +0,0 @@
-#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)

-#

-# Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

-# All rights reserved. This program and the accompanying materials

-# are made available under the terms of the Eclipse Public License v1.0

-# which accompanies this distribution, and is available at

-# http://www.eclipse.org/legal/epl-v10.html

-#

-# Contributors:

-#    Werner Keil, Ikayzo and others - initial API and implementation

-#

-

-org.eclipse.uomo.units.SI.BECQUEREL                  = \u0411\u043A

-org.eclipse.uomo.units.SI.CANDELA                    = \u043A\u0434

-org.eclipse.uomo.units.SI.COULOMB                    = \u041A\u043B

-org.eclipse.uomo.units.SI.FARAD                      = \u0424

-org.eclipse.uomo.units.SI.GRAM                       = \u0433

-org.eclipse.uomo.units.SI.GRAY                       = \u0413\u0440

-org.eclipse.uomo.units.SI.HENRY                      = \u0413\u043D

-org.eclipse.uomo.units.SI.HERTZ                      = \u0413\u0446

-org.eclipse.uomo.units.SI.HERTZ.2                    = \u0433\u0435\u0440\u0446

-org.eclipse.uomo.units.SI.JOULE                      = \u0414\u0436

-org.eclipse.uomo.units.SI.KATAL                      = \u043A\u0430\u0442

-org.eclipse.uomo.units.SI.KELVIN                     = \u041A

-org.eclipse.uomo.units.SI.LUMEN                      = \u043B\u043C

-org.eclipse.uomo.units.SI.LUX                        = \u043B\u043A

-org.eclipse.uomo.units.SI.METRE                      = \u043C

-org.eclipse.uomo.units.SI.MOLE                       = \u043C\u043E\u043B\u044C

-org.eclipse.uomo.units.SI.NEWTON                     = \u041D

-org.eclipse.uomo.units.SI.OHM                        = \u041E\u043C

-org.eclipse.uomo.units.SI.PASCAL                     = \u041F\u0430

-org.eclipse.uomo.units.SI.RADIAN                     = \u0440\u0430\u0434

-org.eclipse.uomo.units.SI.SECOND                     = \u0441

-org.eclipse.uomo.units.SI.SIEMENS                    = \u0421\u043C

-org.eclipse.uomo.units.SI.SIEVERT                    = \u0417\u0432

-org.eclipse.uomo.units.SI.STERADIAN                  = \u0441\u0440

-org.eclipse.uomo.units.SI.TESLA                      = \u0422\u043B

-org.eclipse.uomo.units.SI.VOLT                       = \u0412

-org.eclipse.uomo.units.SI.WATT                       = \u0412\u0442

-org.eclipse.uomo.units.SI.WEBER                      = \u0412\u0431

-org.eclipse.uomo.units.impl.system.USCustomary.ELECTRON_VOLT     = e\u0412

-org.eclipse.uomo.units.impl.system.USCustomary.FAHRENHEIT        = \u00B0\u0424

-org.eclipse.uomo.units.impl.system.USCustomary.FAHRENHEIT.0      = \u00B0\u0424

-org.eclipse.uomo.units.impl.system.USCustomary.FLUID_DRAM        = \u0434\u0440\u0430\u0445\u043C\u0430

-org.eclipse.uomo.units.impl.system.USCustomary.HOUR              = \u0447

-org.eclipse.uomo.units.impl.system.USCustomary.LITER             = \u043B

-org.eclipse.uomo.units.impl.system.USCustomary.METER             = \u043C

-org.eclipse.uomo.units.impl.system.USCustomary.MILES_PER_HOUR    = \u043C\u0438\u043B\u044C \u0432 \u0447\u0430\u0441

-org.eclipse.uomo.units.impl.system.USCustomary.MINIM             = \u043C\u0438\u043D\u0438\u043C

-org.eclipse.uomo.units.impl.system.USCustomary.MINUTE            = \u0447

-org.eclipse.uomo.units.impl.system.USCustomary.OIL_BARREL        = \u0431\u0430\u0440\u0440\u0435\u043B\u044C

-org.eclipse.uomo.units.impl.system.USCustomary.OUNCE             = \u0443\u043D\u0446\u0438\u044F

-org.eclipse.uomo.units.impl.system.USCustomary.OUNCE_LIQUID      = \u0436\u0438\u0434\u043A\u0430\u044F \u0443\u043D\u0446\u0438\u044F

-org.eclipse.uomo.units.impl.system.USCustomary.RANKINE           = \u00B0P

-org.eclipse.uomo.units.impl.system.USCustomary.RANKINE.0         = \u00B0P

-org.eclipse.uomo.units.impl.system.USCustomary.TABLESPOON        = \u0441\u0442 \u043B\u043E\u0436\u043A\u0430

-org.eclipse.uomo.units.impl.system.USCustomary.TEASPOON          = \u0447\u0430\u0439\u043D\u0430\u044F \u043B\u043E\u0436\u043A\u0430

-org.eclipse.uomo.units.impl.system.USCustomary.TON               = \u0422

-org.eclipse.uomo.units.impl.format.ParsePrefix.ATTO  = a

-org.eclipse.uomo.units.impl.format.ParsePrefix.CENTI = c

-org.eclipse.uomo.units.impl.format.ParsePrefix.DECI  = \u0434

-org.eclipse.uomo.units.impl.format.ParsePrefix.DEKA  = \u0434\u0430

-org.eclipse.uomo.units.impl.format.ParsePrefix.EXA   = \u042D

-org.eclipse.uomo.units.impl.format.ParsePrefix.FEMTO = \u0444

-org.eclipse.uomo.units.impl.format.ParsePrefix.GIGA  = \u0413

-org.eclipse.uomo.units.impl.format.ParsePrefix.HECTO = \u0433

-org.eclipse.uomo.units.impl.format.ParsePrefix.KILO  = \u043A

-org.eclipse.uomo.units.impl.format.ParsePrefix.MEGA  = M

-org.eclipse.uomo.units.impl.format.ParsePrefix.MICRO = \u043C\u043A

-org.eclipse.uomo.units.impl.format.ParsePrefix.MILLI = \u043C

-org.eclipse.uomo.units.impl.format.ParsePrefix.NANO  = \u043D

-org.eclipse.uomo.units.impl.format.ParsePrefix.PETA  = \u041F

-org.eclipse.uomo.units.impl.format.ParsePrefix.PICO  = \u043F

-org.eclipse.uomo.units.impl.format.ParsePrefix.TERA  = T

-org.eclipse.uomo.units.impl.format.ParsePrefix.YOCTO = \u0438

-org.eclipse.uomo.units.impl.format.ParsePrefix.YOTTA = \u0418

-org.eclipse.uomo.units.impl.format.ParsePrefix.ZEPTO = \u0437

-org.eclipse.uomo.units.impl.format.ParsePrefix.ZETTA = \u0417

diff --git a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/messages.properties b/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/messages.properties
deleted file mode 100644
index 7c9d991..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/messages.properties
+++ /dev/null
@@ -1,85 +0,0 @@
-#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)

-#

-# Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

-# All rights reserved. This program and the accompanying materials

-# are made available under the terms of the Eclipse Public License v1.0

-# which accompanies this distribution, and is available at

-# http://www.eclipse.org/legal/epl-v10.html

-#

-# Contributors:

-#    Werner Keil, Ikayzo and others - initial API and implementation

-#

-

-LocalFormat_Pattern = %s

-

-NonSI_R = R

-

-NonSI_R_name = Roentgen

-

-SI_A = A

-

-SI_At = At

-

-SI_Bq = Bq

-

-SI_C = C

-

-SI_F = F

-

-SI_Gy = Gy

-

-SI_H = H

-

-SI_Hz = Hz

-

-SI_J = J

-

-SI_K = K

-

-SI_N = N

-

-SI_OhmS = \u03A9

-

-SI_Pa = Pa

-

-SI_S = S

-

-SI_Sv = Sv

-

-SI_T = T

-

-SI_V = V

-

-SI_W = W

-

-SI_Wb = Wb

-

-SI_bit = bit

-

-SI_cd = cd

-

-SI_kat = kat

-

-SI_kg = kg

-

-SI_kg_name = kilogram

-

-SI_lm = lm

-

-SI_lx = lx

-

-SI_m = m

-

-SI_m_name = metre

-

-SI_mol = mol

-

-SI_rad = rad

-

-SI_s = s

-

-SI_sr = sr

-

-##SymbolMapImpl_unableToCast = unable to cast 

-

-US_lb_name = Pound

diff --git a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/messages_de.properties b/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/messages_de.properties
deleted file mode 100644
index a5b9465..0000000
--- a/bundles/org.eclipse.uomo.units/src/main/resources/org/eclipse/uomo/units/messages_de.properties
+++ /dev/null
@@ -1,20 +0,0 @@
-#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)

-#

-# Copyright (c) 2005, 2010, Werner Keil, Ikayzo and others.

-# All rights reserved. This program and the accompanying materials

-# are made available under the terms of the Eclipse Public License v1.0

-# which accompanies this distribution, and is available at

-# http://www.eclipse.org/legal/epl-v10.html

-#

-# Contributors:

-#    Werner Keil, Ikayzo and others - initial API and implementation

-#

-#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net)

-

-NonSI_R_name = R\u00F6ntgen

-

-SI_kg_name = kilogramm

-

-SI_m_name = meter

-

-US_lb_name = Pfund

diff --git a/bundles/org.eclipse.uomo.units/src/site/.gitignore b/bundles/org.eclipse.uomo.units/src/site/.gitignore
deleted file mode 100644
index 35815fc..0000000
--- a/bundles/org.eclipse.uomo.units/src/site/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/.svn
diff --git a/bundles/org.eclipse.uomo.units/src/site/apt/.gitignore b/bundles/org.eclipse.uomo.units/src/site/apt/.gitignore
deleted file mode 100644
index 35815fc..0000000
--- a/bundles/org.eclipse.uomo.units/src/site/apt/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/.svn
diff --git a/bundles/org.eclipse.uomo.units/src/site/apt/implementations.apt b/bundles/org.eclipse.uomo.units/src/site/apt/implementations.apt
deleted file mode 100644
index 655f528..0000000
--- a/bundles/org.eclipse.uomo.units/src/site/apt/implementations.apt
+++ /dev/null
@@ -1,16 +0,0 @@
-Implementations
-
-  Some projects that are known to implement the <Unit of Measurement> API are:
-
-    * Open Source Projects
-    
-        * {{{http://www.eclipse.org/uomo/}UOMo}} at Eclipse
-
-        * {{{http://jscience.org/}JScience}}
-    
-    * Commercial / Closed Source
-    
-        * Web Applications at {{{http://www.globalservices.bt.com/}BT Global Services}}
-
-  If you would like to add your product to this list, please let us known on the
-  {{{mail-lists.html}mailing list}}.
diff --git a/bundles/org.eclipse.uomo.units/src/site/apt/index.apt b/bundles/org.eclipse.uomo.units/src/site/apt/index.apt
deleted file mode 100644
index a9b64cb..0000000
--- a/bundles/org.eclipse.uomo.units/src/site/apt/index.apt
+++ /dev/null
@@ -1,87 +0,0 @@
-~~ $Id: index.apt 154 2011-11-01 11:21:06Z martdesruisseaux $

-~~ Unit-API - Units of Measurement API for Java (http://www.unitsofmeasurement.org)

-~~ Copyright (c) 2005-2010, Unit-API contributors, JScience and others

-~~ All rights reserved.

-~~

-~~ See LICENSE.txt for details.

-~~

-                    -----------------------------------------------------

-                    UOMo home page

-                    -----------------------------------------------------

-                    Werner Keil, Martin Desruisseaux

-                    -----------------------------------------------------

-                    $Date: 2011-11-01 12:21:06 +0100 (Di, 01 Nov 2011) $

-                    -----------------------------------------------------

-

-

-Eclipse UOMo

-

-+------------------------------------------+

-Unit-API contributors, JScience and others

-+------------------------------------------+

-

-  Copyright (c) 2005-2010, Unit-API contributors, JScience and others

-  All rights reserved.

-

-  See LICENSE.txt for details.

-

-[./images/icon.png] Logo

-

-  The <Unit of Measurement> library provides a set of Java language programming interfaces for

-  handling units and quantities. The interfaces provide a layer which separates client code,

-  which would call the API, from library code, which implements the API. Various groups have

-  implemented the API, see the {{{./implementations.html}list of known implementations}} for details.

-

-* The project

-

-  The project is {{{http://unitsofmeasure.googlecode.com/}hosted on Google Code}}. It runs a public

-  {{{./mail-lists.html}mailing list}} for user and developer questions, other issues, and general

-  discussion.

-

-  The <Unit of Measurement> library is free software. It may be used, modified and redistributed by

-  anyone for any purpose requiring only maintaining the copyright and license terms on the source

-  code and derivative files. See the {{{./license.html}license}} page for details.

-

-

-* Links

-

-    * {{{./apidocs/index.html}Browse javadoc}}

-

-    * {{{http://hudson.geomatys.com/job/Unit-API/}Nightly builds}}

-

-    * {{{./mail-lists.html}Mailing lists}}

-

-    * {{{http://www.unitsofmeasure.org/}The Unified Code for Units of Measure (UCUM)}}

-

-    * {{{./legacy/JSR-275.odt}Legacy JSR-275 specification draft}} (LibreOffice/OpenOffice.org document)

-

-

-* UCUM

-

-** What is it?

-

-  The Unified Code for Units of Measure is a code system intended to include all units of measures

-  being contemporarily used in international science, engineering, and business. The purpose is to

-  facilitate unambiguous electronic communication of quantities together with their units. The focus

-  is on electronic communication, as opposed to communication between humans. A typical application

-  of The Unified Code for Units of Measure are electronic data interchange (EDI) protocols, but there

-  is nothing that prevents it from being used in other types of machine communication.

-

-** How does it relate?

-

-  The Unified Code for Units of Measure is inspired by and heavily based on ISO 2955-1983, ANSI X3.50-1986,

-  and HL7's extensions called "ISO+". The respective ISO and ANSI standards are both entitled Representation

-  of [...] units in systems with limited character sets where ISO 2955 refers to SI and other units provided

-  by ISO 1000-1981, while ANSI X3.50 extends ISO 2955 to include U.S. customary units. Because these standards

-  carry the restriction of "limited character sets" in their names they seem to be of less value today where

-  graphical user interface and laser printers are in wide-spread use, which is why the European standard

-  ENV 12435 in its clause 7.3 declares ISO 2955 obsolete.

-

-  ENV 12435 is dedicated exclusively to the communication of measurements between humans in display

-  and print, and does not provide codes that can be used in communication between systems. It does

-  not even provide a specification that would allow communication of units from one system to the

-  screen or printer of another system. The issue about displaying units in the common style defined

-  by the 9th <Conférence Générale des Poids et Mesures> (CGPM) in 1947 is not just the character set.

-  Although The Unicode Standard and its predecessor ISO/IEC 10646 is the richest character set ever

-  it is still not enough to specify the presentation of units because there are important typographical

-  details such as superscripts, subscripts, roman and italics.

diff --git a/bundles/org.eclipse.uomo.units/src/site/resources/.gitignore b/bundles/org.eclipse.uomo.units/src/site/resources/.gitignore
deleted file mode 100644
index 35815fc..0000000
--- a/bundles/org.eclipse.uomo.units/src/site/resources/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/.svn
diff --git a/bundles/org.eclipse.uomo.units/src/site/resources/images/.gitignore b/bundles/org.eclipse.uomo.units/src/site/resources/images/.gitignore
deleted file mode 100644
index 35815fc..0000000
--- a/bundles/org.eclipse.uomo.units/src/site/resources/images/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/.svn
diff --git a/bundles/org.eclipse.uomo.units/src/site/resources/images/icon.png b/bundles/org.eclipse.uomo.units/src/site/resources/images/icon.png
deleted file mode 100644
index 97a40df..0000000
--- a/bundles/org.eclipse.uomo.units/src/site/resources/images/icon.png
+++ /dev/null
Binary files differ
diff --git a/bundles/pom.xml b/bundles/pom.xml
index 3a70306..edf442f 100644
--- a/bundles/pom.xml
+++ b/bundles/pom.xml
@@ -13,16 +13,20 @@
   <modules>
   	<module>org.eclipse.uomo.core</module>
   	<module>org.eclipse.uomo.core.tests</module>
+  	<!--
   	<module>org.eclipse.uomo.units</module>
   	<module>org.eclipse.uomo.units.tests</module>
-	<!-- <module>org.eclipse.uomo.icu</module>-->
+	 <module>org.eclipse.uomo.icu</module>
+	 -->
   	<module>org.eclipse.uomo.xml</module>
   	<module>org.eclipse.uomo.xml.tests</module>
   	<module>org.eclipse.uomo.util</module>
   	<module>org.eclipse.uomo.util.tests</module>
   	<module>org.eclipse.uomo.ucum</module>
   	<module>org.eclipse.uomo.ucum.tests</module>
+  	<!--
   	<module>org.eclipse.uomo.business</module>
+  	-->
   	<module>org.eclipse.uomo.ui</module>
   	<!-- <module>org.eclipse.uomo.business.tests</module>-->
   </modules>
diff --git a/examples/business/org.eclipse.uomo.examples.business.console/.classpath b/examples/business/org.eclipse.uomo.examples.business.console/.classpath
index 4c6da8e..4dd8e80 100644
--- a/examples/business/org.eclipse.uomo.examples.business.console/.classpath
+++ b/examples/business/org.eclipse.uomo.examples.business.console/.classpath
@@ -1,23 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>

 <classpath>

-	<classpathentry kind="src" output="target/classes" path="src/main/java">

-		<attributes>

-			<attribute name="optional" value="true"/>

-			<attribute name="maven.pomderived" value="true"/>

-		</attributes>

-	</classpathentry>

 	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">

 		<attributes>

 			<attribute name="maven.pomderived" value="true"/>

 		</attributes>

 	</classpathentry>

-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">

-		<attributes>

-			<attribute name="optional" value="true"/>

-			<attribute name="maven.pomderived" value="true"/>

-			<attribute name="test" value="true"/>

-		</attributes>

-	</classpathentry>

 	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">

 		<attributes>

 			<attribute name="maven.pomderived" value="true"/>

@@ -28,5 +15,18 @@
 			<attribute name="maven.pomderived" value="true"/>

 		</attributes>

 	</classpathentry>

+	<classpathentry kind="src" output="target/classes" path="src/main/java">

+		<attributes>

+			<attribute name="optional" value="true"/>

+			<attribute name="maven.pomderived" value="true"/>

+		</attributes>

+	</classpathentry>

+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">

+		<attributes>

+			<attribute name="optional" value="true"/>

+			<attribute name="maven.pomderived" value="true"/>

+			<attribute name="test" value="true"/>

+		</attributes>

+	</classpathentry>

 	<classpathentry kind="output" path="target/classes"/>

 </classpath>

diff --git a/examples/business/org.eclipse.uomo.examples.business.console/pom.xml b/examples/business/org.eclipse.uomo.examples.business.console/pom.xml
index 5824af3..0cdde7c 100644
--- a/examples/business/org.eclipse.uomo.examples.business.console/pom.xml
+++ b/examples/business/org.eclipse.uomo.examples.business.console/pom.xml
@@ -11,13 +11,13 @@
 
 	<dependencies>
 		<dependency>
-			<groupId>org.unitsofmeasurement</groupId>
+			<groupId>javax.measure</groupId>
 			<artifactId>unit-api</artifactId>
 		</dependency>
-		<dependency>
-			<groupId>org.eclipse.uomo</groupId>
-			<artifactId>org.eclipse.uomo.units</artifactId>
-		</dependency>
+   		<dependency>
+        	<groupId>tech.units</groupId>
+        	<artifactId>indriya</artifactId>
+        </dependency>
 		<dependency>
 			<groupId>org.eclipse.uomo</groupId>
 			<artifactId>org.eclipse.uomo.business</artifactId>
diff --git a/examples/icu/org.eclipse.uomo.examples.icu.console/main/java/org/eclipse/uomo/examples/icu/console/ICUDemo.java b/examples/icu/org.eclipse.uomo.examples.icu.console/main/java/org/eclipse/uomo/examples/icu/console/ICUDemo.java
new file mode 100644
index 0000000..5eaf618
--- /dev/null
+++ b/examples/icu/org.eclipse.uomo.examples.icu.console/main/java/org/eclipse/uomo/examples/icu/console/ICUDemo.java
@@ -0,0 +1,48 @@
+/**

+ * Copyright (c) 2005, 2020, Werner Keil and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *    Werner Keil - initial API and implementation

+ */

+package org.eclipse.uomo.examples.icu.console;

+

+//Constants (Java 5 static import)

+import static org.eclipse.uomo.business.money.MoneyUnit.EUR;

+import static org.eclipse.uomo.business.money.MoneyUnit.USD;

+

+import org.eclipse.uomo.business.internal.CurrencyUnit;

+import org.eclipse.uomo.business.internal.MonetaryAmount;

+import org.eclipse.uomo.business.money.MoneyAmount;

+import org.eclipse.uomo.business.money.MoneyConverter;

+import org.eclipse.uomo.business.money.MoneyUnit;

+

+/**

+ * @author Werner Keil

+ * @version 0.9.8, $Date: 2013-05-20 $

+ */

+public class ICUDemo {

+

+	/**

+	 * @param args

+	 *            The application arguments if required.

+	 */

+	@SuppressWarnings({ "unchecked", "rawtypes" })

+	public static void main(String[] args) {

+		// /////////////////////////////////////////////////////////////////////

+		// Calculates the cost of a car trip in Europe for an American tourist.

+		// /////////////////////////////////////////////////////////////////////

+

+		@SuppressWarnings("unused")

+		MoneyConverter converter = new MoneyConverter(USD, EUR, 1.4);

+		CurrencyUnit currency = MoneyUnit.of("CHF");

+		MonetaryAmount money = MoneyAmount.of(100, currency);

+		

+		System.out.println(money);

+//		System.out.println(money.getCurrency());

+		System.out.println(converter.convert(34.6d));

+	}

+}

diff --git a/examples/icu/org.eclipse.uomo.examples.icu.console/main/java/org/eclipse/uomo/examples/icu/console/internal/DemoMessages.java b/examples/icu/org.eclipse.uomo.examples.icu.console/main/java/org/eclipse/uomo/examples/icu/console/internal/DemoMessages.java
new file mode 100644
index 0000000..a692f98
--- /dev/null
+++ b/examples/icu/org.eclipse.uomo.examples.icu.console/main/java/org/eclipse/uomo/examples/icu/console/internal/DemoMessages.java
@@ -0,0 +1,28 @@
+/*

+ * Copyright (c) 2005, 2020, Werner Keil and others.

+ * All rights reserved. This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ *

+ * Contributors:

+ *    Werner Keil - initial API and implementation

+ */

+package org.eclipse.uomo.examples.icu.console.internal;

+

+import org.eclipse.osgi.util.NLS;

+

+public class DemoMessages extends NLS {

+	private static final String BUNDLE_NAME = "org.eclipse.uomo.business.money.demomessages"; //$NON-NLS-1$

+	public static String MoneyDemo_Car_mileage;

+	public static String MoneyDemo_Gas_price;

+	public static String MoneyDemo_Trip_cost;

+	public static String MoneyDemo_Trip_distance;

+	static {

+		// initialize resource bundle

+		NLS.initializeMessages(BUNDLE_NAME, DemoMessages.class);

+	}

+

+	private DemoMessages() {

+	}

+}

diff --git a/examples/icu/org.eclipse.uomo.examples.icu.console/pom.xml b/examples/icu/org.eclipse.uomo.examples.icu.console/pom.xml
new file mode 100644
index 0000000..af5d576
--- /dev/null
+++ b/examples/icu/org.eclipse.uomo.examples.icu.console/pom.xml
@@ -0,0 +1,15 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.eclipse.uomo</groupId>
+    <artifactId>org.eclipse.uomo.examples</artifactId>
+    <version>0.8.0-SNAPSHOT</version>
+  </parent>
+  <groupId>org.eclipse.uomo.examples.icu</groupId>
+  <artifactId>org.eclipse.uomo.examples.icu</artifactId>
+  <packaging>pom</packaging>
+  <name>Eclipse UOMo ICU Examples</name>
+  <modules>
+  	<module>org.eclipse.uomo.examples.icu.console</module>
+  </modules>
+</project>
\ No newline at end of file
diff --git a/examples/pom.xml b/examples/pom.xml
index 404d707..1b4e4ee 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -28,7 +28,9 @@
 		</plugins>
 	</build>
 	<modules>
+	<!--
 		<module>business</module>
+		-->
 		<module>units</module>
 		<module>ucum</module>
 	</modules>
@@ -37,14 +39,24 @@
 	<dependencyManagement>
 		<dependencies>
 			<dependency>
-				<groupId>org.unitsofmeasurement</groupId>
+				<groupId>javax.measure</groupId>
 				<artifactId>unit-api</artifactId>
-				<version>0.6.1</version>
+				<version>1.0</version>
 			</dependency>
 			<dependency>
-				<groupId>org.eclipse.uomo</groupId>
-				<artifactId>org.eclipse.uomo.units</artifactId>
-				<version>${uomo-version}</version>
+				<groupId>tech.units</groupId>
+				<artifactId>indriya</artifactId>
+				<version>${indriya-version}</version>
+			</dependency>
+			<dependency>
+				<groupId>si.uom</groupId>
+				<artifactId>si-units</artifactId>
+				<version>${si-version}</version>
+			</dependency>
+			<dependency>
+				<groupId>systems.uom</groupId>
+				<artifactId>systems-common</artifactId>
+				<version>${systems-version}</version>
 			</dependency>
 			<dependency>
 				<groupId>org.eclipse.uomo</groupId>
diff --git a/examples/ucum/org.eclipse.uomo.examples.ucum.console/.classpath b/examples/ucum/org.eclipse.uomo.examples.ucum.console/.classpath
index 906bfce..650b7b8 100644
--- a/examples/ucum/org.eclipse.uomo.examples.ucum.console/.classpath
+++ b/examples/ucum/org.eclipse.uomo.examples.ucum.console/.classpath
@@ -1,23 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>

 <classpath>

-	<classpathentry kind="src" output="target/classes" path="src/main/java">

-		<attributes>

-			<attribute name="optional" value="true"/>

-			<attribute name="maven.pomderived" value="true"/>

-		</attributes>

-	</classpathentry>

 	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">

 		<attributes>

 			<attribute name="maven.pomderived" value="true"/>

 		</attributes>

 	</classpathentry>

-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">

-		<attributes>

-			<attribute name="optional" value="true"/>

-			<attribute name="maven.pomderived" value="true"/>

-			<attribute name="test" value="true"/>

-		</attributes>

-	</classpathentry>

 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">

 		<attributes>

 			<attribute name="maven.pomderived" value="true"/>

@@ -28,5 +15,18 @@
 			<attribute name="maven.pomderived" value="true"/>

 		</attributes>

 	</classpathentry>

+	<classpathentry kind="src" output="target/classes" path="src/main/java">

+		<attributes>

+			<attribute name="optional" value="true"/>

+			<attribute name="maven.pomderived" value="true"/>

+		</attributes>

+	</classpathentry>

+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">

+		<attributes>

+			<attribute name="optional" value="true"/>

+			<attribute name="maven.pomderived" value="true"/>

+			<attribute name="test" value="true"/>

+		</attributes>

+	</classpathentry>

 	<classpathentry kind="output" path="target/classes"/>

 </classpath>

diff --git a/examples/ucum/org.eclipse.uomo.examples.ucum.console/pom.xml b/examples/ucum/org.eclipse.uomo.examples.ucum.console/pom.xml
index f591fc8..efaecf6 100644
--- a/examples/ucum/org.eclipse.uomo.examples.ucum.console/pom.xml
+++ b/examples/ucum/org.eclipse.uomo.examples.ucum.console/pom.xml
@@ -19,10 +19,14 @@
 			<artifactId>osgi</artifactId>
 		</dependency>
 		<dependency>
-			<groupId>org.unitsofmeasurement</groupId>
+			<groupId>javax.measure</groupId>
 			<artifactId>unit-api</artifactId>
 		</dependency>
 		<dependency>
+        	<groupId>tech.units</groupId>
+        	<artifactId>indriya</artifactId>
+        </dependency>
+		<dependency>
 			<groupId>junit</groupId>
 			<artifactId>junit</artifactId>
 			<scope>test</scope>
@@ -38,10 +42,6 @@
 		</dependency>
 		<dependency>
 			<groupId>org.eclipse.uomo</groupId>
-			<artifactId>org.eclipse.uomo.units</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.eclipse.uomo</groupId>
 			<artifactId>org.eclipse.uomo.util</artifactId>
 		</dependency>
 		<dependency>
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/.classpath b/examples/units/org.eclipse.uomo.examples.units.android/.classpath
deleted file mode 100644
index 64db939..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/.classpath
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<classpath>

-	<classpathentry kind="output" path="bin"/>

-</classpath>

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/.gitignore b/examples/units/org.eclipse.uomo.examples.units.android/.gitignore
deleted file mode 100644
index ea8c4bf..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/target
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/.project b/examples/units/org.eclipse.uomo.examples.units.android/.project
deleted file mode 100644
index 87670e6..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/.project
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<projectDescription>

-	<name>android-player-root</name>

-	<comment></comment>

-	<projects>

-	</projects>

-	<buildSpec>

-		<buildCommand>

-			<name>org.eclipse.jdt.core.javabuilder</name>

-			<arguments>

-			</arguments>

-		</buildCommand>

-		<buildCommand>

-			<name>org.eclipse.m2e.core.maven2Builder</name>

-			<arguments>

-			</arguments>

-		</buildCommand>

-	</buildSpec>

-	<natures>

-		<nature>org.eclipse.m2e.core.maven2Nature</nature>

-		<nature>org.eclipse.jdt.core.javanature</nature>

-	</natures>

-</projectDescription>

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/.settings/org.eclipse.core.resources.prefs b/examples/units/org.eclipse.uomo.examples.units.android/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index e4c6177..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue Jan 03 22:31:33 CET 2012

-eclipse.preferences.version=1

-encoding/<project>=UTF-8

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/.settings/org.eclipse.jdt.core.prefs b/examples/units/org.eclipse.uomo.examples.units.android/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 65d554f..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,12 +0,0 @@
-#Tue Nov 22 20:14:20 CST 2011

-eclipse.preferences.version=1

-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6

-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve

-org.eclipse.jdt.core.compiler.compliance=1.6

-org.eclipse.jdt.core.compiler.debug.lineNumber=generate

-org.eclipse.jdt.core.compiler.debug.localVariable=generate

-org.eclipse.jdt.core.compiler.debug.sourceFile=generate

-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

-org.eclipse.jdt.core.compiler.source=1.6

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/.settings/org.eclipse.m2e.core.prefs b/examples/units/org.eclipse.uomo.examples.units.android/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644
index e7937a9..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,5 +0,0 @@
-#Tue Nov 22 20:19:49 CST 2011

-activeProfiles=

-eclipse.preferences.version=1

-resolveWorkspaceProjects=true

-version=1

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/player/.classpath b/examples/units/org.eclipse.uomo.examples.units.android/player/.classpath
deleted file mode 100644
index 635998d..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/player/.classpath
+++ /dev/null
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<classpath>

-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>

-	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>

-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>

-	<classpathentry kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>

-	<classpathentry kind="src" output="bin/classes" path="gen">

-		<attributes>

-			<attribute name="optional" value="true"/>

-		</attributes>

-	</classpathentry>

-	<classpathentry kind="src" output="bin/classes" path="src/main/java"/>

-	<classpathentry kind="output" path="bin/classes"/>

-</classpath>

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/player/.gitignore b/examples/units/org.eclipse.uomo.examples.units.android/player/.gitignore
deleted file mode 100644
index 945bcb2..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/player/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-/bin
-/gen
-/target
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/player/.project b/examples/units/org.eclipse.uomo.examples.units.android/player/.project
deleted file mode 100644
index 06bd759..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/player/.project
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>player</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>com.android.ide.eclipse.adt.ApkBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-	</natures>
-</projectDescription>
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/player/.settings/org.eclipse.core.resources.prefs b/examples/units/org.eclipse.uomo.examples.units.android/player/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index e8b6729..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/player/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-#Wed Jan 04 05:00:24 CET 2012

-eclipse.preferences.version=1

-encoding//src/main/java=UTF-8

-encoding/<project>=UTF-8

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/player/.settings/org.eclipse.jdt.core.prefs b/examples/units/org.eclipse.uomo.examples.units.android/player/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index d418e69..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/player/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,6 +0,0 @@
-#Tue Jan 03 22:31:34 CET 2012

-eclipse.preferences.version=1

-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5

-org.eclipse.jdt.core.compiler.compliance=1.5

-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning

-org.eclipse.jdt.core.compiler.source=1.5

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/player/.settings/org.eclipse.m2e.core.prefs b/examples/units/org.eclipse.uomo.examples.units.android/player/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644
index 8621470..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/player/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,5 +0,0 @@
-#Tue Nov 22 20:33:11 CST 2011

-activeProfiles=

-eclipse.preferences.version=1

-resolveWorkspaceProjects=true

-version=1

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/player/AndroidManifest.xml b/examples/units/org.eclipse.uomo.examples.units.android/player/AndroidManifest.xml
deleted file mode 100644
index 8d5c1a8..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/player/AndroidManifest.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-  package="org.org.eclipse.uomo.examples.units.android" android:versionCode="1" android:versionName="0.1.0.SNAPSHOT">
-
-  <application android:icon="@drawable/icon" android:label="@string/app_name">
-    <activity android:name=".HelloAndroidActivity">
-      <intent-filter>
-        <action android:name="android.intent.action.MAIN" />
-        <category android:name="android.intent.category.LAUNCHER" />
-      </intent-filter>
-    </activity>
-  </application>
-
-</manifest>
-
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/player/project.properties b/examples/units/org.eclipse.uomo.examples.units.android/player/project.properties
deleted file mode 100644
index ea89160..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/player/project.properties
+++ /dev/null
@@ -1,11 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system use,
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-
-# Project target.
-target=android-8
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/player/res/drawable-hdpi/icon.png b/examples/units/org.eclipse.uomo.examples.units.android/player/res/drawable-hdpi/icon.png
deleted file mode 100644
index afc1a0e..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/player/res/drawable-hdpi/icon.png
+++ /dev/null
Binary files differ
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/player/res/drawable-ldpi/icon.png b/examples/units/org.eclipse.uomo.examples.units.android/player/res/drawable-ldpi/icon.png
deleted file mode 100644
index 5a89924..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/player/res/drawable-ldpi/icon.png
+++ /dev/null
Binary files differ
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/player/res/drawable-mdpi/icon.png b/examples/units/org.eclipse.uomo.examples.units.android/player/res/drawable-mdpi/icon.png
deleted file mode 100644
index 7e079bb..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/player/res/drawable-mdpi/icon.png
+++ /dev/null
Binary files differ
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/player/res/layout/main.xml b/examples/units/org.eclipse.uomo.examples.units.android/player/res/layout/main.xml
deleted file mode 100644
index 09d2d1b..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/player/res/layout/main.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    >
-<TextView  
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content" 
-    android:text="@string/hello"
-    />
-</LinearLayout>
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/player/res/values/strings.xml b/examples/units/org.eclipse.uomo.examples.units.android/player/res/values/strings.xml
deleted file mode 100644
index 8862e88..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/player/res/values/strings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
-    <string name="hello">Hello player!</string>
-    <string name="app_name">player</string>
-</resources>
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/player/src/main/java/org/org/eclipse/uomo/examples/units/android/HelloAndroidActivity.java b/examples/units/org.eclipse.uomo.examples.units.android/player/src/main/java/org/org/eclipse/uomo/examples/units/android/HelloAndroidActivity.java
deleted file mode 100644
index 6bf7ec0..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/player/src/main/java/org/org/eclipse/uomo/examples/units/android/HelloAndroidActivity.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.org.eclipse.uomo.examples.units.android;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.util.Log;
-
-public class HelloAndroidActivity extends Activity {
-
-    private static String TAG = "player";
-
-    /**
-     * Called when the activity is first created.
-     * @param savedInstanceState If the activity is being re-initialized after 
-     * previously being shut down then this Bundle contains the data it most 
-     * recently supplied in onSaveInstanceState(Bundle). <b>Note: Otherwise it is null.</b>
-     */
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-		Log.i(TAG, "onCreate");
-        setContentView(R.layout.main);
-    }
-
-}
-
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/.classpath b/examples/units/org.eclipse.uomo.examples.units.android/web/.classpath
deleted file mode 100644
index d8779b6..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/.classpath
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<classpath>

-	<classpathentry kind="src" output="target/classes" path="src/main/java">

-		<attributes>

-			<attribute name="optional" value="true"/>

-			<attribute name="maven.pomderived" value="true"/>

-		</attributes>

-	</classpathentry>

-	<classpathentry kind="con" path="org.eclipse.jst.server.core.container/org.jboss.ide.eclipse.as.core.server.runtime.runtimeTarget/JBoss 7.0 Runtime"/>

-	<classpathentry kind="src" output="target/test-classes" path="src/test/java">

-		<attributes>

-			<attribute name="optional" value="true"/>

-			<attribute name="maven.pomderived" value="true"/>

-			<attribute name="test" value="true"/>

-		</attributes>

-	</classpathentry>

-	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">

-		<attributes>

-			<attribute name="maven.pomderived" value="true"/>

-		</attributes>

-	</classpathentry>

-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">

-		<attributes>

-			<attribute name="maven.pomderived" value="true"/>

-		</attributes>

-	</classpathentry>

-	<classpathentry kind="output" path="target/classes"/>

-</classpath>

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/.gitignore b/examples/units/org.eclipse.uomo.examples.units.android/web/.gitignore
deleted file mode 100644
index ea8c4bf..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/target
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/.project b/examples/units/org.eclipse.uomo.examples.units.android/web/.project
deleted file mode 100644
index e13faeb..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/.project
+++ /dev/null
@@ -1,48 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>web</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.wst.common.project.facet.core.builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.jboss.tools.ws.jaxrs.metamodelBuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.wst.validation.validationbuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-		<buildCommand>
-			<name>org.eclipse.m2e.core.maven2Builder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
-		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-		<nature>org.eclipse.m2e.core.maven2Nature</nature>
-		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
-		<nature>org.eclipse.wst.jsdt.core.jsNature</nature>
-		<nature>org.jboss.tools.ws.jaxrs.nature</nature>
-	</natures>
-</projectDescription>
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/.jsdtscope b/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/.jsdtscope
deleted file mode 100644
index b46b920..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/.jsdtscope
+++ /dev/null
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="src" path="src/main/webapp"/>
-	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.JRE_CONTAINER"/>
-	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.WebProject">
-		<attributes>
-			<attribute name="hide" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.wst.jsdt.launching.baseBrowserLibrary"/>
-	<classpathentry kind="output" path=""/>
-</classpath>
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.core.resources.prefs b/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index 5bd7052..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-#Sun Apr 01 20:51:50 CEST 2012

-eclipse.preferences.version=1

-encoding//src/main/java=UTF-8

-encoding/<project>=UTF-8

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.jdt.core.prefs b/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index ddd0785..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,11 +0,0 @@
-eclipse.preferences.version=1

-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8

-org.eclipse.jdt.core.compiler.compliance=1.8

-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

-org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled

-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

-org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning

-org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore

-org.eclipse.jdt.core.compiler.release=disabled

-org.eclipse.jdt.core.compiler.source=1.8

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.m2e.core.prefs b/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.m2e.core.prefs
deleted file mode 100644
index bf78df6..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.m2e.core.prefs
+++ /dev/null
@@ -1,5 +0,0 @@
-#Tue Nov 22 20:27:02 CST 2011

-activeProfiles=

-eclipse.preferences.version=1

-resolveWorkspaceProjects=true

-version=1

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml b/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml
deleted file mode 100644
index cc81385..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.wst.common.project.facet.core.prefs.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<root>
-  <facet id="jst.jaxrs">
-    <node name="libprov">
-      <attribute name="provider-id" value="jaxrs-no-op-library-provider"/>
-    </node>
-  </facet>
-</root>
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.wst.common.project.facet.core.xml b/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.wst.common.project.facet.core.xml
deleted file mode 100644
index 0cb3f4b..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.wst.common.project.facet.core.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>

-<faceted-project>

-  <fixed facet="wst.jsdt.web"/>

-  <installed facet="jst.web" version="2.3"/>

-  <installed facet="wst.jsdt.web" version="1.0"/>

-  <installed facet="jst.jaxrs" version="1.1"/>

-  <installed facet="jboss.m2" version="1.0"/>

-  <installed facet="java" version="1.8"/>

-</faceted-project>

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.wst.jsdt.ui.superType.container b/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.wst.jsdt.ui.superType.container
deleted file mode 100644
index 3bd5d0a..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.wst.jsdt.ui.superType.container
+++ /dev/null
@@ -1 +0,0 @@
-org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.wst.jsdt.ui.superType.name b/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.wst.jsdt.ui.superType.name
deleted file mode 100644
index 05bd71b..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/.settings/org.eclipse.wst.jsdt.ui.superType.name
+++ /dev/null
@@ -1 +0,0 @@
-Window
\ No newline at end of file
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/src/main/java/org/eclipse/uomo/examples/units/android/web/UnitConverterServlet.java b/examples/units/org.eclipse.uomo.examples.units.android/web/src/main/java/org/eclipse/uomo/examples/units/android/web/UnitConverterServlet.java
deleted file mode 100644
index cfb4767..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/src/main/java/org/eclipse/uomo/examples/units/android/web/UnitConverterServlet.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.eclipse.uomo.examples.units.android.web;

-

-import static org.eclipse.uomo.units.SI.CELSIUS;

-import static org.eclipse.uomo.units.impl.system.USCustomary.FAHRENHEIT;

-

-import java.io.IOException;

-import java.io.PrintWriter;

-

-import javax.servlet.ServletException;

-import javax.servlet.http.HttpServlet;

-import javax.servlet.http.HttpServletRequest;

-import javax.servlet.http.HttpServletResponse;

-import org.eclipse.uomo.units.*;

-import org.eclipse.uomo.units.impl.quantity.TemperatureAmount;

-import javax.measure.Quantity;

-import org.unitsofmeasurement.quantity.Temperature;

-import javax.measure.UnitConverter;

-

-/**

- * Servlet implementation class UnitConverterServlet

- * @param <Q>

- */

-public class UnitConverterServlet<Q extends Quantity<Q>> extends HttpServlet {

-	private static final long serialVersionUID = 1L;

-	private final Quantity<Temperature> amount;

-	private UnitConverter converter;

-	

-    /**

-     * Default constructor. 

-     */

-    public UnitConverterServlet() {

-        amount = new TemperatureAmount(0, CELSIUS);

-    }

-

-	/**

-	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse

-	 *      response)

-	 */

-	public void doGet(HttpServletRequest in, HttpServletResponse output)

-			throws ServletException, IOException {

-

-		output.setContentType("text/html");

-		PrintWriter out = output.getWriter();

-

-		out.println("<html><head><title>Temperature Conversion</title></head>");

-		out.println("<body>");

-		out.println("<h1> " + FAHRENHEIT + " to " + CELSIUS + " conversion</h1>");

-		if (in.getParameter("t_in") != null) {

-			String supplied_temp = in.getParameter("t_in");

-			double base_temp = -999;

-			TemperatureAmount base_temp_amt = null;

-			boolean valid = false;

-			try {

-				base_temp = Double.parseDouble(supplied_temp);

-				base_temp_amt = new TemperatureAmount(base_temp, FAHRENHEIT);

-				valid = true;

-			} catch (NumberFormatException e) {

-				out.println("<h4><font color=red>"

-						+ "Invalid Temperature Supplied</font></h4)<br>");

-			}

-			if (valid) {

-				out.println("<h4>Temperature " + base_temp_amt

-						//+ " "+ FAHRENHEIT 

-						+ " converts to "						

-						//+ ((((double) base_temp - 32.0d) / 9.0d) * 5.0d)

-						//+ " " + CELSIUS

-						+ base_temp_amt.to(CELSIUS) 

-						+ " </h4>");

-			}

-		}

-		out.println("<form>Enter " + FAHRENHEIT + ": ");

-		out.println("<input name=t_in>");

-		out.println("<input type=submit></form><br>");

-

-		out.println("<a href=index.jsp>Return to home page of this webapp</a><br><br>");

-		out.println("</body></html>");

-		out.close();

-	}

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/src/main/java/org/eclipse/uomo/examples/units/android/web/sandbox/Tempconv.java b/examples/units/org.eclipse.uomo.examples.units.android/web/src/main/java/org/eclipse/uomo/examples/units/android/web/sandbox/Tempconv.java
deleted file mode 100644
index 7be0940..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/src/main/java/org/eclipse/uomo/examples/units/android/web/sandbox/Tempconv.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.eclipse.uomo.examples.units.android.web.sandbox;

-

-import java.io.IOException;

-import java.io.PrintWriter;

-

-import javax.servlet.ServletException;

-import javax.servlet.http.HttpServlet;

-import javax.servlet.http.HttpServletRequest;

-import javax.servlet.http.HttpServletResponse;

-

-/**

- * Servlet implementation class Tempconv

- */

-public class Tempconv extends HttpServlet {

-	private static final long serialVersionUID = 1L;

-

-	/**

-	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse

-	 *      response)

-	 */

-	public void doGet(HttpServletRequest in, HttpServletResponse output)

-			throws ServletException, IOException {

-

-		output.setContentType("text/html");

-		PrintWriter out = output.getWriter();

-

-		out.println("<html><head><title>Temperature Conversion</title></head>");

-		out.println("<body>");

-		out.println("<h1>Degrees F to degrees C conversion</h1>");

-		if (in.getParameter("t_in") != null) {

-			String supplied_temp = in.getParameter("t_in");

-			float base_temp = -999;

-			boolean valid = false;

-			try {

-				base_temp = Float.parseFloat(supplied_temp);

-				valid = true;

-			} catch (NumberFormatException e) {

-				out.println("<h4><font color=red>"

-						+ "Invalid Temperature Supplied</font></h4)<br>");

-			}

-			if (valid) {

-				out.println("<h4>Temperature " + base_temp

-						+ " deg f converts to "

-						+ ((((float) base_temp - 32.0f) / 9.0f) * 5.0f)

-						+ " deg celcius </h4>");

-			}

-		}

-		out.println("<form>Enter degrees F: ");

-		out.println("<input name=t_in>");

-		out.println("<input type=submit></form><br>");

-

-		out.println("<a href=index.jsp>Return to home page of this webapp</a><br><br>");

-		out.println("Initial contribution by Well House Consultants Ltd<br>");

-		out.println("web <a href=http://www.wellho.net>http://www.wellho.net</a><br>");

-		out.println("email <a href=mailto:info@wellho.net>info@wellho.net</a><br>");

-		out.println("</body></html>");

-		out.close();

-	}

-

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/src/main/webapp/WEB-INF/web.xml b/examples/units/org.eclipse.uomo.examples.units.android/web/src/main/webapp/WEB-INF/web.xml
deleted file mode 100644
index 28802c7..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/src/main/webapp/WEB-INF/web.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<!DOCTYPE web-app PUBLIC
- "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
- "http://java.sun.com/dtd/web-app_2_3.dtd" >
-
-<web-app>
-  <display-name>UOMo Units Android Example Web Application</display-name>
-  <servlet>
-  	<servlet-name>UnitConverterServlet</servlet-name>
-  	<display-name>UnitConverterServlet</display-name>
-  	<description>Unit Converter</description>
-  	<servlet-class>org.eclipse.uomo.examples.units.android.web.UnitConverterServlet</servlet-class>
-  	<init-param>
-  		<param-name>unit</param-name>
-  		<param-value></param-value>
-  		<description>Unit</description>
-  	</init-param>
-  	<init-param>
-  		<param-name>value</param-name>
-  		<param-value></param-value>
-  		<description>Value</description>
-  	</init-param>
-  </servlet>
-  <servlet>
-  	<servlet-name>Tempconv</servlet-name>
-  	<display-name>Tempconv</display-name>
-  	<description>Temperature Converter</description>
-  	<servlet-class>org.eclipse.uomo.examples.units.android.web.sandbox.Tempconv</servlet-class>
-  </servlet>
-  <servlet-mapping>
-  	<servlet-name>UnitConverterServlet</servlet-name>
-  	<url-pattern>/UnitConverter</url-pattern>
-  </servlet-mapping>
-  <servlet-mapping>
-  	<servlet-name>Tempconv</servlet-name>
-  	<url-pattern>/Tempconv</url-pattern>
-  </servlet-mapping>
-</web-app>
diff --git a/examples/units/org.eclipse.uomo.examples.units.android/web/src/main/webapp/index.jsp b/examples/units/org.eclipse.uomo.examples.units.android/web/src/main/webapp/index.jsp
deleted file mode 100644
index c344610..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.android/web/src/main/webapp/index.jsp
+++ /dev/null
@@ -1,13 +0,0 @@
-<%@ page import="org.unitsofmeasurement.quantity.*, org.eclipse.uomo.units.*, org.eclipse.uomo.units.impl.quantity.*" %>
-<html>
-<head>
-	<title>Eclipse UOMo</title>
-</head>
-<body>
-<h2>Hello UOMo!</h2>
-<%
-	Quantity<Length> q = new LengthAmount(12, SI.METRE);
-%>
-<%= q %>
-</body>
-</html>
diff --git a/examples/units/org.eclipse.uomo.examples.units.console/pom.xml b/examples/units/org.eclipse.uomo.examples.units.console/pom.xml
index f1362f6..92e7dd6 100644
--- a/examples/units/org.eclipse.uomo.examples.units.console/pom.xml
+++ b/examples/units/org.eclipse.uomo.examples.units.console/pom.xml
@@ -10,13 +10,21 @@
 	<name>UOMo Units Console Examples</name>
 	<dependencies>
 		<dependency>
-            <groupId>org.unitsofmeasurement</groupId>
+            <groupId>javax.measure</groupId>
             <artifactId>unit-api</artifactId>
 		</dependency>	
         <dependency>
-        	<groupId>org.eclipse.uomo</groupId>
-        	<artifactId>org.eclipse.uomo.units</artifactId>
-        </dependency>	
+        	<groupId>tech.units</groupId>
+        	<artifactId>indriya</artifactId>
+        </dependency>
+       	<dependency>
+			<groupId>si.uom</groupId>
+			<artifactId>si-units</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>systems.uom</groupId>
+			<artifactId>systems-common</artifactId>
+		</dependency>
 		<dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/ConverterExample.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/ConverterExample.java
index 096a3fd..8c45b7e 100644
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/ConverterExample.java
+++ b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/ConverterExample.java
@@ -1,5 +1,5 @@
 /**

- * Copyright (c) 2005, 2012, Werner Keil and others.

+ * Copyright (c) 2005, 2020, Werner Keil and others.

  * All rights reserved. This program and the accompanying materials

  * are made available under the terms of the Eclipse Public License v1.0

  * which accompanies this distribution, and is available at

@@ -10,17 +10,21 @@
  */

 package org.eclipse.uomo.examples.units.console;

 

-import static org.eclipse.uomo.units.SI.*;

-import static org.eclipse.uomo.units.SI.Prefix.KILO;

-import static org.eclipse.uomo.units.impl.system.USCustomary.*;

+import static si.uom.SI.*;

+import static tech.units.indriya.unit.MetricPrefix.KILO;

+import static systems.uom.common.USCustomary.FOOT;

+import static systems.uom.common.USCustomary.INCH;

+import static systems.uom.common.USCustomary.MILE;

+import static systems.uom.common.USCustomary.OUNCE;

 

 import java.math.BigDecimal;

-import java.math.MathContext;

+import javax.measure.Quantity;

+import si.uom.SI;

 

-import org.eclipse.uomo.units.IMeasure;

-import org.eclipse.uomo.units.SI;

-import org.eclipse.uomo.units.impl.quantity.LengthAmount;

-import org.unitsofmeasurement.quantity.Length;

+import tech.units.indriya.ComparableQuantity;

+import tech.units.indriya.quantity.Quantities;

+

+import javax.measure.quantity.Length;

 import javax.measure.UnitConverter;

 

 public class ConverterExample {

@@ -41,30 +45,28 @@
 	    System.out.println(KILOGRAM.equals(KILO(GRAM)));

 	    System.out.println(KILOGRAM.equals(KILO(OUNCE)));

 	    

-	    LengthAmount foot = new LengthAmount(1, FOOT); 

-	    LengthAmount inches = new LengthAmount(24, INCH);

+	    Quantity foot =  Quantities.getQuantity(1, FOOT); 

+	    ComparableQuantity inches = Quantities.getQuantity(24, INCH);

 	    double ratio = INCH.getConverterTo(FOOT).convert(24);

-	    IMeasure<Length> lRatio = inches.to(FOOT);

+	    Quantity<Length> lRatio = inches.to(FOOT);

 	    //long ratio = inches.longValue(FOOT);

 	    //double ratio = foot.doubleValue(INCH);

 	    System.out.println("Ratio: " + ratio);

 	    @SuppressWarnings("unchecked")

-		IMeasure<Length> iRatio = (IMeasure<Length>) foot.divide(inches);

+		Quantity<Length> iRatio = (Quantity<Length>) foot.divide(inches);

 	    System.out.println("Ratio2: " + iRatio);

 	    System.out.println("Ratio3: " + lRatio);

 	    //BaseAmount<Length> qaRatio = (BaseAmount<Length>)lRatio;

 	    //System.out.println(qaRatio.getNumber());

 	    

-	    IMeasure<Length> l1 = new LengthAmount(1, MILE);

-	    IMeasure<Length> l2 = l1.to(FOOT);

+	    Quantity<Length> l1 = Quantities.getQuantity(1, MILE);

+	    Quantity<Length> l2 = l1.to(FOOT);

 	    System.out.println(l1 + " = " + l2);

 	    

-	    LengthAmount x = new LengthAmount(BigDecimal.valueOf(1.0001d), SI.Prefix.KILO(SI.METRE));

-	    IMeasure<Length> xi = x.to(SI.METRE);

-	    IMeasure<Length> xj = x.to(SI.METRE, MathContext.UNLIMITED);

-	    System.out.println("x="+x+" xi="+xi+"+xj="+xj);

+	    ComparableQuantity x = Quantities.getQuantity(BigDecimal.valueOf(1.0001d), KILO(SI.METRE));

+	    Quantity<Length> xi = x.to(SI.METRE);

+	    //Quantity<Length> xj = x.to(SI.METRE, MathContext.UNLIMITED);

+	    System.out.println("x="+x+" xi="+xi); //+"+xj="+xj

 	    // Results in: x=1.0001 km xi=1000.0 m

-

 	}

-

 }

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/Demo.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/Demo.java
deleted file mode 100644
index 0342dbf..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/Demo.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/**

- * Copyright (c) 2005, 2014, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil, Martin Desruisseaux - initial API and implementation

- */

-package org.eclipse.uomo.examples.units.console;

-

-import static org.eclipse.uomo.units.SI.*;

-import static org.eclipse.uomo.units.SI.Prefix.*;

-import static org.eclipse.uomo.units.impl.system.USCustomary.FOOT;

-import static org.eclipse.uomo.units.impl.system.USCustomary.INCH;

-import static org.eclipse.uomo.units.impl.system.USCustomary.POUND;

-import static org.eclipse.uomo.examples.units.types.PolishObsolete.*;

-

-import org.eclipse.uomo.units.IMeasure;

-import org.eclipse.uomo.units.impl.quantity.LengthAmount;

-import org.eclipse.uomo.units.impl.quantity.MassAmount;

-import org.eclipse.uomo.units.impl.quantity.TimeAmount;

-import org.unitsofmeasurement.quantity.Length;

-import org.unitsofmeasurement.quantity.Mass;

-import org.unitsofmeasurement.quantity.Time;

-

-/**

- * @author <a href="mailto:desruisseaux@users.sourceforge.net">Martin Desruisseaux</a>

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 0.8.1, $Date: 2014-04-03 $

- */

-public class Demo {

-

-	private static IMeasure<Length> getSomeLength() {

-        return new LengthAmount(20, METRE);

-    }

-	

-	private static IMeasure<Length> getMoreLength() {

-        return new LengthAmount(30, INCH);

-    }

-	

-	private static IMeasure<Mass> getSomeMass() {

-        return new MassAmount(40, KILOGRAM);

-    }

-	

-	private static IMeasure<Mass> getMoreMass() {

-		return new MassAmount(50, POUND);

-	}

-	

-	private static IMeasure<Time> getTime() {

-		return new TimeAmount(10, SECOND);

-	}

-

-    public static void main(String[] args) {

-    	IMeasure<Length> someLength = getSomeLength();

-        System.out.println(Messages.Demo_0 + someLength);

-        IMeasure<Length> moreLength = getMoreLength();

-        System.out.println(Messages.Demo_1 + moreLength);

-        System.out.println();

-

-        IMeasure<Mass> someMass = getSomeMass();

-        System.out.println(Messages.Demo_2 + someMass);        

-        IMeasure<Mass> moreMass = getMoreMass();

-        System.out.println(Messages.Demo_3 + moreMass);

-        System.out.println();

-        

-        IMeasure<Time> time = getTime();

-        System.out.println(Messages.Demo_4 + time);

-        

-        IMeasure<?> result = someLength.divide(time);

-        System.out.println(Messages.Demo_5 + result);

-        result = moreLength.divide(time);

-        System.out.println(Messages.Demo_6 + result);

-        System.out.println();

-        

-        IMeasure<Length> convertedLength = moreLength.to(FOOT);

-        System.out.println(Messages.Demo_7 + convertedLength);

-        

-        IMeasure<Length> convertedLengthPL = moreLength.to(ELL);

-        System.out.println(Messages.Demo_8 + convertedLengthPL);

-        

-        

-        System.out.println();

-        someLength = new LengthAmount(1, MILLI(METRE));

-        System.out.println(Messages.Demo_9 + someLength);

-        IMeasure<Length> someMoreLength = new LengthAmount(400, KILO(METRE));

-        someMass = new MassAmount(60, MILLI(GRAM));

-        System.out.println(Messages.Demo_10 + someMass);

-        System.out.println(Messages.Demo_11 + someMoreLength);

-    }

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/HelloUnits.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/HelloUnits.java
index 78cbb42..021ee3b 100644
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/HelloUnits.java
+++ b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/HelloUnits.java
@@ -1,5 +1,5 @@
 /**

- * Copyright (c) 2005, 2013, Werner Keil and others.

+ * Copyright (c) 2005, 2020, Werner Keil and others.

  * All rights reserved. This program and the accompanying materials

  * are made available under the terms of the Eclipse Public License v1.0

  * which accompanies this distribution, and is available at

@@ -10,18 +10,18 @@
  */

 package org.eclipse.uomo.examples.units.console;

 

-import org.eclipse.uomo.units.IMeasure;

-import org.eclipse.uomo.units.SI;

-import org.eclipse.uomo.units.impl.quantity.AreaAmount;

-import org.eclipse.uomo.units.impl.quantity.LengthAmount;

-import org.eclipse.uomo.units.impl.quantity.TimeAmount;

-import org.eclipse.uomo.units.impl.system.USCustomary;

+import javax.measure.Quantity;

 import javax.measure.Unit;

 import javax.measure.UnitConverter;

-import org.unitsofmeasurement.quantity.Acceleration;

-import org.unitsofmeasurement.quantity.Area;

-import org.unitsofmeasurement.quantity.Length;

-import org.unitsofmeasurement.quantity.Time;

+import javax.measure.quantity.Area;

+import javax.measure.quantity.Length;

+import javax.measure.quantity.Speed;

+import javax.measure.quantity.Time;

+

+import si.uom.SI;

+import systems.uom.common.USCustomary;

+import tech.units.indriya.ComparableQuantity;

+import tech.units.indriya.quantity.Quantities;

 

 /**

  * A 'Hello World!' style example showing some basic units and operations.

@@ -34,13 +34,13 @@
 	 * @param args

 	 */

 	public static void main(String[] args) {

-		LengthAmount length = new LengthAmount(10, SI.METRE);

+		ComparableQuantity length = Quantities.getQuantity(10, SI.METRE);

 //		LengthAmount length = new LengthAmount(10, SI.KILOGRAM); // this won't work ;-)

 		

 		System.out.println(length);

-		Unit<Length> lenUnit =  length.unit();

+		Unit<Length> lenUnit =  length.getUnit();

 		

-		System.out.print(length.doubleValue(USCustomary.FOOT)); 

+		//System.out.print(length.doubleValue(USCustomary.FOOT)); 

 		System.out.println(" " + USCustomary.FOOT);

 //		System.out.println(length.doubleValue(USCustomary.POUND)); // this won't work either.

 		UnitConverter inchConverter = lenUnit.getConverterTo(USCustomary.INCH);

@@ -48,15 +48,15 @@
 		System.out.println(" " + USCustomary.INCH);

 		

 		@SuppressWarnings("unchecked")

-		AreaAmount area = new AreaAmount(length.getValue().doubleValue() * length.getValue().doubleValue(), 

-				(Unit<Area>) length.unit().multiply(SI.METRE));

+		ComparableQuantity area = Quantities.getQuantity(length.getValue().doubleValue() * length.getValue().doubleValue(), 

+				(Unit<Area>) length.getUnit().multiply(SI.METRE));

 		System.out.println(area);

 		

 		// Equivalent to 

-		IMeasure<Length> meters = new LengthAmount(5, SI.METRE);

-		IMeasure<Time> secs = new TimeAmount(2, SI.SECOND);

+		Quantity<Length> meters = Quantities.getQuantity(5, SI.METRE);

+		Quantity<Time> secs = Quantities.getQuantity(2, SI.SECOND);

 		@SuppressWarnings("unchecked")

-		IMeasure<Acceleration> speed = (IMeasure<Acceleration>) meters.divide(secs);

+		Quantity<Speed> speed = (Quantity<Speed>) meters.divide(secs);

 		System.out.println(meters + 

 				"; " + secs +

 				"; " + speed);

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/UnitsExample.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/UnitsExample.java
index c487640..1af8655 100644
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/UnitsExample.java
+++ b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/UnitsExample.java
@@ -1,18 +1,18 @@
 package org.eclipse.uomo.examples.units.console;

 

-import org.unitsofmeasurement.quantity.Acceleration;

-import org.unitsofmeasurement.quantity.Length;

-import org.unitsofmeasurement.quantity.Time;

+import javax.measure.quantity.Speed;

+import javax.measure.quantity.Length;

+import javax.measure.quantity.Time;

 import javax.measure.Unit;

 

-import static org.eclipse.uomo.units.SI.*;

+import static si.uom.SI.*;

 

 public class UnitsExample {

 	  public static void main(String[] args) {

 	    Unit<Length> distance = METRE.multiply(5);

 	    Unit<Time> time = SECOND.multiply(10);

 	    @SuppressWarnings("unchecked")

-		Unit<Acceleration> speed = (Unit<Acceleration>) distance.divide(time);

+		Unit<Speed> speed = (Unit<Speed>) distance.divide(time);

 

 	    System.out.println("Speed = " + speed);

 

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/Beerfest.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/Beerfest.java
deleted file mode 100644
index 0a36570..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/Beerfest.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.eclipse.uomo.examples.units.console.sandbox;
-
-import org.eclipse.uomo.units.IMeasure;
-import org.eclipse.uomo.units.impl.system.Imperial;
-import org.eclipse.uomo.units.impl.system.USCustomary;
-import org.eclipse.uomo.units.impl.quantity.VolumeAmount;
-import org.unitsofmeasurement.quantity.Volume;
-
-public class Beerfest {
-
-	public static void main(String[] args) {
-		IMeasure<Volume> v= new VolumeAmount(.5d, USCustomary.LITER);
-		System.out.println(v);
-		System.out.print(v.doubleValue(Imperial.PINT)); 
-		System.out.println(" " + Imperial.PINT);
-		System.out.print(v.doubleValue(USCustomary.OUNCE_LIQUID)); 
-		System.out.println(" " + USCustomary.OUNCE_LIQUID);
-	}
-
-}
diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/EqualsTest.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/EqualsTest.java
deleted file mode 100644
index 132805a..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/EqualsTest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**

- * Copyright (c) 2012, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.examples.units.console.sandbox;

-

-import static org.eclipse.uomo.units.SI.Prefix.KILO;

-

-import org.eclipse.uomo.units.SI;

-import org.eclipse.uomo.units.impl.quantity.MassAmount;

-

-public class EqualsTest {

-	public static void main(String[] args) {

-		// TODO Bug 338334 this could be a JUnit test, convert into after issue

-		// resolved.

-		MassAmount mass = new MassAmount(1000, SI.GRAM);

-		MassAmount mass2 = new MassAmount(1, SI.KILOGRAM);

-		MassAmount mass3 = new MassAmount(1, KILO(SI.GRAM));

-		System.out.println(mass.equals(mass2) + "; " + mass.equals(mass3)

-				+ "; " + mass2.equals(mass3));

-	}

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/HealthExamples.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/HealthExamples.java
deleted file mode 100644
index 8f6d2fa..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/HealthExamples.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * Copyright (c) 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil - initial API and implementation
- */
-package org.eclipse.uomo.examples.units.console.sandbox;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import org.eclipse.uomo.examples.units.types.Health;
-import org.eclipse.uomo.examples.units.types.HeartRate;
-import org.eclipse.uomo.examples.units.types.HeartRateAmount;
-import org.eclipse.uomo.units.IMeasure;
-
-/**
- * @author Werner Keil
- * @version 0.1
- */
-public class HealthExamples {
-
-	/**
-	 * @param args
-	 */
-	public static void main(String[] args) {
-		List<IMeasure<HeartRate>> rates = new LinkedList<IMeasure<HeartRate>>();
-		int value = 0;
-		for (int i=0; i<50; i++) {
-	        value = (int) (Math.random() * 40 + 50);
-		
-			IMeasure<HeartRate> rate = new HeartRateAmount(value, Health.BPM);
-			rates.add(rate);
-		}
-		
-		for (IMeasure<HeartRate> r : rates) {
-			System.out.println("Rate: " + r);
-		}
-	}
-
-}
diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/KawaExample.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/KawaExample.java
deleted file mode 100644
index c3b2500..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/KawaExample.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.eclipse.uomo.examples.units.console.sandbox;
-
-import org.eclipse.uomo.units.IMeasure;
-import org.eclipse.uomo.units.SI;
-import org.eclipse.uomo.units.impl.quantity.LengthAmount;
-import org.eclipse.uomo.units.impl.quantity.MassAmount;
-import org.unitsofmeasurement.quantity.Length;
-import org.unitsofmeasurement.quantity.Mass;
-import javax.measure.Quantity;
-import javax.measure.Unit;
-
-
-public class KawaExample {
-
-	/**
-	 * @param args
-	 */
-	public static void main(String[] args) {
-		Unit<Length> m = SI.METRE;
-		Unit<Mass> g = SI.GRAM;
-		
-		Unit<?> result = g.multiply(m);
-		System.out.println(result);
-		
-		IMeasure<Length> q1 = new LengthAmount(1, m);
-		System.out.println(q1);
-		IMeasure<Mass> q2 = new MassAmount(1, g);
-		System.out.println(q2);
-		Quantity<?> q3 = q1.multiply(q2);
-		System.out.println(q3);
-//		Quantity<Length> q4 = q1.add(q2); // this fails at compile time, not at runtime
-//		System.out.println(q4);
-	}
-
-}
diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/NamesExample.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/NamesExample.java
deleted file mode 100644
index 58481b2..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/NamesExample.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.eclipse.uomo.examples.units.console.sandbox;

-

-import com.ibm.icu.impl.ICUService;

-

-public class NamesExample {

-

-	/**

-	 * @param args

-	 */

-	public static void main(String[] args) {

-		// TODO Auto-generated method stub

-		ICUService.Factory factory = new ICUService.SimpleFactory((Object)"a", "b");

-		System.out.println(factory);

-	}

-

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/OSGiRequirements.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/OSGiRequirements.java
deleted file mode 100644
index 5b5004f..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/OSGiRequirements.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.eclipse.uomo.examples.units.console.sandbox;

-

-import org.eclipse.uomo.units.SI;

-import org.eclipse.uomo.units.impl.system.Imperial;

-import org.eclipse.uomo.util.Parser;

-import org.unitsofmeasurement.quantity.Length;

-import org.unitsofmeasurement.unit.SystemOfUnits;

-import javax.measure.Unit;

-import javax.measure.UnitConverter;

-

-/**

- * 

- * @author Werner Keil

- * @version 1.1

- * <p>

- * Thanks to Barry for his input and inspiration.

- * </p>

- */

-public class OSGiRequirements {

-

-	/**

-	 * @param args

-	 */

-	public static void main(String[] args) throws Exception {

-		SystemOfUnits system = SI.getInstance();

-		Unit<Length> km = SI.METRE.multiply(1000);

-		Unit<Length> foot = Imperial.INCH.multiply(12);

-		UnitConverter converter = km.getConverterTo(foot);

-		Parser<String, Unit<?>> p = null;

-		Unit<?> userDefinedUnit = (p == null) ? null : p.parse("m/s^2"); // this is not a valid UCUM expression;-)

-		System.out.println("0.1 km in feet = " + converter.convert(0.1));

-		System.out.println(system.getName());

-		System.out.println(userDefinedUnit);

-	}

-

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/ObsoleteUnitsExample.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/ObsoleteUnitsExample.java
deleted file mode 100644
index 6e4a2a0..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/ObsoleteUnitsExample.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Copyright (c) 2012, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil - initial API and implementation
- */
-package org.eclipse.uomo.examples.units.console.sandbox;
-
-import static org.eclipse.uomo.examples.units.types.GermanObsolete.*;
-import static org.eclipse.uomo.units.impl.system.USCustomary.FOOT;
-import static org.eclipse.uomo.units.SI.*;
-
-import org.eclipse.uomo.examples.units.types.PolishObsolete;
-import org.eclipse.uomo.units.IMeasure;
-import org.eclipse.uomo.units.impl.BaseAmount;
-import org.unitsofmeasurement.quantity.Length;
-
-/**
- * @author Werner Keil
- *
- */
-public class ObsoleteUnitsExample {
-
-	/**
-	 * @param args
-	 */
-	@SuppressWarnings("deprecation")
-	public static void main(String[] args) {
-		IMeasure<Length> l = BaseAmount.valueOf(10, METRE);
-		System.out.println(l);
-		System.out.println(l.to(FOOT));
-		System.out.println(l.to(FOOT_ZURICH));
-		System.out.println(l.to(STONE_FOOT));
-		System.out.println(l.to(FOOT_LAUSANNE));
-		System.out.println(l.to(ELL_NORTH));
-		System.out.println(l.to(ELL_SOUTH));
-		System.out.println(l.to(PolishObsolete.ELL));
-	}
-
-}
diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/RadiologicalEmergencyPreparedness.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/RadiologicalEmergencyPreparedness.java
deleted file mode 100644
index 90fefe5..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/RadiologicalEmergencyPreparedness.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * Copyright (c) 2005, 2011, Werner Keil, Ikayzo and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil - initial API and implementation
- */
-package org.eclipse.uomo.examples.units.console.sandbox;
-
-import static org.eclipse.uomo.units.SI.Prefix.MILLI;
-import static org.eclipse.uomo.units.SI.*;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.uomo.units.IMeasure;
-import org.eclipse.uomo.units.impl.quantity.IonizingRadiationAmount;
-import org.unitsofmeasurement.quantity.IonizingRadiation;
-
-/**
- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * 
- * @see <a
- *      href="http://www.nema.ne.gov/technological/dose-limits.html">NEMA:
- *      Radiological Emergency Preparedness</a>
- */
-public class RadiologicalEmergencyPreparedness {
-
-	/**
-	 * @param args
-	 */
-	public static void main(String[] args) {
-		Map <IMeasure<IonizingRadiation>, String> repMap = new HashMap<IMeasure<IonizingRadiation>, String>();
-		IonizingRadiationAmount ira = new IonizingRadiationAmount(100, MILLI(ROENTGEN));
-		
-		repMap.put(ira, SandboxMessages.REP_100mR);
-		ira = new IonizingRadiationAmount(1, ROENTGEN);
-		repMap.put(ira, SandboxMessages.REP_1R);
-		ira = new IonizingRadiationAmount(2.5, ROENTGEN);
-		repMap.put(ira, SandboxMessages.REP_2dot5R);
-		
-		for (IMeasure<IonizingRadiation> dosimeterLimit : repMap.keySet()) {			
-			System.out.println(dosimeterLimit + " :: " + repMap.get(dosimeterLimit));
-		}
-		
-	}
-
-}
diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/SandboxMessages.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/SandboxMessages.java
deleted file mode 100644
index 4caf745..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/SandboxMessages.java
+++ /dev/null
@@ -1,28 +0,0 @@
-/**

- * Copyright (c) 2005, 2011, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.examples.units.console.sandbox;

-

-import org.eclipse.osgi.util.NLS;

-

-final class SandboxMessages extends NLS {

-	private static final String BUNDLE_NAME = SandboxMessages.class.getPackage().getName() + ".messages"; //$NON-NLS-1$

-	public static String REP_100mR;

-	public static String REP_1R;

-	public static String REP_2dot5R;

-	

-	static {

-		// initialize resource bundle

-		NLS.initializeMessages(BUNDLE_NAME, SandboxMessages.class);

-	}

-

-	private SandboxMessages() {

-	}

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/SandboxPlayground.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/SandboxPlayground.java
deleted file mode 100644
index a46a6b1..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/SandboxPlayground.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/**

- * Copyright (c) 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial implementation

- */

-package org.eclipse.uomo.examples.units.console.sandbox;

-

-import org.eclipse.uomo.units.IMeasure;

-import org.eclipse.uomo.units.SI;

-import org.eclipse.uomo.units.impl.quantity.AngleAmount;

-import org.unitsofmeasurement.quantity.Angle;

-

-/**

- * @author Werner

- *

- */

-public class SandboxPlayground {

-

-	/**

-	 * @param args

-	 */

-	public static void main(String[] args) {

-		Angle a = new AngleAmount(12,SI.RADIAN); 

-		System.out.println(a);

-		IMeasure<Angle> m = new AngleAmount(12,SI.RADIAN);

-		System.out.println(m);

-	}

-

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/SeismicExample.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/SeismicExample.java
deleted file mode 100644
index 3f5430d..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/SeismicExample.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**

- * Copyright (c) 2005, 2014, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.examples.units.console.sandbox;

-

-import org.eclipse.uomo.examples.units.types.Seismic;

-import org.eclipse.uomo.units.IMeasure;

-import org.eclipse.uomo.units.impl.quantity.EnergyAmount;

-import org.unitsofmeasurement.quantity.Energy;

-

-/**

- * @author Werner Keil

- *

- */

-public class SeismicExample {

-

-	/**

-	 * @param args

-	 */

-	public static void main(String[] args) {

-		IMeasure<Energy> e = new EnergyAmount(8.3, Seismic.RICHTER_MAGNITUDE);

-		System.out.println(e);

-	}

-

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/TemperatureExample.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/TemperatureExample.java
deleted file mode 100644
index 9c3fd4a..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/console/sandbox/TemperatureExample.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Copyright (c) 2005, 2014, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil - initial API and implementation
- */
-package org.eclipse.uomo.examples.units.console.sandbox;
-
-import org.eclipse.uomo.units.AbstractQuantity;
-import org.eclipse.uomo.units.SI;
-import org.eclipse.uomo.units.impl.quantity.TemperatureAmount;
-import org.eclipse.uomo.units.impl.system.USCustomary;
-import org.unitsofmeasurement.quantity.Temperature;
-
-/**
- * @author Werner Keil
- * @version 1.1
- *
- */
-public class TemperatureExample {
-
-	/**
-	 * @param args
-	 */
-	public static void main(String[] args) {
-		TemperatureAmount temp1 = new TemperatureAmount(0, SI.CELSIUS);
-		AbstractQuantity<Temperature> temp2 = temp1.to(SI.KELVIN);
-		AbstractQuantity<Temperature> temp3 = temp1.to(USCustomary.FAHRENHEIT);
-		System.out.println(temp1 + " -> " + temp2 + " -> " + temp3);
-	}
-
-}
diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/DwarfPlanet.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/DwarfPlanet.java
deleted file mode 100644
index 8b6a051..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/DwarfPlanet.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * Copyright (c) 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil - initial API and implementation
- */
-package org.eclipse.uomo.examples.units.types;
-
-import static org.eclipse.uomo.units.SI.*;
-import static org.eclipse.uomo.units.SI.Prefix.KILO;
-import static org.eclipse.uomo.examples.units.types.SolarSystem.G;
-
-import org.eclipse.uomo.units.IMeasure;
-import org.eclipse.uomo.units.impl.quantity.AccelerationAmount;
-import org.eclipse.uomo.units.impl.quantity.LengthAmount;
-import org.eclipse.uomo.units.impl.quantity.MassAmount;
-import org.unitsofmeasurement.quantity.Acceleration;
-import org.unitsofmeasurement.quantity.Length;
-import org.unitsofmeasurement.quantity.Mass;
-import javax.measure.Unit;
-
-/**
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.0
- * 
- * This <type>enum</type> is inspired by Josh Bloch's example in <a href="http://www.oracle.com/technetwork/java/effectivejava-136174.html">Effective Java Second Edition</a>
- * 
- * <p>
- * Suppose you want to add data and behavior to an enum. 
- * For example consider <a href="http://en.wikipedia.org/wiki/Dwarf_planet">dwarf planets</a> of the <a href="http://en.wikipedia.org/wiki/Solar_System">solar system</a>. 
- * Each planet knows its mass and radius, and can calculate its surface gravity and the weight of an object on the planet. 
- * Here is how it looks:
- * </p>
- */
-public enum DwarfPlanet {
-	CERES(newMass(9.43e+20, KILOGRAM), newLength(0.4873e6, METRE)),
-    PLUTO(newMass(1.305e+22, KILOGRAM), newLength(1.153e6, METRE)),
-    HAUMEA(newMass(4.006e+21, KILOGRAM), newLength(620, KILO(METRE))),
-    MAKEMAKE(newMass(3e+21, KILOGRAM), newLength(715, KILO(METRE))),
-    ERIS(newMass(1.67e+22, KILOGRAM), newLength(1163, KILO(METRE)));
-
-    private final IMeasure<Mass> mass;   // in kilograms
-
-    private final IMeasure<Length> radius; // in meters
-
-    DwarfPlanet(IMeasure<Mass> mass, IMeasure<Length> radius) {
-        this.mass = mass;
-        this.radius = radius;
-    }
-
-    public IMeasure<Mass> getMass() {
-        return mass;
-    }
-
-    public IMeasure<Length> getRadius() {
-        return radius;
-    }
-
-    public Acceleration surfaceGravity() {
-        double m = mass.doubleValue(KILOGRAM);
-        double r = radius.doubleValue(METRE);
-        return new AccelerationAmount(
-                G * m / (r * r), METRES_PER_SQUARE_SECOND);
-    }
-
-    private static IMeasure<Mass> newMass(double value, Unit<Mass> unit) {
-        return new MassAmount(value, unit);
-    }
-
-    private static IMeasure<Length> newLength(double value, Unit<Length> unit) {
-        return new LengthAmount(value, unit);
-    }
-
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder(super.toString());
-		sb.append("; ");
-		sb.append(Mass.class.getSimpleName());
-		sb.append(": ");
-		sb.append(getMass());
-		sb.append("; ");
-		sb.append("Radius: ");
-		sb.append(getRadius());
-		sb.append("; ");
-		sb.append("Surface Gravity: ");
-		sb.append(surfaceGravity());
-		return sb.toString();
-	}
-}
\ No newline at end of file
diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/GermanObsolete.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/GermanObsolete.java
deleted file mode 100644
index 9eee62a..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/GermanObsolete.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/**

- * Copyright (c) 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.examples.units.types;

-

-import static org.eclipse.uomo.units.SI.METRE;

-import static org.eclipse.uomo.units.SI.Prefix.MILLI;

-import static org.eclipse.uomo.units.impl.system.USCustomary.FOOT;

-

-import org.eclipse.uomo.units.AbstractSystemOfUnits;

-import org.unitsofmeasurement.quantity.Length;

-import org.unitsofmeasurement.unit.SystemOfUnits;

-import javax.measure.Unit;

-

-/**

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 0.1

- * @see <a

- *      href="http://en.wikipedia.org/wiki/German_obsolete_units_of_measurement">Wikipedia: German Obsolete Units of Measurement</a>

- * @deprecated

- */

-public class GermanObsolete extends AbstractSystemOfUnits {

-

-	/**

-	 * Distance between elbow and fingertip. In the <b>North</b>, often 2 feet,

-	 * In Prussia 17 / 8 feet, in the South variable, often 2½ feet.

-	 * The smallest known German Elle is 402.8 mm, the longest 811 mm.

-	 * */

-	public static final  Unit<Length> ELL_NORTH = FOOT.multiply(2);

-	

-	/**

-	 * Distance between elbow and fingertip. In the North, often 2 feet,

-	 * In Prussia 17 / 8 feet, in the <b>South</b> variable, often 2½ feet.

-	 * The smallest known German Elle is 402.8 mm, the longest 811 mm.

-	 * */

-	public static final  Unit<Length> ELL_SOUTH = FOOT.multiply(2.5d);

-	

-	/** The Fuß or German foot varied widely from place to place in the German-speaking world, and also with time. 

-	 * In some places, more than one type of Fuß was in use.

-	 * @see <a href="http://en.wikipedia.org/wiki/German_obsolete_units_of_measurement#Fu.C3.9F_.28foot.29">Wikipedia: German Obsolete - Fuß</a>

-	 * */

-	public static final  Unit<Length> FOOT_ZURICH = MILLI(METRE).multiply(301);

-	

-	/** The Fuß or German foot varied widely from place to place in the German-speaking world, and also with time. 

-	 * In some places, more than one type of Fuß was in use.

-	 * @see <a href="http://en.wikipedia.org/wiki/German_obsolete_units_of_measurement#Fu.C3.9F_.28foot.29">Wikipedia: German Obsolete - Fuß</a>

-	 * */

-	public static final  Unit<Length> FOOT_ZUG = FOOT_ZURICH;

-	

-	/**

-	 * Fuß, Lausanne, Canton of Waadt<p> 

-	 * The Fuß or German foot varied widely from place to place in the German-speaking world, and also with time. 

-	 * In some places, more than one type of Fuß was in use.

-	 * @see <a href="http://en.wikipedia.org/wiki/German_obsolete_units_of_measurement#Fu.C3.9F_.28foot.29">Wikipedia: German Obsolete - Fuß</a>

-	 * */

-	public static final  Unit<Length> FOOT_LAUSANNE = MILLI(METRE).multiply(293);

-	

-	/**

-	 * Steinfuß, Zug, Canton of<p> 

-	 * The Fuß or German foot varied widely from place to place in the German-speaking world, and also with time. 

-	 * In some places, more than one type of Fuß was in use.

-	 * @see <a href="http://en.wikipedia.org/wiki/German_obsolete_units_of_measurement#Fu.C3.9F_.28foot.29">Wikipedia: German Obsolete - Fuß</a>

-	 * */

-	public static final  Unit<Length> STONE_FOOT = MILLI(METRE).multiply(268);

-	

-	@Override

-	public String getName() {

-		return GermanObsolete.class.getSimpleName();

-	}

-

-    /**

-     * Default constructor (prevents this class from being instantiated).

-     */

-    private GermanObsolete() {

-    }

-	

-	/**

-	 * The singleton instance of {@code Seismic}.

-	 */

-	private static final GermanObsolete INSTANCE = new GermanObsolete();

-

-	/**

-	 * Returns the singleton instance of this class.

-	 * 

-	 * @return the Seismic system instance.

-	 */

-	public static final SystemOfUnits getInstance() {

-		return INSTANCE;

-	}	

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Health.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Health.java
deleted file mode 100644
index 26580a7..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Health.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/**

- * Copyright (c) 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.examples.units.types;

-

-import org.eclipse.uomo.units.AbstractSystemOfUnits;

-import org.eclipse.uomo.units.SI;

-import org.eclipse.uomo.units.impl.BaseUnit;

-import org.unitsofmeasurement.unit.SystemOfUnits;

-import javax.measure.Unit;

-

-/**

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 0.1

- */

-@SuppressWarnings("deprecation")

-public class Health extends AbstractSystemOfUnits {

-

-	private static final Unit<Heartbeat> BEAT = addUnit(new BaseUnit<Heartbeat>(

-			Messages.BEAT));

-	

-	// BPM.

-	@SuppressWarnings("unchecked")

-	public static final  Unit<HeartRate> BPM = addUnit((Unit<HeartRate>) BEAT.divide(SI.SECOND.multiply(60)),

-			Messages.BEAT);

-	

-	@Override

-	public String getName() {

-		return Health.class.getSimpleName();

-	}

-

-    /**

-     * Default constructor (prevents this class from being instantiated).

-     */

-    private Health() {

-    }

-	

-	/**

-	 * The singleton instance of {@code Seismic}.

-	 */

-	private static final Health INSTANCE = new Health();

-

-	/**

-	 * Returns the singleton instance of this class.

-	 * 

-	 * @return the Seismic system instance.

-	 */

-	public static final SystemOfUnits getInstance() {

-		return INSTANCE;

-	}	

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/HeartRate.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/HeartRate.java
deleted file mode 100644
index 48b0d80..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/HeartRate.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.eclipse.uomo.examples.units.types;

-

-import javax.measure.Quantity;

-

-/**

- * Heart rate refers to the speed of the heartbeat, 

- * specifically the number of heartbeats per unit of time. 

- * The heart rate is typically expressed as beats per minute (bpm). 

- * The heart rate can vary according to the body's physical needs, 

- * including the need to absorb oxygen and excrete carbon dioxide.

- *

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.0

- */

-public interface HeartRate extends Quantity<HeartRate> {

-

-}
\ No newline at end of file
diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/HeartRateAmount.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/HeartRateAmount.java
deleted file mode 100644
index 92fb37f..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/HeartRateAmount.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.eclipse.uomo.examples.units.types;

-

-import org.eclipse.uomo.units.impl.BaseAmount;

-import javax.measure.Unit;

-

-/**

- * Represents the speed of heart beat.

- * The standard unit for this quantity is "bpm" (Beats per Minute).

- *

- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.0, Date: 2013-10-25

- */

-public final class HeartRateAmount extends BaseAmount<HeartRate> implements HeartRate {

-

-	public HeartRateAmount(Number number, Unit<HeartRate> unit) {

-		super(number, unit);

-	}

-

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Heartbeat.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Heartbeat.java
deleted file mode 100644
index ea4349f..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Heartbeat.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.eclipse.uomo.examples.units.types;

-

-import javax.measure.Quantity;

-

-/**

- * Heartbeat is a unit of heart beats.

- * 

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 1.0

- */

-public interface Heartbeat extends Quantity<Heartbeat> {

-

-}
\ No newline at end of file
diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Messages.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Messages.java
deleted file mode 100644
index 7fb237f..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Messages.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/**

- * Copyright (c) 2005, 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.examples.units.types;

-

-import org.eclipse.osgi.util.NLS;

-

-final class Messages extends NLS {

-	

-	private static final String BUNDLE_NAME = Messages.class.getPackage().getName() + ".messages"; //$NON-NLS-1$

-	public static String Planet_Radius;

-	public static String Planet_SurfaceGravity;

-	public static String Planet_Usage;

-	public static String Planet_SurfaceWeight;

-	

-	public static String BEAT;

-	

-	static {

-		// initialize resource bundle

-		NLS.initializeMessages(BUNDLE_NAME, Messages.class);

-	}

-

-	private Messages() {

-	}

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Planet.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Planet.java
deleted file mode 100644
index ac54adc..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Planet.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/**
- * Copyright (c) 2005, 2013, Werner Keil and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *    Werner Keil - initial API and implementation
- */
-package org.eclipse.uomo.examples.units.types;
-
-import static org.eclipse.uomo.units.SI.*;
-import static org.eclipse.uomo.examples.units.types.SolarSystem.G;
-
-import org.eclipse.uomo.units.IMeasure;
-import org.eclipse.uomo.units.impl.quantity.AccelerationAmount;
-import org.eclipse.uomo.units.impl.quantity.LengthAmount;
-import org.eclipse.uomo.units.impl.quantity.MassAmount;
-import org.unitsofmeasurement.quantity.Acceleration;
-import org.unitsofmeasurement.quantity.Length;
-import org.unitsofmeasurement.quantity.Mass;
-import javax.measure.Unit;
-
-/**
- * @author  <a href="mailto:uomo@catmedia.us">Werner Keil</a>
- * @version 1.0.2
- * 
- * This <type>enum</type> is inspired by Josh Bloch's example in <a href="http://www.oracle.com/technetwork/java/effectivejava-136174.html">Effective Java Second Edition</a>
- * 
- * <p>
- * Suppose you want to add data and behavior to an enum. 
- * For example consider <a href="http://en.wikipedia.org/wiki/Planet">planets</a> of the <a href="http://en.wikipedia.org/wiki/Solar_System">solar system</a>.  
- * Each planet knows its mass and radius, and can calculate its surface gravity and the weight of an object on the planet. 
- * Here is how it looks:
- * </p>
- */
-public enum Planet {
-
-    MERCURY(newMass(3.303e+23, KILOGRAM), newLength(2.4397e6, METRE)),
-    VENUS(newMass(4.869e+24, KILOGRAM), newLength(6.0518e6, METRE)),
-    EARTH(newMass(5.976e+24, KILOGRAM), newLength(6.37814e6, METRE)),
-    MARS(newMass(6.421e+23, KILOGRAM), newLength(3.3972e6, METRE)),
-    JUPITER(newMass(1.9e+27, KILOGRAM), newLength(7.1492e7, METRE)),
-    SATURN(newMass(5.688e+26, KILOGRAM), newLength(6.0268e7, METRE)),
-    URANUS(newMass(8.686e+25, KILOGRAM), newLength(2.5559e7, METRE)),
-    NEPTUNE(newMass(1.024e+26, KILOGRAM), newLength(2.4746e7, METRE));
-
-    private final IMeasure<Mass> mass;   // in kilograms
-
-    private final IMeasure<Length> radius; // in meters
-
-    Planet(IMeasure<Mass> mass, IMeasure<Length> radius) {
-        this.mass = mass;
-        this.radius = radius;
-    }
-
-    public IMeasure<Mass> getMass() {
-        return mass;
-    }
-
-    public IMeasure<Length> getRadius() {
-        return radius;
-    }
-
-    public Acceleration surfaceGravity() {
-        double m = mass.doubleValue(KILOGRAM);
-        double r = radius.doubleValue(METRE);
-        return new AccelerationAmount(
-                G * m / (r * r), METRES_PER_SQUARE_SECOND);
-    }
-
-    private static IMeasure<Mass> newMass(double value, Unit<Mass> unit) {
-        return new MassAmount(value, unit);
-    }
-
-    private static IMeasure<Length> newLength(double value, Unit<Length> unit) {
-        return new LengthAmount(value, unit);
-    }
-
-	@Override
-	public String toString() {
-		StringBuilder sb = new StringBuilder(super.toString());
-		sb.append("; ");
-		sb.append(Mass.class.getSimpleName());
-		sb.append(": ");
-		sb.append(getMass());
-		sb.append("; ");
-		sb.append(Messages.Planet_Radius);
-		sb.append(getRadius());
-		sb.append("; ");
-		sb.append("Surface Gravity: ");
-		sb.append(surfaceGravity());
-		return sb.toString();
-	}
-}
\ No newline at end of file
diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/PolishObsolete.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/PolishObsolete.java
deleted file mode 100644
index 35c5a9f..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/PolishObsolete.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**

- * Copyright (c) 2012, 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.examples.units.types;

-

-import org.eclipse.uomo.units.AbstractSystemOfUnits;

-import org.eclipse.uomo.units.SI;

-import org.unitsofmeasurement.quantity.Length;

-import org.unitsofmeasurement.unit.SystemOfUnits;

-import javax.measure.Unit;

-

-/**

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 0.0.2, 2013-05-14

- * @see <a

- *      href="http://en.wikipedia.org/wiki/Obsolete_Polish_units_of_measurement">Wikipedia: Obsolete Polish Uits of Measurement</a>

- * @deprecated

- */

-public class PolishObsolete extends AbstractSystemOfUnits {

-

-	/** The basic unit of length - the ell or łokieć in Polish - was set to 0.5955 metres 

-	 *  

-	 * */

-	public static final  Unit<Length> ELL = SI.METRE.multiply(0.5955d);

-	

-	@Override

-	public String getName() {

-		return PolishObsolete.class.getSimpleName();

-	}

-

-    /**

-     * Default constructor (prevents this class from being instantiated).

-     */

-    private PolishObsolete() {

-    }

-	

-	/**

-	 * The singleton instance of {@code Seismic}.

-	 */

-	private static final PolishObsolete INSTANCE = new PolishObsolete();

-

-	/**

-	 * Returns the singleton instance of this class.

-	 * 

-	 * @return the Seismic system instance.

-	 */

-	public static final SystemOfUnits getInstance() {

-		return INSTANCE;

-	}	

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Seismic.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Seismic.java
deleted file mode 100644
index c8ffd12..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/Seismic.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/**

- * Copyright (c) 2005, 2011, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.examples.units.types;

-

-import org.eclipse.uomo.units.AbstractSystemOfUnits;

-import org.eclipse.uomo.units.SI;

-import org.unitsofmeasurement.quantity.Energy;

-import org.unitsofmeasurement.unit.SystemOfUnits;

-import javax.measure.Unit;

-

-/**

- * @author <a href="mailto:uomo@catmedia.us">Werner Keil</a>

- * @version 0.4.1

- */

-public class Seismic extends AbstractSystemOfUnits {

-

-	// Richter scale.

-	public static final  Unit<Energy> RICHTER_MAGNITUDE = (SI.JOULE.multiply(1.5d)).add(4.4d);

-	// e = 10 ^ (4.4 +3 M / 2)

-		//SI.JOULE.divide(Math.pow(10, 4.4d)).transform(new LogConverter());

-	

-	@Override

-	public String getName() {

-		return Seismic.class.getSimpleName();

-	}

-

-    /**

-     * Default constructor (prevents this class from being instantiated).

-     */

-    private Seismic() {

-    }

-	

-	/**

-	 * The singleton instance of {@code Seismic}.

-	 */

-	private static final Seismic INSTANCE = new Seismic();

-

-	/**

-	 * Returns the singleton instance of this class.

-	 * 

-	 * @return the Seismic system instance.

-	 */

-	public static final SystemOfUnits getInstance() {

-		return INSTANCE;

-	}	

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/SolarSystem.java b/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/SolarSystem.java
deleted file mode 100644
index 621a10d..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/main/java/org/eclipse/uomo/examples/units/types/SolarSystem.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package org.eclipse.uomo.examples.units.types;

-

-class SolarSystem {

-    // universal gravitational constant  (m3 kg-1 s-2)

-    static double G = 6.67300E-11;

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/test/java/org/eclipse/uomo/examples/units/types/PlanetsTest.java b/examples/units/org.eclipse.uomo.examples.units.console/src/test/java/org/eclipse/uomo/examples/units/types/PlanetsTest.java
deleted file mode 100644
index cc463b8..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/test/java/org/eclipse/uomo/examples/units/types/PlanetsTest.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**

- * Copyright (c) 2005, 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-/**

- * Copyright (c) 2005, 2013, Werner Keil and others.

- * All rights reserved. This program and the accompanying materials

- * are made available under the terms of the Eclipse Public License v1.0

- * which accompanies this distribution, and is available at

- * http://www.eclipse.org/legal/epl-v10.html

- *

- * Contributors:

- *    Werner Keil - initial API and implementation

- */

-package org.eclipse.uomo.examples.units.types;

-

-import static org.eclipse.uomo.core.impl.OutputHelper.println;

-import static org.junit.Assert.assertEquals;

-

-import org.eclipse.uomo.examples.units.types.Planet;

-import org.junit.Test;

-

-

-/**

- * @author Werner Keil

- * @version 1.0.1

- */

-public class PlanetsTest {

-

-	@Test

-	public void testPlanets() {

-		Planet[] planets = Planet.values();

-		

-		for (Planet planet : planets) {

-			println(planet);

-		}

-		

-		assertEquals(8, planets.length);

-	}

-	

-	@Test

-	public void testDwarfPlanets() {

-		DwarfPlanet[] dwarfPlanets = DwarfPlanet.values();

-		

-		for (DwarfPlanet planet : dwarfPlanets) {

-			println(planet);

-		}

-		

-		assertEquals(5, dwarfPlanets.length);

-	}

-}

diff --git a/examples/units/org.eclipse.uomo.examples.units.console/src/test/java/org/eclipse/uomo/examples/units/types/package-info.java b/examples/units/org.eclipse.uomo.examples.units.console/src/test/java/org/eclipse/uomo/examples/units/types/package-info.java
deleted file mode 100644
index c6a2b75..0000000
--- a/examples/units/org.eclipse.uomo.examples.units.console/src/test/java/org/eclipse/uomo/examples/units/types/package-info.java
+++ /dev/null
@@ -1,8 +0,0 @@
-/**

- * 

- */

-/**

- * @author Werner

- *

- */

-package org.eclipse.uomo.examples.units.types;
\ No newline at end of file
diff --git a/examples/units/pom.xml b/examples/units/pom.xml
index b0990b1..37435e6 100644
--- a/examples/units/pom.xml
+++ b/examples/units/pom.xml
@@ -12,7 +12,6 @@
 	<modules>
 	   <module>org.eclipse.uomo.examples.units.console</module>
 	   <!--  >module>org.eclipse.uomo.examples.units.pluginsample</module -->
-    <module>org.eclipse.uomo.examples.units.android</module>
   </modules>
 	<!-- ==================================================== -->
     <!-- Repositories. This is where Maven looks for dependencies. 
diff --git a/features/karaf/esh-tp/src/main/feature/feature.xml b/features/karaf/esh-tp/src/main/feature/feature.xml
index 1791eb1..653a60f 100644
--- a/features/karaf/esh-tp/src/main/feature/feature.xml
+++ b/features/karaf/esh-tp/src/main/feature/feature.xml
@@ -19,7 +19,7 @@
 
   <feature name="esh-tp-measurement" version="${project.version}">
     <bundle>mvn:javax.measure/unit-api/1.0</bundle>
-    <bundle>mvn:tech.units/indriya/1.1</bundle>
+    <bundle>mvn:tech.units/indriya/1.3</bundle>
     <bundle>mvn:tec.uom.lib/uom-lib-common/1.0.1</bundle>
   </feature>
 
diff --git a/features/karaf/esh-tp/src/main/history/dependencies.xml b/features/karaf/esh-tp/src/main/history/dependencies.xml
index 0603d98..476b5de 100644
--- a/features/karaf/esh-tp/src/main/history/dependencies.xml
+++ b/features/karaf/esh-tp/src/main/history/dependencies.xml
@@ -5,7 +5,7 @@
         <feature prerequisite="false" dependency="false">eventadmin</feature>
         <feature prerequisite="false" dependency="false">scr</feature>
         <bundle>mvn:javax.measure/unit-api/1.0</bundle>
-        <bundle>mvn:tech.uom.lib/uom-lib-common/1.2</bundle>
+        <bundle>mvn:tec.uom.lib/uom-lib-common/1.0.1</bundle>
         <bundle>mvn:tech.units/indriya/1.3</bundle>
     </feature>
 </features>
diff --git a/features/org.eclipse.uomo.feature/feature.xml b/features/org.eclipse.uomo.feature/feature.xml
index 9f5c62b..e9afbf9 100644
--- a/features/org.eclipse.uomo.feature/feature.xml
+++ b/features/org.eclipse.uomo.feature/feature.xml
@@ -147,27 +147,12 @@
       <import plugin="org.eclipse.uomo.core" version="0.8.0" match="greaterOrEqual"/>
       <import plugin="org.eclipse.uomo.util" version="0.8.0" match="greaterOrEqual"/>
       <import plugin="org.eclipse.uomo.xml" version="0.8.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.uomo.units" version="0.8.0" match="greaterOrEqual"/>
       
       <import plugin="org.eclipse.core.runtime" version="3.6.0" match="greaterOrEqual"/>
       <import plugin="org.eclipse.osgi" version="3.6.0" match="greaterOrEqual"/>
       <import plugin="org.eclipse.osgi.services" version="3.2.100" match="greaterOrEqual"/>
    </requires>
-
-   <plugin
-         id="org.eclipse.uomo.icu"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-         
-   <plugin
-         id="org.eclipse.uomo.units"
-         download-size="0"
-         install-size="0"
-         version="0.0.0"
-         unpack="false"/>
-
+        
    <plugin
          id="org.eclipse.uomo.util"
          download-size="0"
diff --git a/releng/org.eclipse.uomo.target/mars.target b/releng/org.eclipse.uomo.target/mars.target
deleted file mode 100644
index ba32ba0..0000000
--- a/releng/org.eclipse.uomo.target/mars.target
+++ /dev/null
@@ -1,64 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>

-<?pde?>

-<target name="UOMo for Eclipse Mars" sequenceNumber="1492180482">

-  <locations>

-    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

-      <unit id="org.eclipse.license.feature.group" version="1.0.1.v20140414-1359"/>

-      <repository location="http://download.eclipse.org/cbi/updates/license"/>

-    </location>

-    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

-      <unit id="org.eclipse.sdk.feature.group" version="4.5.2.v20160212-1500"/>

-      <unit id="org.eclipse.jdt.feature.group" version="3.11.2.v20160212-1500"/>

-      <unit id="org.eclipse.m2e.feature.feature.group" version="1.6.2.20150902-0002"/>

-      <unit id="org.eclipse.m2e.sdk.feature.feature.group" version="1.6.2.20150902-0002"/>

-      <unit id="org.eclipse.m2e.wtp.feature.feature.group" version="1.2.1.20150819-2220"/>

-      <unit id="org.eclipse.m2e.wtp.sdk.feature.feature.group" version="1.2.1.20150819-2220"/>

-      <unit id="org.eclipse.mylyn.commons.feature.group" version="3.18.0.v20151116-1930"/>

-      <unit id="org.eclipse.jpt.jpa.feature.feature.group" version="3.4.2.v201512181609"/>

-      <unit id="org.eclipse.datatools.sdk.feature.feature.group" version="1.12.0.v201406061321-7PB21FEpPZQXdcX0z-_yMM0Hfz0w"/>

-      <unit id="org.eclipse.swtbot.eclipse.feature.group" version="2.3.0.201506081302"/>

-      <unit id="org.eclipse.jetty.http" version="9.2.13.v20150730"/>

-      <unit id="org.eclipse.jetty.servlet" version="9.2.13.v20150730"/>

-      <unit id="org.eclipse.jetty.server" version="9.2.13.v20150730"/>

-      <unit id="org.eclipse.jetty.util" version="9.2.13.v20150730"/>

-      <repository location="http://download.eclipse.org/releases/mars/"/>

-    </location>

-    <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">

-		<unit id="javax.measure.unit-api" version="0.0.0"/>

-		<unit id="javax.measure.unit-api.source" version="0.0.0"/>

-		<unit id="tec.uom.lib.uom-lib-common" version="0.0.0"/>

-		<unit id="tec.uom.lib.uom-lib-common.source" version="0.0.0"/>

-		<unit id="tec.uom.se" version="0.0.0"/>

-		<unit id="tec.uom.se.source" version="0.0.0"/>

-		<repository location="http://download.eclipse.org/uomo/third-party/repository"/>

-	</location>

-    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

-      <unit id="org.eclipse.epp.logging.aeri.feature.feature.group" version="2.0.4.v20170307-1435"/>

-      <unit id="org.eclipse.epp.logging.aeri.feature.source.feature.group" version="2.0.4.v20170307-1435"/>

-      <repository location="http://download.eclipse.org/technology/epp/logging/stable/"/>

-    </location>

-    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

-      <unit id="org.eclipse.jst.web_sdk.feature.feature.group" version="3.7.1.v201512021921"/>

-      <unit id="org.eclipse.jst.server_sdk.feature.feature.group" version="3.4.200.v201512031711"/>

-      <unit id="org.eclipse.jst.common.fproj.enablement.jdt.sdk.feature.group" version="3.6.3.v201501141810"/>

-      <unit id="org.eclipse.wst.common.fproj.sdk.feature.group" version="3.7.0.v201505072140"/>

-      <unit id="org.eclipse.wst.web_sdk.feature.feature.group" version="3.7.1.v201602111638"/>

-      <unit id="org.eclipse.jst.enterprise_sdk.feature.feature.group" version="3.7.0.v201602161345"/>

-      <unit id="org.eclipse.wst.server_adapters.sdk.feature.feature.group" version="3.2.500.v201508271522"/>

-      <repository location="http://download.eclipse.org/webtools/repository/mars/"/>

-    </location>

-    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

-      <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>

-      <unit id="ch.qos.logback.slf4j" version="1.0.7.v201505121915"/>

-      <unit id="org.slf4j.log4j" version="1.7.2.v20130115-1340"/>

-      <repository location="http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/repository/"/>

-    </location>

-    	<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">

-		<unit id="javax.measure.unit-api" version="0.0.0"/>

-		<unit id="tec.uom.lib.uom-lib-common" version="0.0.0"/>

-		<unit id="tec.uom.se" version="0.0.0"/>

-		<unit id="systems.uom.systems-quantity" version="0.0.0"/>

-		<repository location="https://dl.bintray.com/unitsofmeasurement/p2/systems.uom_p2_site/0.7"/>

-	</location>

-  </locations>

-</target>
\ No newline at end of file
diff --git a/releng/org.eclipse.uomo.target/neon.target b/releng/org.eclipse.uomo.target/neon.target
index fbc717b..a733f76 100644
--- a/releng/org.eclipse.uomo.target/neon.target
+++ b/releng/org.eclipse.uomo.target/neon.target
@@ -19,10 +19,10 @@
 	</location>

 	<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">

 		<unit id="javax.measure.unit-api" version="0.0.0"/>

-		<unit id="tec.uom.lib.uom-lib-common" version="0.0.0"/>

-		<unit id="tec.uom.se" version="0.0.0"/>

+		<unit id="tech.uom.lib.uom-lib-common" version="0.0.0"/>

+		<unit id="tech.units.indriya" version="0.0.0"/>

 		<unit id="systems.uom.systems-quantity" version="0.0.0"/>

-		<repository location="https://dl.bintray.com/unitsofmeasurement/p2/systems.uom_p2_site/0.7"/>

+		<repository location="https://dl.bintray.com/unitsofmeasurement/p2/systems.uom_p2_site/1.3a"/>

 	</location>

 </locations>

 </target>

diff --git a/releng/org.eclipse.uomo.target/oxygen.target b/releng/org.eclipse.uomo.target/oxygen.target
index f9730ca..b97329e 100644
--- a/releng/org.eclipse.uomo.target/oxygen.target
+++ b/releng/org.eclipse.uomo.target/oxygen.target
@@ -26,33 +26,17 @@
       <repository location="http://download.eclipse.org/releases/oxygen/201702031000/"/>

     </location>

     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

-      <unit id="org.eclipse.jst.web_sdk.feature.feature.group" version="3.8.0.v201701262152"/>

-      <unit id="org.eclipse.jst.server_sdk.feature.feature.group" version="3.4.300.v201606081655"/>

-      <unit id="org.eclipse.jst.common.fproj.enablement.jdt.sdk.feature.group" version="3.8.0.v201603091933"/>

-      <unit id="org.eclipse.wst.common.fproj.sdk.feature.group" version="3.7.0.v201505072140"/>

-      <unit id="org.eclipse.wst.web_sdk.feature.feature.group" version="3.9.0.v201701262152"/>

-      <unit id="org.eclipse.jst.enterprise_sdk.feature.feature.group" version="3.8.0.v201701262152"/>

-      <unit id="org.eclipse.wst.server_adapters.sdk.feature.feature.group" version="3.2.600.v201606081655"/>

-      <repository location="http://download.eclipse.org/webtools/downloads/drops/R3.9.0/S-3.9.0M5-20170201000249/repository"/>

-    </location>

-    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">

+	  <unit id="javax.measure.unit-api" version="0.0.0"/>

       <unit id="org.hamcrest" version="1.1.0.v20090501071000"/>

       <unit id="ch.qos.logback.slf4j" version="1.1.2.v20160301-0943"/>

       <unit id="org.slf4j.log4j" version="1.7.2.v20130115-1340"/>

-      <repository location="http://download.eclipse.org/tools/orbit/downloads/drops/S20170120205402/repository/"/>

+      <repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20180330011457/repository/"/>

     </location>

-    <!--

-    <location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">

-		<unit id="javax.measure.unit-api" version="0.0.0"/>

-		<unit id="javax.measure.unit-api.source" version="0.0.0"/>

-		<unit id="tec.uom.lib.uom-lib-common" version="0.0.0"/>

-		<unit id="tec.uom.lib.uom-lib-common.source" version="0.0.0"/>

-		<unit id="tec.uom.se" version="0.0.0"/>

-		<unit id="tec.uom.se.source" version="0.0.0"/>

-		<unit id="systems.uom.systems-quantity" version="0.0.0"/>

-		<repository location="http://unitsofmeasurement.github.io/third-party/target/repository"/>

+	<location includeAllPlatforms="false" includeConfigurePhase="false" includeMode="planner" includeSource="true" type="InstallableUnit">

+	  <unit id="tech.uom.lib.uom-lib-common" version="0.0.0"/>

+	  <unit id="tech.units.indriya" version="0.0.0"/>

+	  <unit id="systems.uom.systems-quantity" version="0.0.0"/>

+	  <repository location="https://dl.bintray.com/unitsofmeasurement/p2/systems.uom_p2_site/1.3a"/>

 	</location>

-	-->

-	<location path="${project_loc:releng}/third-party" type="Directory"/>

   </locations>

 </target>
\ No newline at end of file